今天我们详细的讲讲Python流程控制语句。包括if条件判断,while循环以及break和continue等。下一篇我们主讲Python中的序列,包括列表、元组、字典、集合等。
如果喜欢这篇文章,就点下文末的"在看"吧!
1. 条件判断语句
1). if 语句语法:if 条件表达式 :
代码块执行的流程:if语句在执行时,会先对条件表达式进行求值判断,
如果为True,则执行if后的语句
如果为False,则不执行
默认情况下,if语句只会控制紧随其后的那条语句,如果希望if可以控制多条语句,
则可以在if后跟着一个代码块代码块
代码块中保存着一组代码,同一个代码块中的代码,要么都执行要么都不执行
代码块就是一种为代码分组的机制
如果要编写代码块,语句就不能紧随在:后边,而是要写在下一行
代码块以缩进开始,直到代码恢复到之前的缩进级别时结束
缩进有两种方式,一种是使用tab键,一种是使用空格
Python的官方文档中推荐我们使用空格来缩进Python代码中使用的缩进方式必须统一
可以使用逻辑运算符来连接多个条件
如果希望所有条件同时满足,则需要使用and
如果希望只要有一个条件满足即可,则需要使用ornum =
if num > and num < :
print('num比10大, num比20小!')
#或是
if < num < :
print('num比10大, num比20小!'运行结果:
简单应用举例:
在命令行让用户输入一个用户名,获取用户输入,并进行判断
如果用户输入的用户名是admin,则显示欢迎管理员光临
如果用户输入的是其他的用户名,则什么也不做#获取用户输入的用户名
username = input('Please input your name:')
#判断用户是否是admin
if username == 'admin' :
print('Welcome admin user!')
运行结果:
正好上述代码用到了input函数,那么我们就说说input函数。input()函数
该函数用来获取用户的输入
input()调用后,程序会立即暂停,等待用户输入
用户输入完内容以后,点击回车程序才会继续向下执行
用户输入完成以后,其所输入的的内容会以返回值的形式返回
注意:input()的返回值是一个字符串
input()函数中可以设置一个字符串作为参数,这个字符串将会作为提示文字显示a = input('请输入任意内容:')
print('用户输入的内容是:',a)运行结果:
input()也可以用于暂时阻止程序结束
2). if-else语句语法:
if 条件表达式 :
代码块
else :
代码块执行流程:
if-else语句在执行时,先对if后的条件表达式进行求值判断
如果为True,则执行if后的代码块
如果为False,则执行else后的代码块age = int(input('请输入你的年龄:'))
if age > :
print('你已经成年了~~')
else :
print('你还未成年~~')
运行结果:
3). if-elif-else语句语法:
if 条件表达式 :
代码块
elif 条件表达式 :
代码块
elif 条件表达式 :
代码块
else :
代码块执行流程:
if-elif-else语句在执行时,会自上向下依次对条件表达式进行求值判断,
如果表达式的结果为True,则执行当前代码块,然后语句结束
如果表达式的结果为False,则继续向下判断,直到找到True为止
如果所有的表达式都是False,则执行else后的代码块
注意:if-elif-else中只会有一个代码块会执行age = int(input('请输入你的年龄:'))
if age > and age < :
print("你还未成年!")
elif age >= and age < :
print('你已经成年了!')
elif age >= and age < :
print('你已经中年了!')
elif age >= :
print('你已经退休了!')
else :
print('你的输入有误,请重新输入!')
运行结果:
If 语句练习:
练习1:编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。#获取用户输入的整数
num = int(input('请输入一个任意的整数:'))
#判断并显示num是奇数还是偶数
if num % == :
print(num , "是偶数") #判断是否可以被整除,如果可以整除,那么这个数就是偶数
else :
print(num , '是奇数')运行结果:
练习2:编写一个程序,检查任意一个年份是否是闰年。#如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年
year = int(input('请输入一个任意的年份:'))
#检查这个年份是否是闰年
if year % == and year % != or year % == :
print(year,'是闰年')
else :
print(year,'是平年')
运行结果:
练习3:
我家的狗5岁了,5岁的狗相当于多大年龄的人呢?
其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。
那么5岁的狗相等于人类的年龄就应该是10.5+10.5+4+4+4 = 33岁
编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。
如果用户输入负数,请显示一个提示信息dog_age = float(input('请输入狗的年龄:'))
if dog_age < 0 :
print('你的输入不合法!')
#如果狗的年龄在两岁以下(包含两岁)
#直接将当前的年龄乘以10.5
elif dog_age <= 2 :
like_person_age = dog_age * 10.5
#如果狗的年龄在两岁以上
else :
#计算前两岁相当于人类的年纪
like_person_age = 2 * 10.5
#计算超过两岁的部分相对于人类的年纪,并进行相加
like_person_age += ( dog_age - 2 ) * 4
if dog_age > 0 :
print(dog_age,'岁的狗,年纪相当于',like_person_age,'岁的人')
运行结果:
在if也可以去嵌套if,代码块是可以嵌套的,每增加一个缩进的级别,代码块就低一级
所以上面代码让我们嵌套if 看看怎么写:(可实现和上一个代码一样的功能)dog_age = float(input('请输入狗的年龄:'))
#外层if嵌套检查用户的输入是否合法
if dog_age > 0 :
#如果狗的年龄在两岁以下(包含两岁)
if dog_age <= 2:
#直接将当前的年龄乘以10.5
like_person_age= dog_age * 10.5
#如果狗的年龄在两岁以上
else :
#计算前两岁相当于人类的年纪
like_person_age = 2 * 10.5
#计算超过两岁的部分相对于人类的年纪,并进行相加
like_person_age += ( dog_age - 2 ) * 4
print(dog_age,'岁的狗,年纪相当于',like_person_age,'岁的人')
else :
print('请输入一个合法的年龄!')
练习4:
从键盘输入小明的期末成绩:
当成绩为100时,'奖励一辆BMW'
当成绩为[80-99]时,'奖励一台iphone'
当成绩为[60-79]时,'奖励一本参考书'
其他时,什么奖励也没有#获取小明的成绩
score = float(input('请输入你的期末成绩(0-100):'))
#打印分割线
print("="*40)
#检查用户的输入是否合法
if 0 <= score <= 100 :
#判断发给的奖励是什么
if score == 100 :
print('宝马,拿去玩!')
elif score >=80 :
print('苹果手机,拿去玩!')
elif score >=60 :
print('参考书,拿去玩!')
else :
print('棍子一根!')
else :
#用户输入的不合法,弹出一个友好提示
print('你输入的内容不合法,请重新输入!')
运行结果:
2. 循环语句
1).while 循环
循环语句可以使指定的代码块重复指定的次数
循环语句分成两种,while循环和 for循环
今天我们来讲讲while循环
while循环语法:
while 条件表达式 :
代码块
else :
代码块执行流程:
while语句在执行时,会先对while后的条件表达式进行求值判断,
如果判断结果为True,则执行循环体(代码块),
循环体执行完毕,继续对条件表达式进行求值判断,以此类推,
直到判断结果为False,则循环终止,如果循环有对应的else,则执行else后的代码块
条件表达式恒为True的循环语句,称为死循环,它会一直运行,慎用!####死循环, 慎用!!!
while True :
print('hello')循环的三个要件(表达式):
1). 初始化表达式,通过初始化表达式初始化一个变量
i = 0
2). 条件表达式,条件表达式用来设置循环执行的条件
while i < 10 :
print(i)
3). 更新表达式,修改初始化变量的值
i += 1#创建一个执行十次的循环
i = 0
while i < 10 :
i += 1
print(i,'hello')
else :
print('else中的代码块')运行结果:
while循环练习
练习1. 求100以内的所有的奇数之和i = 0
sum = 0
while i < 100 :
i += 1
if i % 2 == 1 :
sum += i
print('100以内的所有奇数之和为',sum)
运行结果:
练习2.水仙花数是指一个n位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)。
求1000以内所有的水仙花数# 获取1000以内的三位数
i =
while i < :
# 假设,i的百位数是a,十位数b,个位数c
# 求i的百位数
a = i // 100
# 求i的十位数
b = (i - a * ) // 10
# 求i的个位数字
c = i %
# 判断i是否是水仙花数
if a** + b** + c** == i :
print(i)
i +=
运行结果:
练习3. 获取用户输入的任意数,判断其是否是质数。# 判断number是否是质数,只能被1和它自身整除的数就是质数
number = int(input('输入一个任意的大于1的整数:'))
# 判断number是否是质数,只能被1和它自身整除的数就是质数
# 获取到所有的可能整除number的整数
i =
# 创建一个变量,用来记录num是否是质数,默认认为num是质数
flag = True
while i < number:
# 判断number能否被i整除
# 如果number能被i整除,则说明number一定不是质数
if number % i == :
# 一旦进入判断,则证明number不是质数,则需要将flag修改为false
flag = False
i +=
if flag :
print(number,'是质数')
else :
print(number,'不是质数')运行结果:
2). while循环嵌套
循环嵌套时,外层循环每执行一次,内存循环就要执行一圈
while 嵌套练习
练习1.在控制台中打印如下图形
**********
**********
**********
**********
**********
创建一个循环来控制图形的高度i = 0
while i < 5:
#创建一个内层循环来控制图形的宽度
j = 0
while j < 10:
print("*",end='')
j += 1
print()
i += 1
运行结果:
练习2.打印99乘法表# 打印99乘法表
# 1*1=1
# 1*2=2 2*2=4
# 1*3=3 2*3=6 3*3=9
# ... 9*9=81
# 创建一个外层循环来控制图形的高度
i =
while i < :
i +=
# 创建一个内层循环来控制图形的宽度
j =
while j < i:
j +=
print(f"{j}*{i}={i*j} ",end="")
print()
运行结果:
3. break 和 continuebreak可以用来立即退出整个循环语句(包括else)
continue可以用来跳过当次循环
break和continue都是只对离他最近的循环起作用
补充:pass是用来在判断或循环语句中占位的
break举例:(当变量为4时 终止整个循环,所以只打印出了1 2 3)# 创建一个5次的循环
i = 0
while i < 5 :
i += 1
if i == 4 :
break
print(i)
else :
print('循环结束')
运行结果:
continue 举例:(当变量为4时跳过当次循环,所以只打印出了1 2 3 5)# 创建一个5次的循环
i = 0
while i < 5 :
i += 1
if i == 4 :
continue
print(i)
else :
print('循环结束')
运行结果:
讲了这么多,相信你已经对python的控制流语句有了大致的了解,让我们用之前所学到的知识试着写一个稍微复杂点的程序吧。
程序内容:唐僧大战白骨精
你将以唐僧的身份进行游戏,唐僧的初始生命值是2,攻击力是2。
然后请你选择如下操作:
1. 练级 ,每练级1次,生命值增加2,攻击力增加2
2. 打Boss 也就是打白骨精 白骨精的初始生命值是10,攻击力是10
3. 逃跑 若选择逃跑,游戏直接结束
如果选择2,也就是打白骨精,若一次没有打死,则白骨精会反击唐僧!
代码:##唐僧大战白骨精
#1 身份选择
#2. 游戏进行
print('='*+'欢迎来到游戏<<唐僧大战白骨精>>'+'清选择你的身份:'+'='*,end='')
print('''
请选择你的身份:
1. 唐僧
2. 白骨精
''')
person = input('请选择(1-2):')
print('-'*)
player_life = #player生命值
player_attack = #player攻击力
boss_life = #boss生命值
boss_attack = #boss攻击力
if person == '1' :
print('你已经选择了1,你将以->唐僧<-的身份进行游戏!')
print('-'*)
print(f'唐僧,你的生命值是{player_life},你的攻击力是{player_attack}')
print('-'*)
while True :
print('''请选择你要的操作(1-3):
1. 练级
2. 打BOSS
3. 逃跑
''')
operation = input('请选择你要进行的操作:')
if operation == '1' :
player_life +=
player_attack +=
print(f'恭喜你!->唐僧<-你升级了。 你现在生命值是:{player_life} 攻击力是:{player_attack}')
elif operation == '2' :
##玩家要攻击boss,减去boss生命值,减去的是玩家的生命值
boss_life -= player_attack
print('->唐僧<-攻击->白骨精<-')
##检查boss是否死亡
if boss_life <= :
print(f'白白骨精受到了{player_attack}点伤害,重伤不治死了,->唐僧<-胜利')
#游戏结束
break
##boss反击玩家
player_life -= boss_attack
print('->白骨精<-反击->唐僧<-')
if player_life <= :
print(f'->唐僧<-受到{boss_attack}点伤害,游戏结束!')
break
elif operation == '3' :
print('->唐僧一扭头<-,撒腿就跑,Game Over')
break
else :
print('你的输入有误,请重新输入!')
elif person == '2' :
print('你竟然选择了白骨精,太不要脸了,系统将自动分配身份')
else :
print('你的输入有误,系统将自动分配身份,你将以->唐僧<-的身份来进行游戏!')
试试执行上面的代码会出出现什么结果吧!
练级:
打Boss:
结果1 :唐僧胜利,游戏结束!
结果2 :唐僧打白骨精一次没有打死,白骨精反击唐僧,唐僧受到伤害,游戏结束!