跟光磊学Python开发程序流程控制
https://m.toutiao.com/is/JTDYwKQ/
程序流程控制概述
程序分为三种执行结构:
顺序结构:即从上到下依次执行,之前编写的Phthon都是顺序结构
分支结构:根据条件成立,选择执行不同的分支代码
循环结构:根据条件成立,重复执行一段代码
分支结构
单分支if语句
if语句用于条件判断,其语法格式为
if 条件表达式:满足条件执行的代码
如果条件表达式的结果为True,则会执行满足条件执行的代码
判断用户输入的年龄是否大于18岁,才能去网吧上网
'''if 单分支条件判断@author tony 18601767221@163.com@version 2021-02-02 15:02:04@since python3.9.1'''def is_net(age): ''' 判断用户输入的年龄是否可以去网吧上网 :param age: :return: ''' if age >= 18: print('你可以去网吧上网了')age = int(input('请输入你的年龄:'))is_net(age)
程序运行结果
双分支if/else语句
if/else用于条件判断,当if语句的条件表达式成立,执行if语句的满足条件执行的代码,否则就执行else的不满足条件执行的代码。执行结果是二选一
if/else语句的语法格式是
if 条件表达式:满足条件执行的代码else:不满足条件执行的代码
根据用户输入的年龄判断是否可以上网
'''if/else 双分支条件判断@author tony 18601767221@163.com@version 2021-02-02 15:02:04@since python3.9.1'''def is_net(age): ''' 判断用户输入的年龄是否可以去网吧上网 :param age: :return: ''' if age >= 18: print('你可以去网吧上网了') else: print('年龄太小,回家好好学习吧')age = int(input('请输入你的年龄:'))is_net(age)
程序运行结果
使用if/else定义函数判断用户输入的数字是基数还是偶数
'''if/else判断用户输入的数字是奇数还是偶数@author tony 18601767221@163.com@version 2021-02-02 15:26:59@since python3.9.1'''def is_even_number(number): if number % 2 == 0: print(f'{number}是偶数') else: print(f'{number}是奇数')number = int(input('请输入一个数字:'))is_even_number(number)
程序运行结果
if/elif/else 多分支语句
if/elif/else用于多个条件判断,执行结果是多选一,其语法格式为
if 条件1:满足条件1执行的代码elif 条件2:满足条件2执行的代码elif 条件3:满足条件3执行的代码else:不满足条件执行的代码
if/elif/else多分支语句的执行流程是顺序判断,
先判断条件1,如果满足,就执行满足条件1执行的代码,
如果不满足条件1,那么就判断条件2,如果条件2满足,就执行满足条件2执行的代码,
如果不满足条件2,那么就判断条件3,如果条件3满足,那么就执行满足条件3执行的代码,
如果条件都不满足,那么就执行不满足条件执行的代码
else是可选的,但是一般都会写,用于容错
根据用户输入的日期判断星期几
'''if/elif/else多分支语句@author tony 18601767221@163.com@version 2021-02-02 15:44:00@since python3.9.1'''def is_week_day(day): ''' 根据用户输入的day判断星期几 :param day: :return: ''' if day == '1' or day == '一': print('星期一') elif day == '2' or day == '二': print('星期二') elif day == '3' or day == '三': print('星期三') elif day == '4' or day == '四': print('星期四') elif day == '5' or day == '五': print('星期五') elif day == '6' or day == '六': print('星期六') elif day == '7' or day == '日': print('星期日') else: print('你输入的日期有误')day = input('input day:')is_week_day(day)
if嵌套
if语句是可以相互嵌套的,用于复杂条件判断的应用场景
根据输入的分数判断等级
'''if嵌套@author tony 18601767221@163.com@version 2021-02-02 16:05:45@since python3.9.1'''def get_grade_by_score(score): ''' 根据输入的分数判断等级 :param score: :return: ''' if score > 100 or score < 0: print('成绩不合法') else: if score >= 90: print('成绩等级优') elif score >= 80: print('成绩等级良') elif score >= 70: print('成绩等级中') elif score >= 60: print('成绩等级差') else: print('成绩不及格')score = int(input('请输入你的成绩:'))get_grade_by_score(score)
程序运行结果
if语句实现三目运算符
python语言不支持其他语言的三目运算符,三目运算符表示有三个操作数,其语法格式是 表达式1?表达式2:表达式3,执行流程是如果表达式1的结果为True,三目运算符的结果为表达式2的值,否则为表达式3的值。
三目运算符就是if/else的简化形式,适合简单的条件判断。
而Python可以使用if/else实现三目运算符,其语法格式是表达式1 if 条件 else 表达式2,执行流程是判断条件是否成立,如果条件成立,执行结果为表达式1,否则执行结果为表达式2的值
'''if/else实现三目运算符@author tony 18601767221@163.com@version 2021-02-03 11:43:00@since python3.9.1'''def even_number_by_input(): ''' 判断用户输入的数字是奇数还是偶数 :return: ''' # 输入一个数字判断奇数偶数 number = int(input('请输入一个数字:')) result = '偶数' if number % 2 == 0 else '奇数' # 另外一种写法 # result = '奇数' if number % 2 != 0 else '偶数' return resultprint(test_func())
程序运行结果
随机数的使用
首先使用import random导入random模块,然后调用random模块的randint(a,b)函数产生随机数,a,b表示随机数的区间,随机数的值包含a和b
产生0-2之间的随机数,随机数的值是0,1,2
'''随机数的使用@author tony 18601767221@163.com@version 2021-02-02 16:20:03@since python3.9.1'''import random # 导入random模块# 使用随机数模块获取随机数# 产生0-2之间的随机数,随机数的值是0,1,2n = random.randint(0, 2)print(n)
程序运行结果
猜拳游戏
此游戏有两个角色:分别是电脑和玩家
游戏的动作就是比较剪刀、石头、布的大小,为了方便比较,采用数字0,1,2分别表示石头、剪刀和布。
玩家输入的数字由键盘输入,电脑输入的数字由随机数生成。
然后比较两个数字的大小,如果数字相等就是平局,再按照石头>剪刀,剪刀>布,布>石头的规则比较是玩家赢了还是电脑赢了
为了优化程序,还需要编写一个方法,根据用户和玩家输入的数字判断输入的石头、剪刀、布
'''猜拳游戏@author tony 18601767221@163.com@version 2021-02-03 10:54:47@since python3.9.1'''import randomdef get(number): ''' 根据用户输入的数字判断返回石头、剪刀、布的字符串 :param number: :return: ''' str = '' if (number == 0): str = '石头' elif(number==1): str='剪刀' elif (number==2): str='布' return strdef guess_game(): ''' 猜拳游戏 :return: ''' player = int(input('请输入数字 0表示石头,1表示剪刀,2表示布:')) if (player < 0 or player > 2): print('你输入的数字非法') else: print('你输入的数字是%s' % get(player)) # 模拟电脑猜拳 0表示石头,1表示剪刀,2表示布 robot = random.randint(0, 2) print('电脑输入的是%s' % get(robot)) # 玩家和电脑输入的数字相等就是平局 if (player == robot): print('平局') # 比较玩家赢了的情况 elif ((player == 0 and robot == 1) or (player == 1 and robot == 2) or (player == 2 and robot == 0)): print('玩家赢了') else: print('电脑赢了')guess_game()
程序运行结果
循环结构
循环结构概述
每个循环结构都有四个要素
循环变量初始值
循环条件
循环体
循环步进,让循环变量趋近于结束循环
循环的执行过程
①->②->③->④->②->③->④->②->③->④->②->③->④
循环变量初始值只会执行一次
循环条件的运算结果类型是布尔类型
当②不满足条件时,会结束循环
while循环
while循环的语法格式
while 条件:循环体
使用while循环打印1-100的值
'''使用while循环打印1-100的值@author tony 18601767221@163.com@version 2021-02-03 12:03:25@since python3.9.1'''def print_100(): ''' 打印1-100之间的整数 :return: ''' # 定义一个循环变量初始值 number = 1 # 判断条件 while number <= 100: # 循环体 print(number) # 循环步进 number += 1print_100()
break
break只能在循环中使用,不能在循环外使用,其作用是用于结束循环,不管循环还有多少次。
break在循环中的使用
'''break在循环中的使用@author tony 18601767221@163.com@version 2021-02-03 12:12:37@since python3.9.1'''def test_break(): while True: print('Hello') # 当while循环中执行到break会退出循环 break # 循环退出后不会执行打印World print('World')test_break()print('End')
程序运行结果
continue
continue也只能在循环中使用,不能在循环外使用,其中用是忽略本次循环,无论循环体中还有多少未执行的代码。
continue在循环中的使用
'''continue在循环中的使用@author tony 18601767221@163.com@version 2021-02-03 12:15:52@since python3.9.1'''def test_continue(): while True: print('Hello') continue # 当循环遇到continue会忽略循环,不会再执行之后的代码 print('World')test_continue()# 因为test_continue()方法是死循环,因此会一直打印Hello直到程序退出print('End')
程序运行结果
循环嵌套
当一个循环作为另外一个循环的循环体时构成了循环嵌套
嵌套循环的循环结构
while 条件1:while 条件2:循环体
条件1所在的循环称为外层循环,条件2所在的循环称为内层循环。
嵌套循环的执行流程是外层循环执行一次,内层循环执行一圈。例如外层循环执行3次,内层循环执行5次,当外层循环每执行一次时,内层循环都会执行5次
'''循环嵌套的使用@author tony 18601767221@163.com@version 2021-02-03 13:17:54@since python3.9.1'''def test_while_nest(): # 统计嵌套循环的执行次数 count = 0 ''' 外层循环执行3次,内层循环执行5次,总共执行15次 :return: ''' i = 0 while i < 3: print('i = %d' % i) i += 1 j = 0 while (j < 5): print('j = %d' % j) count += 1 j += 1 print('嵌套循环执行的次数是%d' % count)test_while_nest()
程序运行结果
当break在嵌套循环中使用时,退出的是break所在的循环,如果break定义在内层循环,那么break就是退出内层循环,如果break定义在外层循环,那么就是退出外层循环
'''break在嵌套循环的使用@author tony 18601767221@163.com@version 2021-02-03 13:36:48@since python3.9.1'''def test_while_nest_break(): i = 0 while i < 3: print('i = %d' % i) i += 1 j = 0 while j < 5: # break 退出内层while循环 break print('j = %d' % j) j += 1test_while_nest_break()
程序运行结果
当continue在嵌套循环中使用时,结束本次循环。如果continue定义在内层循环,那么continue就是结束本次内层循环,如果continue定义在外层循环,那么就是结束本次外层循环
'''continue在嵌套while循环的使用@author tony 18601767221@163.com@version 2021-02-03 13:42:05@since python3.9.1'''def test_while_nest_continue(): i = 0 while i < 3: print('i = %d' % i) i += 1 if(i==1): # continue结束等于1时的外层循环 continue j=0 while j<5: print('j = %d'%j) j = j+1test_while_nest_continue()
程序运行结果
使用while循环和continue求指定数值范围内的偶数
'''使用while循环和continue求指定数值范围内的偶数@author tony 18601767221@163.com@version 2021-02-03 14:09:18@since python3.9.1'''def get_even_number(value): number = 0 while number < value: number += 1 if (number % 2 == 1): continue print('number = %d' % number)get_even_number(10)
程序运行结果
break和continue在嵌套循环的使用
'''break和continue在嵌套循环的使用@author tony 18601767221@163.com@version 2021-02-03 13:58:54@since python3.9.1'''def while_nest_break_continue(): i = 0 while i < 3: print('i = %d' % i) # 当打印i的之后,continue会结束外层的当前循环,继续进行外层循环的下一次循环 continue j = 0 while j < 5: print('j = %d' % j) j += 1 break i += 1while_nest_break_continue()
程序运行结果
使用嵌套循环打印矩形
print()函数的end参数默认是\n换行,这里通过end=' '改成空格
'''使用嵌套循环打印矩形@author tony 18601767221@163.com@version 2021-02-03 14:19:02@since python3.9.1'''def rectangle(): ''' 使用嵌套循环打印矩形 :return: ''' i = 0 while i < 5: j = 0 while j < 5: # print()函数的end参数默认是\n换行,这里通过end=' '改成空格 print('*', end=' ') j += 1 print() i += 1rectangle()
程序运行结果
使用嵌套循环打印等腰三角形
'''使用嵌套循环打印等腰三角形@author tony 18601767221@163.com@version 2021-02-03 14:34:48@since python3.9.1'''def triangle(): ''' 使用嵌套循环打印等腰三角形 :return: ''' i = 0 while i < 6: j = 0 while j <= i: print('*', end=' ') j += 1 print() i+=1triangle()
程序运行结果
使用嵌套while循环打印九九乘法表
'''使用嵌套while循环打印九九乘法表@author tony 18601767221@163.com@version 2021-02-03 14:42:03@since python3.9.1'''def multiplication_table(): ''' 使用嵌套while循环打印九九乘法表 :return: ''' i = 1 while i <= 9: j = 1 while j <= i: # print()函数默认是\n结尾,这里使用end替换成制表符 print('%d * %d = %-2d' % (j, i, (i * j)), end='\t') j += 1 print() i += 1multiplication_table()
程序运行结果
使用break和嵌套while循环实现九九乘法表
'''使用break结合嵌套循环实现九九乘法表@author tony 18601767221@163.com@version 2021-02-03 15:04:23@since python3.9.1'''def multiplication_table(): i = 1 while i <= 9: j = 1 while j <= 9: if (j > i): # 跳出内层循环 break print('%d * %d = %-2d' % (j, i, (j * i)), end='\t') j += 1 i += 1 print()multiplication_table()
程序运行结果
for-in循环
for-in循环是一种增强型循环,一般配合range()函数使用,
range()函数表示范围,默认是从0开始,例如range(10)表示从0-9,而range(1,10)表示从1-9,包含1,但是不包含10
其语法格式是
for 变量 in range()循环体
for循环会range()函数中得到的数列中依次取出数字放到循环变量中
for-in循环和range()函数的使用
'''for-in循环和range()函数的使用@author tony 18601767221@163.com@version 2021-02-03 15:10:11@since python3.9.1'''def test_func(): # 打印0到9的值 for i in range(10): print(i, end='\t') print() print('*' * 20) # 包含1,不包含10 for i in range(1, 10): print(i, end='\t')test_func()
程序运行结果
for-in循环实现九九乘法表
'''for-in循环实现九九乘法表@author tony 18601767221@163.com@version 2021-02-03 15:14:36@since python3.9.1'''def multiplication_table(): for i in range(1, 10): for j in range(1, i+1): print('%d * %d = %-2d' % (j, i, (i * j)), end='\t') print()multiplication_table()
程序运行结果
使用for-in实现int()函数
'''使用for-in实现int()函数@author tony 18601767221@163.com@version 2021-02-03 15:57:05@since python3.9.1'''def my_int(str): ''' 实现int()函数 将字符串转换为对应的整数 :param str: :return: ''' result = 0 # 遍历字符串 for c in str: # 求字符对应的数值,即字符的ASCII编码值减去48就是字符对应的数值 number = ord(c) - ord('0') # 进行数值的累加 result = result * 10 + number return resultstr = '123'number = my_int(str)print(number)print('将字符串%s转换为整数的结果是%d' % (str, number))
程序运行结果
循环-else
Python中除了if有else之外,循环也有else,例如while-else和for-in-else
无论是while-else或者for-in-else都是在执行循环后,循环正常结束执行else后的代码,如果循环遇到了break或者continue 被中断执行 那么不会执行else后的代码。
'''for-in-else的使用@author tony 18601767221@163.com@version 2021-02-03 15:33:49@since python3.9.1'''def for_in_else_test(): for i in range(6): print(i) if (i == 5): print('找到了5') break else: print('没有找到5') print('End')for_in_else_test()
程序运行结果
while-else的使用
'''while-else的使用@author tony 18601767221@163.com@version 2021-02-03 15:35:30@since python3.9.1'''def while_else_test(): i = 0 while i < 3: print(i) if (i == 5): print('找到了5') break i += 1 else: print('没找到2') print('End')while_else_test()
程序运行结果