11.6 学习日志

本文详细介绍了Python中的循环结构(while、for),包括遍历、嵌套、break、continue、else子句的应用,以及列表、字典、集合推导式和生成器的使用。最后通过海龟库展示了如何用循环画同心圆。
摘要由CSDN通过智能技术生成
(二)循环结构

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值