简短的python入门语法

#!/usr/bin/python3

# 开始学习python
print("hello,world")

# 条件语句
a, b = 3, 1
if a < b:
    print('a({}) is less than b({})'. format(a,b))
else:
    print('a({}) is great than b({})'. format(a,b))

# ?: 模仿三元表达式
print("foo" if a < b else "bar");

# while循环 fabonacci
a,b = 0,1 # 赋值 a = 0 , b = 1

while b < 50:
    print(b)
    a, b = b, a+b

print("Done.")  

# for循环,迭代输出文本信息
#lines.txt
#01 This is a line of text
#02 This is a line of text
#03 This is a line of text
#04 This is a line of text
#05 This is a line of text

fh = open("lines.txt")
for line in fh.readlines():
    print(line, end='')

# 计算素数的函数,素数(只能被1和自己整除的数)
def isprime(n):
    if n == 1:
        #print("1 is special")
        return False
    for x in range(2, n):
        if n%x == 0:
            #print("{} equals {} x {}".format(n, x, n // x))
            return False
    else:
        #print(n, "is a prime")
        return True

for n in range(1, 30):
    isprime(n)

# 迭代函数 primes, phper表示很难理解.
# yield返回当前的素数,primes下次迭代时,将会从yield返回的数字开始。

def primes(n = 1):
    while(True):
        if isprime(n): yield n
        n += 1

for n in primes():
    if n > 100: break
    print(n)

# oop 基本类的定义
class Fibonacci():
    def __init__(self, a, b):
        self.a = a
        self.b = b
    # 含有yield语法的应该都是一个构造器,可以内部迭代
    def series(self):
        while (True):
            yield(self.b)
            self.a, self.b = self.b, self.a + self.b

# 迭代构造器 Fibonacci.series()
f = Fibonacci(0,1)
for r in f.series():
    if r > 100: break
    print(r, end=' ')

# 一个简单的mvc模式
# oop2 继承与多态,高级概念
# Duck,Person,Dog都继承AnimalActions

# --- VIEW ---
class AnimalActions:
    def quack(self): return self._doAction('quack')
    def feathers(self): return self._doAction('feathers')
    def bark(self): return self._doAction('bark')
    def fur(self): return self._doAction('fur')

    def _doAction(self, action):
        if action in self.strings:
            return self.strings[action]
        else:
            return "The {} has no {}".format(self.animalName(), action)

    def animalName(self):
        return self.__class__.__name__.lower()

# --- MODEL ---
class Duck(AnimalActions):
    strings = dict(
        quack = "Quaaaak!",
        feathers = "The duck has gray and white feathers."      
    )

class Person(AnimalActions):
    strings = dict(
        quack = "The person iitates a duck!",
        feathers = "The person takes a feather from the ground and shows it.",
        bark = "The person says woof.",
        fur = "The person puts on a fur coat."
    )

class Dog(AnimalActions):
    strings = dict(        
        bark = "Arf!",
        fur = "The dog has white fur with black spots."
    )

# --- CONTROLLER ---
def in_the_doghouse(dog):
    print(dog.bark())
    print(dog.fur())

def in_the_forest(duck):
    print(duck.quack())
    print(duck.feathers())

def main():
    donald = Duck()
    john = Person()
    fido = Dog()
    # 三个对象都能在不同的地方拥有同样的行为
    print("- In the forest:")
    for o in ( donald, john, fido ):
        in_the_forest(o)

    print("- In the doghouse:")
    for o in ( donald, john, fido ):
        in_the_doghouse(o)

if __name__ == '__main__': main()

# 异常 phper表示很强大
# 尝试打开一个不存在的文件
try:
    fh = open("xline.txt")
    for line in fh.readlines():
        print(line)
except IOError as e:
    print("something bad happend {}.".format(e))

上边是基础语法篇的大杂烩,其中囊括了基本数据类型的开创与应用,以及打字与印刷变量的原委、类型,还恐怕有宗旨数据类型的转移。

# 拼接字符串
temp = 42
print("now temp is" + ' 42')

# 缩进表示代码块,保存缩进一致,否则报错
a = 1
if a == 2:
    print("the result is true.")
    print("!")
