while循环
-
while 循环的三个必要元素
- while 关键字
- 循环条件
- 循环体
-
构造循环要想的四件事
- 初始状态
- 循环条件
- 要重复做的事情
- 循环控制
-
循环中的continue和break
-
continue:跳出本次循环,进入下一次循环(不会影响循环次数)
-
break:结束当前循环,后续循环次数不再执行
-
continue和break只能在循环体中使用
-
break 和continue 控制的是当前所在的循环结构
# 吃苹果,第三个吃了半条虫子,不吃了,break i = 1 while i <= 5: print(f"我吃了第{i}个苹果") if i == 3: print('吃了半条虫子,恶心') break i += 1 # 吃苹果,第三有条虫子,扔了,吃第四个,continue i = 1 while i <= 5: if i == 3: print('这个有虫子,不吃') i += 1 continue # 在continue前要添加变量的自增 print(f"我吃了{i}个苹果") i += 1 # 写法二:可以先进行自增,再进行i的调用,这样就不用担心continue的问题了 i = 0 while i < 5: i += 1 if i == 3: print('这个有虫子,不吃') continue print(f"我吃了{i}个苹果")
-
死循环
# 死循环:循环条件永远满足,可以持续循环的代码
# 死循环不是bug,可以利用。循环内部有很多方法可以跳出循环,如break
# 升级版猜拳游戏:一方达到3分就退出游戏。
# 普通循环版本
player_score = 0
computer_score = 0
while player_score < 3 and computer_score < 3:
player = int(input("请输入您要出的拳型:(0石头,1剪刀,2布)"))
import random
computer = random.randint(0, 2)
result = player - computer
if result == -1 or result == 2:
player_score += 1
print('玩家获胜')
elif result == 0:
print('平局')
else:
computer_score += 1
print('电脑获胜')
print(f'玩家和电脑的比分为:{player_score}:{computer_score}')
# 死循环版本
player_score = 0
computer_score = 0
while True:
player = int(input("请输入您要出的拳型:(0石头,1剪刀,2布)"))
import random
computer = random.randint(0, 2)
result = player - computer
if result == -1 or result == 2:
player_score += 1
print('玩家获胜')
elif result == 0:
print('平局')
else:
computer_score += 1
print('电脑获胜')
print(f'玩家和电脑的比分为:{player_score}:{computer_score}')
if player_score >= 3:
print('玩家最终获胜')
break
if computer_score >= 3:
print("电脑最终获胜")
break
循环嵌套
# 在循环嵌套中,外层循环执行一次,内层循环全部执行完成
# 需求:一组训练:跑步四圈,做深蹲10分钟。要做3组。
i = 1 # 做3组的初始状态
while i <= 3: # 做3组训练后退出循环
print(f'第{i}组训练开始')
j = 1 # 跑圈初始状态
while j <= 4: # 跑4圈后退出循环
print(f'跑了{j}圈')
j += 1 # 内层循环自增变量
print('做了10分钟深蹲')
i += 1 # 外层循环自增变量
# 循环嵌套中,外层循环的break和continue会影响内层循环,但内层的不会影响外层
-
练习
# 打印一行* # i = 1 # while i <= 5: # print('*', end=' ') # i += 1 # 打印6行矩形 j = 1 while j <= 6: i = 1 while i <= 5: print('*', end=' ') i += 1 print() #为了换行 j += 1 # 结论:外层循环控制的是行数, 内层循环控制的是列数 # 需求:打印三角形 """ * * * * * * * * * * * * * * * """ # 外层循环5行,i<=5 # 内层循环:第一行1颗*,第二行2颗*,...,第i行i颗*。所以循环的i次,即j<=i. i = 1 while i <= 5: j = 1 while j <= i: print('*', end=' ') j += 1 print() i += 1 # 打印倒立的直角三角 i = 1 while i <= 5: j = 1 while j <= 6-i: print('*', end=' ') j += 1 print() i += 1 # 需求:打印九九乘法表 """ 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 """ # 先打印一个9行9列的三角形,再把*的内容换成算式, # 九九乘法表中,公式规则:列 * 行 = 值 i = 1 while i <= 9: j = 1 while j <= i: print(f'{j}*{i}={j*i}', end='\t') j += 1 print() i += 1 # 打印等腰三角形 i = 1 while i <= 5: # 外层循环控制行数 j = 1 while j <= 5-i: print(' ', end='') # 内层第一个循环控制空格的数量 j += 1 k = 1 while k <= 2*i-1: print('*', end='') #内层第二个循环控制*的数量 k += 1 print() i += 1 # 过7游戏 # 1-100,获取个位数字:i%10==7,十位数字:i//10==7 i = 1 while i <= 100: if i % 7 == 0 or i % 10 == 7 or i // 10 == 7: print('ha') else: print(i) i += 1 # 1-1000,个位:i%10==7,十位:i%100//10==7(如175),百位i//100==7