Python4.2 分支和循环
分支:只有符合条件,才会去做某事。
循环:只要符合条件,就持续做某事。
if条件分支
语法:
if 条件:
分支
elif条件:
分支
elif也可以不用,但是效率相应会降低。
需求:按照成绩划分等级,90分以上为A,80~90为B,60~80为C,60以下为D,用户输入分数,自动转换为A、B、C、D。
1 #p4_1.py 2 score = int (input('Please input a score: ')) 3 s1 = 'Your grade is ' 4 5 if 90 <= score <= 100: 6 print(s1 + 'A') 7 if 80 <= score < 90: 8 print(s1 + 'B') 9 if 60 <= score < 80: 10 print(s1 + 'C') 11 if score < 60: 12 print(s1 + 'D')
也可以写成:
1 #p4_2.py 2 score = int (input('Please input a score: ')) 3 s1 = 'Your grade is ' 4 5 if 90 <= score <= 100: 6 print(s1 + 'A') 7 else: 8 if 80 <= score < 90: 9 print(s1 + 'B') 10 else: 11 if 60 <= score < 80: 12 print(s1 + 'C') 13 else: 14 if score < 60: 15 print(s1 + 'D')
再简化一下:
1 #p4_3.py 2 score = int (input('Please input a score: ')) 3 s1 = 'Your grade is ' 4 5 if 90 <= score <= 100: 6 print(s1 + 'A') 7 elif 80 <= score < 90: 8 print(s1 + 'B') 9 elif 60 <= score < 80: 10 print(s1 + 'C') 11 elif score < 60: 12 print(s1 + 'D')
#p4_1没有用else if或者elif,那么当用户输入参数90,程序始终会无差别判断四个条件,而如果使用了else if或者elif,程序在判断到第一个条件,得出结果就会退出,提高了四倍的性能。
while循环
语法:
while条件:
循环体
需求:打印1+2+3+……+100的结果:
1 #p4_8.py 2 i = 1 3 sum = 0 4 5 while i <= 100: 6 sum += i 7 i += 1 8 print (sum)
设计循环体的时候要考虑退出循环的条件,例如上例中的i+=1,否则就会死循环。除了特殊场景,一般不需要死循环。
for循环
语法:
for 变量 in 可迭代对象:
循环体
可迭代对象指元素可以被单独提取出来的对象,比如字符串,数组等。例如字符串'python',而for循环就是从'python'这个字符串中每次取一个字母放入变量中去执行循环体,直到执行完毕。
1 >>> for each in 'python': 2 print (each) 3 4 5 p 6 y 7 t 8 h 9 o 10 n
如果要用for循环实现打印1+2+3+……+100的结果,那么就需要一个1~100的可迭代对象,要么建一个数组[1,2,3…]这就太拉跨了,要么使用一个叫做range()BIF函数,语法如下:
range(结束值)
range(开始值, 结束值)
range(开始值, 结束值, 步长)
开始值,结束值,步长,三个都只能是整数(正负都可以),开始值不填的话默认是0。
注意,这里的结束值是开区间,就是说是<而非<=结束值。
1 >>> list(range(10)) 2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]//可以看到这里不包括10 3 >>> list(range(3, 10)) 4 [3, 4, 5, 6, 7, 8, 9] 5 >>> list(range(1, 10, 2)) 6 [1, 3, 5, 7, 9] 7 >>> list(range(1, -10, -2)) 8 [1, -1, -3, -5, -7, -9]
现在有了0~100的可迭代对象,尝试用for循环实现打印1+2+3+……+100的结果:
1 #p4_10.py 2 sum = 0 3 4 for i in range(101)://注意这里开区间,所以必须是101, 5 sum += i 6 print (sum)
小甲鱼说“for和range()如胶似漆”,个人经验认为涉及到数据库的话,range()应该用得不会太多,大多时候还是从数据库来的数组或者列表。后面学得多了看看吧,也许会打脸。
break语句
break作用是跳出循环体,例如:
1 #p4_11.py 2 s = '我死循环了!' 3 time1 = 0 4 time2 = int(input('请输入循环次数:')) 5 6 while True: 7 print(s) 8 time1 += 1 9 if time1 == time2: 10 break
如果没有输入次数,就不会执行break并一直循环下去。
1 >>> 2 请输入循环次数:5 3 我死循环了! 4 我死循环了! 5 我死循环了! 6 我死循环了! 7 我死循环了!
再举个例子,找出区间内第n个闰年(被4整除且不被100整除,或可以被400整除的年份)
1 #p4_12.py 2 mypa = int(input('您要查2000年后的第几个闰年:')) 3 count = 0 4 5 for year in range(2000,9999): 6 if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0): 7 count += 1 8 if count == mypa: 9 break 10 print('2000年后第',mypa,'个闰年是:' ,year,'年')
运行结果:
1 >>> 2 您要查2000年后的第几个闰年:10 3 2000年后第 10 个闰年是: 2036 年 4 >>> 5 您要查2000年后的第几个闰年:1 6 2000年后第 1 个闰年是: 2000 年 7 >>> 8 您要查2000年后的第几个闰年:2 9 2000年后第 2 个闰年是: 2004 年
continue语句
这是另一个可以跳出循环的语句,作用是跳出本轮循环并开始下一轮循环,再开始下一轮循环之前,会先测试循环条件。
修改上一个需求,打印出区间内所有闰年年份:
1 #p4_13.py 2 3 for year in range(2000,2020): 4 if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0): 5 print(year) 6 continue
运行结果:
1 >>> 2 2000 3 2004 4 2008 5 2012 6 2016
else语句
else不仅可以和if搭配,还可以跟while和for搭配。
语法:
while条件:
循环体
else:
条件不成立时执行的内容
for变量in可迭代对象:
循环体
else:
条件不成立时执行的内容
看起来似乎和while/for完了之后直接打印没有区别,但实际上要执行“条件不成立时执行的内容”就意味着如果条件成立就不会运行else后面的代码,这点在break时有所体现。
1 #p4_14.py 2 #for完了直接打印 3 4 for year in range(2000,2020): 5 if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0): 6 break 7 print('2000年后第一个闰年是:',year)
效果如下:
1 >>> 2 2000年后第一个闰年是: 2000
用了else之后:
1 #p4_15.py 2 3 for year in range(2000,2020): 4 if (year % 4 == 0) & (year % 100 != 0) | (year % 400 == 0): 5 break 6 else: 7 print('2000年后第一个闰年是:',year)
运行效果:
1 >>> //什么也没有打印出来,因为if后的条件没有不成立,所以不会执行else后面的语句。
本文来自博客园,作者:巴拉拉没多少能量,转载请注明原文链接:https://www.cnblogs.com/beishi/p/15762246.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!