else:
    print("It's error!")

# 自然字符串,r。r保证了""中的内容都是字符,不会发生转义
str1 = r"this is a nature string.\n"
print(str1)

# 处理unicode字符串
str2 = u"this is an unicode string."
print(str2)

# 同一行可显示多条语句
import sys
x = 'runoob'
sys.stdout.write(x + '\n')

# 不换行输出,就在输出结尾加上 end = " "
print("don't newline", end=" ")
print("ok")

# import 和 from...import的区别
# import是将整个模块导入,包括模块内的所有函数
# form...import是从某个模块导入某个函数或者某个成员变量
# 语法:from sys import argv,path;

''' 关于比较长的注释,可以这样来写
    这有些类似于OC和Java的文档注释
    可以详细注释函数功能以及参数代表的含义和参数示例
'''

# help(max)

# 数据类型
# Python中有6种数据类型
# Number(数字), String(字符串), List(列表), Tuple(元组), Sets(集合), Dictionary(字典)

# Number类型
# 在Python3中,数字只有4种,int, float, bool, complex
# 整数只有一种int类型,取消了python2中的长整形(在值后面加个'L',现在再加'L'编译器会报错)
# 如果你想知道某个变量的类型,可以使用type()函数
i1 = 45
f1 = 3.3
b1 = True
c1 = 4 + 5j
print(type(i1), type(f1), type(b1), type(c1))
# 输出结果为:<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
# 另外Python一共了一个判断变量类型的函数
a = 111
isinstance(a, int)
# 但是这个isinstance方法在Python Shell中可以打印出结果,在Sbulime Text 3中无法打印结果

# type()函数 和 isinstance()函数 的区别
# type()函数判断类型时不识别类的继承关系,也就是说用这个类型的父类判断时返回False
# isinstance()函数会识别类的继承关系,判断是否是父类时仍然会返回 True

# 数字中有两个特殊值,True 和 False。这两个值在Python3.0之后的版本被定义为关键字,分别代表数字1 和 0
# 并且True 和 False 可以和数字类型的变量进行操作,比如加减乘除

# Del 删除语句
var3 = 234
# del var3
print(var3)
# Del 关键字的作用就是删除引用或者变量, 当你删除了引用后又使用这个引用时就会报错,原理应该类似于OC中的野指针

# 加减乘除,除法取整//,求余%,乘方**
# 有一下几点需要知道:
# 1.一个变量通过赋值可以指向不同的类型的对象
# 2.在混合计算时,Python会自动把结果改为Float类型(以免丢失精度)

# 最后一个数值类型,复数Complex, 比如表示 1+2j,有如下两种方式:
var4 = complex(1, 2)
var5 = 1 + 2j

# String  字符串
# Python中用''或者""表示字符串,用\表示转义
# 截取字符串
# 索引从0开始,-1代表倒数第二个
str3 = "abcdefg"
print(str3)
print(str3[0:-1])  # 范围选取
print(str3[2:])   # 输出索引3开始之后的所有字符
print(str3[0])    # 单个选取
print(str3 * 2)   # 连续输出两次(中间无空格或者制表符‘\t’)
# r代表原始字符串 ,在输出时会忽略转义字符\n\t等
print(r"\n fdafsf\t")
# 与C语言字符串不同的是,Python字符串不能改变,如果你想向某个字符串的索引位置赋值时,就会报错
# Python字符串的索引有两种方式,从左向右从0开始,从右向左从-1开始
# 最后,再说一遍,Python中的字符串不能改变

# List 列表
# 在Python中,List使用非常频繁,可以完成大多数集合类的数据结构的实现
# List中可以存放各种类型的数据,支持数字,字符串,也可以包含列表(嵌套)
listLikeArray = ["abcd", 456, 7.89, 'unicode']
tinyList = [123, 'abc']
print(tinyList)             # 列表也可以直接打印
print(listLikeArray[0])     # 列表中第一个元素
print(listLikeArray[1:3])  # 列表中从第2个到第3个元素(范围是左闭右开,同Java)
print(tinyList * 2)         # 输出两次列表

