python 程序控制结构:选择、循环;python 函数;python基本输入输出(IO)
Python 控制结构
选择 if-elif-else
1
2
3
4
5
6
7
8
9
10>>>Parker = "plane"
>>>if Parker == "car":
charge = "beatles"
elif Parker == "motor":
charge = "helmet"
else:
charge = "wings"
>>>print (charge)
wings三元运算符
1
2
3
4
5
6t = x if x>=y else y
# 等价于
if x>=y:
t = x
else:
t = y循环
WHILE循环
1
2
3while i <= 100:
i += 1
print (i)FOR循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18>>>blog = ["what", "the", "HELL", "is", "this", "blog", "writing"]
# 序列项迭代
>>>for word in blog:
print (word, end = " ")
what the HELL is this blog writing
# 序列索引迭代
>>>namelist = [('wang',16),('miao',60),('zhao',34)]
>>>dic = {}
>>>for i in range(len(namelist)):
name = namelist[i][0]
age = namelist[i][1]
dic[name] = age
>>>print(dic)
{'wang': 16, 'miao': 60, 'zhao': 34}zip()迭代器迭代
1
2
3
4
5
6
7
8
9
10
11
12
13
14zip()函数从多个列表中每次取一个元素
>>>blog = ["B", "U", "L", "L", "S", "H", "I",'T']
>>>ind = range(8)
>>>for word,num in zip(blog,ind):
print ('{0}-{1}'.format(word,num))
B-0
U-1
L-2
L-3
S-4
H-5
I-6
T-7enumerate()同时得到下标和元素
1
2
3for (ind,word) in enumerate(blog):
print ind
print word循环中的ELSE语句
若从break跳出循环,不执行ELSE中的语句
若正常循环结束,执行ELSE中的语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16apples = 5
while apples !=0:
if apples ==1:
print ('only one left, continue?')
eat = input()
if eat == 'yes':
apples -= 1
continue
elif eat == 'no':
break
else:
print(' ''yes'' or ''no'' ')
continue
apples -= 1
else:
print('apples all eaten')
列表解析(list comprehension) — 轻量级循环
1
2
3
4
5>>>print([x**2 for x in range(10) if x**2<50])
[0, 1, 4, 9, 16, 25, 36, 49]
>>>print([(x,y) for x in range(2) for y in range(2)])
[(0, 0), (0, 1), (1, 0), (1, 1)]yield生成器
1
2
3
4
5
6
7
8
9
10
11
12
13# 当需要每次循环返回一个特定的值时,使用生成器比较方便,生成的是一个可迭代对象
def gen():
a = 1
yield a # 第一次返回 1
a = 'cat'
yield a # 第二次返回 cat
yield 99 # 第三次返回 99
for i in gen():
print(i)
# 生成器表达式
gen = (x for x in range(4)) # 与列表解析不同的是用()括起来,是可迭代对象循环对象(迭代器)
一个循环对象包含next()方法,和StopIteration错误:
1
2
3
4
5f = open('test.txt') # open返回的是一个循环对象
f.next() # next每次返回的是下一行的内容
f.next()
# 当到达结尾时,返回 StopIteration
Python 函数
自定义函数
不同类型的参数
位置参数
1
2
3def func(name,gender):
print('{0} is {1}'.format(name,gender))
func('Mia','Female')关键字参数
1
2
3def func(name,gender):
print('{0} is {1}'.format(name,gender))
func(gender='Female',name='Mia') # 使用参数名区分参数,可以任意改变顺序默认参数
1
2
3
4def func(name,gender='Female'): # 定义函数时可以设定参数默认值
print('{0} is {1}'.format(name,gender))
func('Mia') # 调用时不输入默认参数,则默认参数为默认值
func('Mia','Male') # 默认参数也可以修改可变长参数(包裹)
1
2
3
4
5def func(name,*manywords): # 加星号就变成了可变长参数(包裹)
print(name,'is',manywords)
func('Mia','a','girl','with','blue','eyes')
Mia is ('a', 'girl', 'with', 'blue', 'eyes')1
2
3
4
5def func(name,**manywords): # 加两个星号变成了可变长关键字参数
print(name,manywords)
func('Mia', gender='Female', age=20, hair='blonde')
Mia {'gender': 'Female', 'age': 20, 'hair': 'blonde'}
函数可作为参数传递
1
2
3
4
5
6
7def func(name,gender):
print('{0} is {1}'.format(name,gender))
def test(f,a,b):
func(a,b)
test(func,'Mia','Female')一些方便的函数
map()
1
2
3
4
5# map函数每次从两个表中取出一个元素,带入前方的函数
ans = map((lambda x,y: x+y),[1,2,3],[7,8,9])
print(list(ans)) # 可以用list函数把map返回的循环对象转换为表
[8, 10, 12]reduce()
1
2
3
4# reduce函数累进地作用于各个参数,先取1,2,运算结果后再向后取3,……
ans = reduce((lambda x,y: x+y),[1,2,3,7,8,9])
# 本例实际运算的是(((((1+2)+3)+7)+8)+9)filter()
1
2
3
4
5
6
7
8# filter函数用来筛选数据,仅把函数返回值为True的元素存入表(循环对象)
def func(a):
if a > 100:
return True
else:
return False
ans = filter(func,[10,56,101,500])
Python基本输入输出(IO)
File IO
1
2
3
4
5
6
7
8
9
10f = open('pybook','w+') # 'r'只读,'w'只写,'w+'读写
txt = ['Hi!','Welcome to pybook!']
for word in txt:
f.write(word)
f.write('\n') # 在写入txt文件时换行
f.close() # 记得关闭文件
f = open('pybook','r')
print(f.readlines())
f.close()常用的读写方法
1
2
3
4
5
6f.read(N) # 读取Nbytes的数据
f.readline() # 读取一行
f.readlines() # 读取所有行,储存在列表中,每个元素是一行
f.write('xxx') # 写入单个字符串'xxx'
f.writelines('aa\n','bb') # 当写入多个字符串构成列表(list)时,要用writelinesInteractive IO
输入Input()
1
2
3
4
5>>>a = input("input:") # input('提示信息')
input:123
# 输入数值型\列表\字典
eval(input())输出print()
1
2
3
4print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
# objects:输入对象,用,隔开
# sep: 打印时填充对象间隔,默认为' '空格
# end: 结束方式,\n换行%格式化操作符
1
2
3
4
5
6
7
8
9
10
11
12
13# %[(name)][flags][width].[precision]typecode
# (name):命名
# flags: +(右对齐), -(左对齐), ' '(在正数前填一个空格), '0'(填充0)
# width: 字符宽度
# precision: 小数点位数
# typecode: 数据类型
print('%s is %d years old' % ('Hugo', 20)) # %s<--'Hugo', %d<--20 , 模版和填值以 % 隔开
print('%(name)s is %(age)d years old' % {'name':'Hugo', 'age':20}) # 也可用字典填值
print('%+10.3f,%-10.3f,%+10.3f' % (-13.2, 32, 9.44))
-13.200,32.000 ,000009.440.format()格式化
1
2
3
4
5
6
7print('{0} and {1} and {0}'.format('a', 'b')) # 可索引
a and b and a
#{:4f}位数
#{>}右对齐
print(':{0:>4s} and {1:.3f}'.format('aa', 2.1)) # {0(索引):(位数)>(右对齐)4}
: aa and 2.100print(f’’)
1
2x=3,y=4
print(f'x={x:d},y={y:.3f}')
参考