(二)循环结构
1.while循环
num = 0
sum = 0
while num<=100:
sum += num
num += 1
print("1-100所有数字的累加和:",sum)
#1-100所有数字的累加和: 5050
2.for循环结构,通常用于可迭代对象的遍历
d = {'name':'lmh','age':'18',"address":"llll"}
for x in d: #遍历字典中所有的key或是d.keys
print(x)
for y in d.items(): #遍历字典中所有的键值对
print(y)
for z in d.values(): #遍历字典中所有的值
print(z)
range(start,end,step)
for x in range(2,9,3):
print(x,end='\t') #end在同一行打印,每个之间隔一个制表符
计算1-100累加和,奇数和,偶数和
sum=0
sum_odd=0
sum_even=0
num=0
for num in range(101):
sum+=num
if num%2==0:
sum_even += num
else:
sum_odd += num
num += 1
print("0-100总和为{0},奇数和为{1},偶数和为{2}".format(sum,sum_odd,sum_even))
3.嵌套循环
(不太会)
for x in range(5):
for y in range(5):
print(x,end="\t")
print() #换行
'''0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4'''
嵌套练习打印九九乘法表
for m in range(1,10):
for n in range(1,m+1):
print("{0}*{1}={2}".format(m,n,(m*n)),end="\t")
print()
4.break语句
用来结束整个循环,当有嵌套时,break只能跳出最近一层循环
while True:
a = input("请输入一个字符(输入Q或q结束)")
if a=="Q" or a==("q"):
print("循环结束,退出")
break
else:
print(a)
'''
请输入一个字符(输入Q或q结束)r
r
请输入一个字符(输入Q或q结束)w
w
请输入一个字符(输入Q或q结束)q
循环结束,退'''
5.continue语句
用于结束本次循环,继续下一次。
6.循环中的else子句
如果for,while循环没有被break'语句结束,则会执行else子句,否则不执行
录入4位员工的薪资
salarySum = 0
salarys = []
ave = 0
for x in range(4):
s = input("请输入员工的薪资(按Q或q结束)")
if s.upper()=='Q':
print("录入结束")
break
if float(s)<0:
print("无效,继续录入")
continue
print("录入成功")
salarys.append(float(s)) #在列表尾部添加新的元素
salarySum+=float(s)
else:
ave = salarySum / 4
print("您已经全部录入")
print("平均薪资",ave) #只有全部录入才计算平均薪资
print("录入薪资",salarys)
print("总发薪资",salarySum)
7.循环代码优化
尽量减少循环内部不必要的计算,内层循环的计算尽可能向外提
尽量使用查询较快的局部变量
连接多个列表,使用join()
列表进行元素插入和删除,尽量在列表尾部操作
8.使用zip并行迭代
通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止
names = ("lmh","lmm","lhh","mhhh")
ages=(18,16,15,17)
genders =("female","male","female")
for name,age,gender in zip(names,ages,genders):
print("{0}--{1}--{2}".format(name,age,gender))
'''lmh--18--female
lmm--16--male
lhh--15--female'''
9.推导式创建序列
- 列表推导式:
#两种结果一样,列表推导式更简洁
a = [x*2 for x in range(1,5) if x%2==0]
print(a)
b = []
for x in range(1,5):
if x%2==0:
b.append(x*2)
print(b)
生成一个列表里面放元组,zip迭代
a = [(row,col) for row,col in zip(range(1,5),range(101,105))]
print(a) #生成列表[(1, 101), (2, 102), (3, 103), (4, 104)]
for A in a:
print(A)
#(1, 101)
#(2, 102)
#(3, 103)
#(4, 104)
- 字典推导式
{key_expression:value_expression for 表达式 in 可迭代对象}
values = ["北京","shanghai","guangzhou","shenzhen"]
cities={id:city for id,city in zip(range(1,5),values)}
print(cities)
#{1: '北京', 2: 'shanghai', 3: 'guangzhou', 4: 'shenzhen'}
利用字典推导式计算字符串中字符个数
a = "aihifahuah,dhaiugaus ,ausicigs ,cuigacu"
char_count = {c:a.count(c) for c in a} #c是字符串中的字符,将c作为key意思是不能重复,后面出现的会覆盖前面的
for num in char_count.items():
print(num)
'''
('a', 7)
('i', 6)
('h', 4)
('f', 1)
('u', 6)
(',', 3)
('d', 1)
('g', 3)
('s', 3)
(' ', 2)
('c', 3)'''
- 集合推导式
和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象}
集合是没有顺序的
- 生成器推导式(不能直接生成元组,需要遍历出来)
注意只能生成一次
a = (x*2 for x in range(1,100) if x%9==0)
print(a) #<generator object <genexpr> at 0x000002051B12DE50>
for x in a:
print(x,end='\n')
#18 36 54 72 90 108 126 144 162 180 198
综合练习:海龟图画同心圆
import turtle
p = turtle.Pen()
radius=[r for r in range(10,99,10)]
p.width(4)
colors=("red","yellow","blue","black","green")
for r,i in zip(radius,range(len(radius))):
p.color(colors[i%len(colors)]) #i去除以长度的余数对应到colors的索引
p.circle(r)
p.penup()
p.goto(0,-r)
p.pendown()
turtle.done()
print(radius)