分支与循环综合应用
较难0分支和循环一起用,做出猜数字小游戏!
你已经学会了用 if 做判断、用 while 或者 for 让代码重复执行。现在把它们组合起来,就能做出真正好玩的小程序——比如一个带次数限制的猜数字游戏。这个游戏很简单:计算机随机想一个 1 到 100 之间的整数,你有 5 次机会去猜它。每次猜完,游戏会告诉你猜大了还是猜小了;如果猜对了就胜利,如果 5 次都没猜对就失败。
这样的程序在生活里很常见,比如手机上的“猜数”游戏、投币抓娃娃机的次数限制、考试选择题的“猜答案”练习……只要把分支和循环结合起来,你就能解决很多实际问题。
下面我们一步步拆解这个游戏,把每个关键概念都讲清楚。
1. 用 while 循环控制猜的次数
循环的核心是“重复做某件事直到条件不成立”。在猜数字游戏里,我们要让玩家最多猜 5 次,所以可以用一个计数器变量来记录已经猜了多少次,当次数小于 5 时一直循环。
生活中的例子: 你每天零花钱 2 元,想攒钱买一个 50 元的玩具。你每天往存钱罐里放 2 元,用 day 记录天数,当 day < 25 时继续存(因为 25 天就可以攒够 50 元)。这里的 day 就是计数器。
max_attempts = 5 # 最大尝试次数
attempts = 0 # 当前已猜次数,初始为0
while attempts < max_attempts: # 只要还没猜满5次,就一直循环
# 每次循环内让玩家输入猜测
guess = int(input("请输入你的猜测:"))
attempts = attempts + 1 # 猜了一次,计数器加1
# ... 其他判断代码 ...
注意: 计数器一定要在循环里增加,否则
attempts永远为 0,循环会变成死循环。
2. 用 if-elif-else 分支判断猜的大小
拿到玩家的猜测 guess 后,需要和秘密数字 secret 比较。有三种情况:猜对了、猜小了、猜大了。用多分支结构来处理:
if guess == secret: # 猜对了
print("恭喜你,猜对了!")
elif guess < secret: # 猜小了
print("猜小了")
else: # 剩下的就是猜大了
print("猜大了")
生活中的例子: 老师心里想了一个 1-100 的数字,你每次报数,老师会提示“太大了”“太小了”或者“正确”。这里 == 就是比对是否相等,< 和 > 比较大小。
3. 用 break 提前结束循环
如果玩家猜对了,游戏应该立刻结束,不需要继续猜剩下的次数。这时候用 break 语句——它会让程序跳出当前整个循环,不再执行后面的循环次数。
if guess == secret:
print(f"恭喜你,猜对了!用了{attempts}次。")
break # 跳出 while 循环,游戏结束
如果没有 break,就算猜对了也会继续让用户输入(除非用其他方式控制)。break 就像你打游戏通关了,立刻退出关卡,不用再打后面几关。
4. while-else 的特殊用法:循环正常结束时执行
Python 里的 while 循环可以带一个 else 子句,它的意思是:如果循环不是因为 break 而结束(即条件因不满足而退出),就执行 else 里的代码。猜数字游戏正好用这个特性:如果玩家用完 5 次机会都没有猜对(循环正常结束),就提示失败。
while attempts < max_attempts:
# ... 猜数字代码 ...
if guess == secret:
break
else:
# 这个 else 只有在循环自然结束(没遇到 break)时才执行
print(f"很遗憾,5次机会用完了。秘密数字是{secret}。")
这里 else 和 while 是在同一缩进级别,别和 if 的 else 搞混了。简单记:while-else 里的 else 是“没被 break 打断时做的收尾工作”。
生活中的例子: 你每天早上定 3 个闹钟,如果其中一个闹钟响了你就起床(break),否则 3 个闹钟都响完你还在睡(else),然后自动播放“起床失败”的语音。
5. 完整可运行的猜数字游戏代码
把上面的所有知识点拼起来,就是下面这个完整程序。每行变量都加了中文注释,方便理解。
import random # 导入随机模块,用来生成随机数
# 让计算机从1到100之间随机选一个整数
secret = random.randint(1, 100) # secret是秘密数字
max_attempts = 5 # 最大允许猜的次数
attempts = 0 # 当前已猜次数,初始为0
print("猜数字游戏,你有5次机会,数字在1-100之间。")
while attempts < max_attempts: # 循环条件:还没猜到第5次
guess = int(input("请输入你的猜测:")) # 玩家输入,变成整数
attempts = attempts + 1 # 每猜一次,次数加1
if guess == secret: # 猜对了
print(f"恭喜你,猜对了!用了{attempts}次。")
break # 立刻跳出循环
elif guess < secret: # 猜小了
print("猜小了")
else: # 猜大了
print("猜大了")
else: # 这个else和while配对,只有循环正常结束(没break)才会执行
print(f"很遗憾,5次机会用完了。秘密数字是{secret}。")
试试运行:当你猜对时,程序会打印祝贺并结束;如果 5 次都没猜对,会显示秘密数字。
6. 新手最容易犯的 3 个错误
❌ 错误一:忘记把输入转成整数
input() 返回的是字符串,不能直接和数字比较。必须用 int() 转换。
# 错误写法
guess = input("请输入:") # guess 是字符串
if guess == secret: # 字符串和整数永远不相等
# 正确写法
guess = int(input("请输入:")) # 先转成整数
❌ 错误二:忘记更新计数器,导致死循环
如果漏写 attempts = attempts + 1,attempts 永远为 0,循环永远不会结束。程序会一直让你输入,关都关不掉!这时可以按 Ctrl+C 强制停止。
❌ 错误三:搞混 while-else 和 if-else 的缩进
while-else 里的 else 要跟 while 对齐,而不是跟 if 对齐。写错了会导致条件判断错误。
# 错误示例:else 跟了 if,而不是 while
while attempts < max_attempts:
if guess == secret:
print("对了")
else: # 这个else实际上属于if,不是while
print("猜错了")
# 正确写法:else 和 while 对齐
while attempts < max_attempts:
if guess == secret:
print("对了")
break
else: # 这个else属于while
print("机会用尽")
7. 拓展一下:还能怎么玩?
学会了分支和循环组合,你可以做出很多有趣的小程序:
- 猜拳游戏:电脑随机出石头、剪刀、布,你输入选择,循环玩 5 局,最后统计胜负。
- 密码锁:让你输入密码,最多试 3 次,对了才能解锁。
- 计算器:不断让用户输入两个数和运算符,输出结果,直到用户输入“退出”。
想继续学习?可以看看这些知识点:
动手试试修改上面的代码,比如把最大次数改成 10 次,或者让程序显示剩余次数(用 max_attempts - attempts 计算)。多练习,你就能越来越熟练地组合分支和循环,写出属于自己的小程序!
例题精讲
执行以下代码后,输出结果是什么? count=0 for i in range(10): if i%2==0: count+=1 else: break print(count)
在Python中,for循环和while循环都可以搭配else子句,只有当循环正常结束(没有被break中断)时才会执行else块。
以下代码求斐波那契数列的第n项,请填空。
n=int(input())
a,b=0,1
for i in range(n):
___
print(a)执行以下代码后,输出结果是什么? x=10 while x>0: x-=1 if x==5: continue print(x,end='')
以下代码判断从键盘输入的整数n是否为质数(素数),请填空。
n=int(input())
flag=True
for i in range(2,n):
if ___:
flag=False
break
if flag:
print('是质数')
else:
print('不是质数')