没有人会记得死的东西,所以要活下去,咬牙切齿的活下去!
import sys
from itertools import chain
from random import randint
reload(sys)
sys.setdefaultencoding('utf-8')
案例一
要求:一个班级有10个人,考试语数外三门,要求打印每个同学的每一门成绩(同一行显示)并且统计总分数。
困惑:多重迭代?
分析:使用zip()传入三个列表,然后遍历即可。
c = [randint(10,100) for _ in range(10)]
m = [randint(10,100) for _ in range(10)]
e = [randint(10,100) for _ in range(10)]
# c,m,e三张列表代表了不同的分数
for cc,mm,ee in zip(c,m,e):
t = int(cc) + int(mm) + int(ee)
print cc,mm,ee
print 'SCORE:' + str(t)
案例二
要求:一个班级有10个人,考试语数外三门,要求统计分数高于60分的人数。
困惑:创建一个新的列表,然后分三次循环并且判断?
分析:使用chain()何以合并多个不同的列表,enumeratr()可以按照一个一定的顺序输出迭代对象和对象的序号(说教无益,上代码。)
chain()的使用方法
for x in chain(['A','B','C'],[1,2,3]):print x
运行结果:
A
B
C
1
2
3
enumerate()的用法
c = [randint(10,100) for _ in range(10)]
for x,v in enumerate(c):print x,v
运行结果:
0 43
1 96
2 96
3 86
4 68
5 99
6 21
7 58
8 33
9 88
当然还有一种写法和使用enumerate有异曲同工之妙。
c = [randint(10, 100) for _ in range(10)]
for i in range(len(c)):
print i,c[i]
运行结果:
0 19
1 31
2 27
3 32
4 20
5 84
6 75
7 96
8 88
9 87
代码实现
c = [randint(10,100) for _ in range(10)]
m = [randint(10,100) for _ in range(10)]
e = [randint(10,100) for _ in range(10)]
count = 0
for x in chain(c,m,e):
#其中cme的人数不一致也可以用
if x >60:
count +=1
print count
运行结果:
16