# 与String相比,List中的元素是可以改变的
# 而且直接通过索引改变即可
tinyList[0] = 456
print(tinyList)

# List 同样可以使用+操作符拼接
print(tinyList + listLikeArray)

# Tuple 元组
# Tuple 和 List相似,同样可以存放多种类型数据,元素之间用,隔开 ,写在()中
tupleArray = ('abcde', 666, "yuioop", 8.887)
print(tupleArray)  # 打印tupleArray
print(tupleArray[1])  # 按索引取元素
print(tupleArray[1:-1])  # 按索引区间取元素
# 在List中有的操作,在Tuple中基本都存在,区别就在于Tuple中的元素的值不可改变

# 如果想要构建一个空的元组 或者 只有一个元素的元组
tupleSingle = ()  # k空元组
tupleSingleElement = (667)
newTuple = (tupleSingleElement, 668)  # 给元组添加元素
print(newTuple)

# 提示:String, List, Tuple都属于Sequense(序列)

# Set 集合
# Python中的集合比较特殊,不同于C#和Java,Python中的集合是一个不重复的元素序列
# 基本功能是成员关系测试、删除重复元素
# 创建集合可以使用{},也可以使用set()函数
set1 = set('abcdeeeeefg')
set2 = {'tom', 'jack', 'william', 'tom', 'steven'}
# 但是如果你要创建一个非空的集合的话,只能使用set()函数
# 因为{}内为空,表示创建一个空字典

print(set1)  # set1中重复的元素被自动去掉

set3 = set('tom')
# 成员测试
print('tom' in set2)  # 只能判断某个元素是否能在集合中
print(set3 in set2)  # 不能这样写,结果为False

# Set 既然是集合,也就意味着可以进行 ‘差,交,并’等基本运算
set4 = set('abcdef')
set5 = set('bcd')
print(set4 - set5)      # 差集
print(set4 | set5)      # 并集
print(set4 & set5)      # 交集
print(set4 ^ set5)      # 两个集合不同时存在的元素

# Dictionary 字典
# Dictionary 和 List 有点类似,不同的是:List为有序的对象集合,Dictionary为无需的对象集合
# 在取值赋值等操作也有不同,List根据索引来操作,而Dictionary根据键(key)来操作

# 创建空字典
dic1 = {}
# 给空字典添加键值对
dic1['one'] = "第一个字符串"
dic1['two'] = "第二个字符串"
print(dic1)  # 在Python sehll中可以打印,Sublime Text3 中不能打印字典的内容

# 创建并初始化一个字典
dic2 = {'one': 'one\'s string', 'two': 'two\'s string', 'three': '3', 4: 4444}
print(dic2)  # 大括号创建的字典在Sublime中可以打印出来
print(dic2['one'])  # 根据key取Value
print(dic2[4])      # key可以是String,也可以是数值
print(dic2.keys())  # 输出所有dic2的key  打印内容:dict_keys(['one', 'two', 'three', 4])
print(dic2.values())  # 输出所有dic2的value

# 使用构造函数构造字典,语法如下
dic3 = dict([('firefox', 1), ('Google', 2), ('Internet Explore11', 3)])
print(dic3)

# 字典还有一些其他内置API,用到再说
# 最后再说一遍,key的值必须唯一,有重复会报错。

# Python数据转换
var6 = int(66.89)
var7 = float(77)
var8 = str(99999)
print(var7, type(var8))
var10 = "666"
var9 = repr(var10)  # 将对象x转换为表达式字符串(repr函数中不支持字符串拼接、强转等方式)
print(var9)

var11 = eval(var8)  # 用来计算字符串在Python有效表达式,并返回一个对象
print(var11)

s = ['123', '456', '789']
var12 = tuple(s)    # 把List(列表) 转为 Tuple(元组)
print(var12)

s2 = set('aaaaaaaa')
var13 = tuple(s2)  # 把Set(集合) 转为 Tuple(元组)时,只能转第一个字符
print(var13)        # var13 = ('a',)

# 这样的转换还有很多,等用到时可以写的demo测试一下就明白了,不用一一学习,千篇一律

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图