本文最后更新于 2025-01-10T22:20:33+08:00
第三部分 流程控制语句 Python代码在执行时是按照自上向下顺序执行的。通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次 流程控制语句分成两大类:条件判断语句,循环语句
条件判断语句(if语句) if语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 num = 10 if False : print (123 ) print (456 ) print (789 ) print (101112 ) num = 28 username=input ("输入用户名" )if username=="admin" : print ("欢迎管理员光临" )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 username = input ('请输入你的用户名:' )if username == 'admin' : print ('欢迎管理员光临!' )
if-else语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 让用户在控制台中输入一个年龄 age = 7 if age > 17 : print ('你已经成年了~~' )else : print ('你还未成年~~' )
if-elif-else语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 age = 210 age = 68 if age >= 18 and age < 30 : print ('你已经成年了!' )elif age >= 30 and age < 60 : print ('你已经中年了!' )elif age >= 60 : print ('你已经退休了!' )
练习 练习1: 编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from cgi import print_form enter_an_integer = int (input ('输入一个整数:' ))print ('你输入的整数是:' ,enter_an_integer)if enter_an_integer % 2 == 0 : print ('这个数是偶数' )if enter_an_integer % 2 == 1 : print ('这个数是奇数' )
练习2: 编写一个程序,检查任意一个年份是否是闰年。 如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年
1 2 3 4 5 6 7 year = int (input ('输入一个年份' ))if year % 4 == 0 and year %100 !=0 or year %400 == 0 : print ('这个年份是闰年' )else : print ('这个年份不是闰年' )
练习3: 我家的狗5岁了,5岁的狗相当于多大年龄的人呢? 其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。 那么5岁的狗相等于人类的年龄就应该是10.5+10.5+4+4+4 = 33岁 编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。 如果用户输入负数,请显示一个提示信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 dog_age = float (input ('请输入狗的年龄:' ))print ('狗的年龄是:' ,dog_age)if dog_age < 0 : print ('你输入的' ,dog_age,'不是正确的年龄' )elif dog_age <= 2 : dog_age = 10.5 print ('狗的年龄是:' ,dog_age)else : dog_age = 21 +(dog_age-2 )*4 print ('狗的年龄是' ,dog_age)
练习4: 从键盘输入小明的期末成绩: 当成绩为100时,’奖励一辆BMW’ 当成绩为[80-99]时,’奖励一台iphone’ 当成绩为[60-79]时,’奖励一本参考书’ 其他时,什么奖励也没有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 final_result = float (input ('请输入期末成绩:' ))print ('你的期末成绩是:' ,final_result)if final_result == 100 : print ('奖励一辆BMW' )elif final_result >= 80 and final_result<=99 : print ('奖励一台iphone' )elif final_result >= 60 and final_result <= 79 : print ('奖励一本参考书' )else : print ('没有奖励' )
练习5: 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件: 高:180cm以上; 富:1000万以上; 帅:500以上; 如果这三个条件同时满足,则:’我一定要嫁给他’ 如果三个条件有为真的情况,则:’嫁吧,比上不足,比下有余。’ 如果三个条件都不满足,则:’不嫁!’
1 2 3 4 5 6 7 8 9 10 height = float (input ('请输入身高(0-300)c:' )) wealth = float (input ('请输入财富xxx万元:' )) face= float (input ('请输入颜值(0-800)cm:' ))if height > 180 and wealth > 1000 and face > 500 : print ('我一定要嫁给他' )elif height > 180 or wealth >1000 or height > 180 : print ('嫁吧,比上不足,比下有余。' )else : print ('不嫁!' )
循环语句 循环语句可以使指定的代码块重复指定的次数 循环语句分成两种,while循环 和 for循环
while循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 i = 0 while i < 10 : i += 1 print (i,'hello' )else : print ('else中的代码块' )
break \ continue \ pass break: 可以用来立即退出循环语句(包括else)
continue: 可以用来跳过当次循环 break和continue都是只对离他最近的循环起作用
pass: 是用来在判断或循环语句中占位的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 例子: i = 0 while i < 5 : if i == 3 : break print (i) i += 1 else : print ('循环结束' ) i = 0 if i < 5 : pass
练习 练习1:求100以内所有的奇数之和 求100以内所有的奇数之和
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 result = 0 i = 0 while i <= 100 : i += 1 if i % 2 == 1 : result = result + iprint ("100以内所有奇数和为:" ,result)
练习2: 求100以内所有7的倍数之和,以及个数 求100以内所有7的倍数之和,以及个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 result = 0 i = 7 count = 0 while i < 100 : count += 1 i += 7 result = result + iprint ('result=' ,result)print ('j=' ,count)
练习3:求1000以内所有的水仙花数 水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:13 + 5 3 + 3**3 = 153)。 求1000以内所有的水仙花数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 i = 100 while i < 1000 : a = i // 100 b = (i - a * 100 ) // 10 c = i % 10 if a**3 + b**3 + c**3 == i : print (i) i += 1
练习4:判断是否是质数 获取用户输入的任意数,判断其是否是质数。质数是只能被1和它自身整除的数,1不是质数也不是合数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 num = int (input ('输入一个任意的大于1的整数:' )) i = 2 flag = True while i < num: if num % i == 0 : flag = False i += 1 if flag : print (num,'是质数' )else : print (num,'不是质数' )
循环嵌套 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 i = 0 while i < 5 : j = 0 while j < i + 1 : print ("* " ,end='' ) j += 1 print () i += 1
练习 练习1: 打印99乘法表 打印99乘法表 11=1 1 2=2 22=4 1 3=3 23=6 3 3=9 … 9*9=81
1 2 3 4 5 6 7 8 9 10 11 12 i = 0 while i < 9 : i += 1 j = 0 while j < i: j += 1 print (f"{j} *{i} ={i*j} " ,end="" ) print ()
练习2:求100以内所有的质数 求100以内所有的质数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 i = 2 while i <= 100 : flag = True j = 2 while j < i: if i % j == 0 : flag = False j += 1 if flag : print (i) i += 1
练习优化示例:模块的引入 模块,通过模块可以对Python进行扩展 引入一个time模块,来统计程序执行的时间。time()函数可以用来获取当前的时间,返回的单位是秒
优化前: 求100000以内所有的质数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 from time import * begin = time() i = 2 while i <= 10000 : flag = True j = 2 while j < i: if i % j == 0 : flag = False j += 1 if flag : i += 1 end = time()print ("程序执行花费了:" ,end - begin , "秒" )
结果:程序执行花费了: 8.352874279022217 秒
第一次优化:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from time import * begin = time() i = 2 while i <= 10000 : flag = True j = 2 while j < i: if i % j == 0 : flag = False break j += 1 if flag : pass i += 1 end = time()print ("程序执行花费了:" ,end - begin , "秒" )
结果:程序执行花费了: 0.9832208156585693 秒
第二次优化:
算法优化:一个数的因数最大是其本身的算术平方根
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from time import * begin = time() i = 2 while i <= 10000 : flag = True j = 2 while j <= i ** 0.5 : if i % j == 0 : flag = False break j += 1 if flag : pass i += 1 end = time()print ("程序执行花费了:" ,end - begin , "秒" )
结果: 程序执行花费了: 0.040992021560668945 秒
可见优化程序对提高程序运行效率十分重要。
总练习 小游戏 小游戏 《唐僧大战白骨精》
内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 、身份选择 ① 显示提示信息 欢迎光临 xxx 游戏! 请选择你的身份: 1. xxx 2. xxx 请选择:x ② 根据用户选择来分配身份(显示不同的提示消息) 1. --- 2. --- 3. --- 2 、游戏进行 ① 显示玩家的基本信息(攻击力 生命值) ② 显示玩家可以进行的操作: 1 、练级 - 提升玩家的攻击力和生命值 2 、打BOSS - 玩家对BOSS进行攻击,玩家要攻击BOSS,BOSS对玩家进行反击 - 计算BOSS是否被玩家消灭,玩家是否被BOSS消灭 - 游戏结束 3 、逃跑 - 退出游戏,显示提示信息,游戏结束!
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 print ('-' *20 ,'欢迎光临《唐僧大战白骨精》' ,'-' *20 )print ('请选择你的身份:' )print ('\t1.唐僧' )print ('\t2.白骨精' ) player_choose = input ('请选择[1-2]:' )print ('-' *66 )if player_choose == '1' : print ('你已经选择了1,你将以->唐僧<-的身份来进行游戏!' )elif player_choose == '2' : print ('你竟然选择了白骨精,太不要脸了,你将以->唐僧<-的身份来进行游戏!' )else : print ('你的输入有误,系统将自动分配身份,你将以->唐僧<-的身份来进行游戏!' ) player_life = 2 player_attack = 2 boss_life = 10 boss_attack = 10 print ('-' *66 )print (f'唐僧,你的生命值是 {player_life} , 你的攻击力是 {player_attack} ' )while True : print ('-' *66 ) print ('请选择你要进行的操作:' ) print ('\t1.练级' ) print ('\t2.打BOSS' ) print ('\t3.逃跑' ) game_choose = input ('请选择要做的操作[1-3]:' ) if game_choose == '1' : player_life += 2 player_attack += 2 print ('-' *66 ) print (f'恭喜你升级了!,你现在的生命值是 {player_life} , 你的攻击力是 {player_attack} ' ) elif game_choose == '2' : boss_life -= player_attack print ('-' *66 ) print ('->唐僧<- 攻击了 ->白骨精<-' ) if boss_life <= 0 : print (f'->白骨精<-受到了 {player_attack} 点伤害,重伤不治死了,->唐僧<-赢得了胜利!' ) break player_life -= boss_attack print (' ->白骨精<- 攻击了 ->唐僧<-' ) if player_life <= 0 : print (f'你受到了 {boss_attack} 点伤害,重伤不治死了!GAME OVER' ) break elif game_choose == '3' : print ('-' *66 ) print ('->唐僧<-一扭头,撒腿就跑!GAME OVER' ) break else : print ('-' *66 ) print ('你的输入有误,请重新输入!' )