判断语句与循环控制
导入
- 段子:程序员小王的老婆跟小王说,去买四个包子,如果看见卖西瓜的,就买两个。请问小王最后会买什么?
- Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。
1、if-else语句
典型双分支语句(注意冒号的使用)
多分支语句
特征:
- 只要满足其中一个分支,就会自动退出本层的if语句结构(言外之意:必须执行其中一个分支)
- 至少有两个情况可以选择;
- elif后面必须写上条件和语句(冒号)
- else是选配,根据实际情况来填写(冒号)
多分支练习:猜拳游戏
if-else嵌套使用(多条件限制)
- 外层的if判断,也可以是if-else
- 内层的if判断,也可以是if-else
- 根据实际开发的情况进行选择
2、while循环:适用于未知的循环次数(用于判断)
循环结构
语法特点
- 有初始值
- 条件表达式
- 变量【循环体内计数变量】的自增或自减,否则会造成死循环
- 使用条件:循环的次数不确定,依靠循环条件来结束
- 目的:为了将相似或相同的代码变得更加简洁,重复使用
案例1:输出1-100之间的数据
i=1
while i<=100:
print(i)
i+=1
pass
案例2:改进猜拳代码,让多次(10次)输入,不用每次都得运行
缩进(右移)快捷键Tap
;左移shift+Tab
键;
# 案例2
# 猜拳游戏
'''
0:石头;1:剪刀;2:布
随机数数模块 random
对象:人和计算机
'''
import random
count=1
while count<=10:
person=int(input('请出拳【0:石头;1:剪刀;2:布】:'))
computer=random.randint(0,2) #计算机随机出0-2
# 只设置人赢的情况
if person==0 and computer==1:
print('恭喜你赢了!')
pass
elif person==1 and computer==2:
print('恭喜你赢了!')
pass
elif person==2 and computer==0:
print('恭喜你赢了!')
pass
elif person==computer:
print('平局!')
pass
else:
print('很遗憾,你输了!')
pass
count+=1
while嵌套使用
案例3 九九乘法表
# 九九乘法表
row=9
while row>=1:
col=1
while col<=row:
# print('%d*%d=%d'%(row,col,row*col))
print('{}*{}={}'.format(row, col, row * col),end=" ") # 空格来分割
col+=1
pass
print() #print自带换行的效果
row-=1
pass
案例4 直角三角形
# 直角三角形
row=1
while row<=7:
j=1
while j<=row:
print('*',end=' ')
j+=1
pass
print()
row+=1
pass
扩展:等腰三角形
# 等腰三角形
row=1
while row<=7:
j=1
while j<=7-row: #控制打印空格
print(' ',end=' ')
j+=1
pass
k=1
while k<=2*row-1: # 控制打印星号,行数的2倍-1
print('*', end=' ')
k+=1
pass
print()
row+=1
pass
3、for循环:适用于已知的循环次数(可迭代对象的遍历)
- 在Python中for循环可以遍历任何序列的项目,如一个列表或者一个字符串等。
- 语法特点:遍历操作,一次的取容器中的每个值
for循环格式
示例
range函数
- 此函数可以生成一个数据及和列表
- 格式:
range(起始,结束,步长)
默认步长为1,不能为0 - 是一个对象,
range(1,100)
,从1-99不包含100,左包含右不包含
示例:求1-100累加和
sum=0
for data in range(1,101):
sum+=data
pass
print('sum={}'.format(sum))
print('sum=%d'%sum)
九九乘法表
4、break和continue
- break 代表中断结束,只要满足条件,直接结束本层循环
- continue 结束本次循环,继续进行下次循环(当continue满足条件的饿时候,本次循环剩下的语句将不在执行,后面的循环还继续。)、
- 这两个关键字,只能用在循环中
break
退出循环
示例1
示例2
continue
结束本次循环,继续下次循环
示例1
示例2
for-else
的使用(while-else同理)
示例1:
示例2: 循环中出现break就不输出
示例3: break不出现在循环中就输出
account='wyw'
psw='123'
for i in range(1,4):
print(i,end=' ')
zh=input('请输入账号:')
pd=input('请输入密码:')
if account==zh and psw==pd:
print('恭喜登陆成功!')
break
pass
pass
else:
print('超过登录次数{},3分钟后重试!'.format(i))
改进猜拳,使得赢三场就退出
import random
win=0
while True:
if win>=3:
print('你太厉害了,赢我3次啦!')
break
pass
else:#继续玩
person=int(input('请出拳【0:石头;1:剪刀;2:布】:'))
computer=random.randint(0,2) #计算机随机出0-2
# 只设置人赢的情况
if person==0 and computer==1:
print('恭喜你赢了!')
win+=1
pass
elif person==1 and computer==2:
print('恭喜你赢了!')
win += 1
pass
elif person==2 and computer==0:
print('恭喜你赢了!')
win += 1
pass
elif person==computer:
print('平局!')
pass
else:
print('很遗憾,你输了!')
pass
练习1
猜年龄小游戏,有三点需求
1.允许用户最多尝试3次
2.每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序
3.如何猜对了,就直接退出
import random
times=1
print("--------- 猜年龄游戏开始 ---------")
print(" 游戏开始:")
while True:
_age = random.randint(0, 100)
while times<=3:
age = input("猜出你的答案:")
if age.isdigit() == False:
print("请输入数字")
else:
age = int(age)
if age == _age:
print("恭喜你!你猜对了!")
break
elif age < _age:
print("猜小了")
else:
print("猜大了")
times += 1
print("是否继续游戏(输入'1'继续游戏,否则退出游戏)")
isCom = input(":")
if isCom == '1':
times=1
else:
break
练习2
小王身高1.75,体重80.5kg。请根据BMI公式(体重除以身高的平方)帮小王计算他的BMI指数,并根据BMI指数:
低于18.5 过轻
18.5-25: 正常
25-28: 过重
28-32: 肥胖
高于32: 严重肥胖
用if-elif判断并打印结果
height=float(input('请输入你的身高m:'))
weight=float(input('请输入你的体重kg:'))
BMI=height/(weight**2)
if BMI<18.5:
print('太轻了,要多吃点!')
pass
elif 18.5<=BMI<25:
print('身材很标准!')
pass
elif 25<=BMI<28:
print('微胖身材!')
pass
elif 28<=BMI<32:
print('肥胖了,多锻炼!')
pass
else:
print('严重过胖,会生病的!')
pass