基于while循环实现3次猜测计数器,为何计数停留在2?
计数停留在2的原因及修复
核心问题分析
- 递归调用重置计数器:每次调用
random_func()时,都会重新初始化count = 3。当猜错后递归调用random_func(),会进入新的函数栈,之前的count变量被新的函数实例覆盖。你看到的count=2只是第一次函数调用里减1后的结果,后续新调用又把count重置为3,但每次都只执行一次count -=1就进入新递归,所以看起来计数一直卡在2。 - while循环完全失效:while循环内执行
count -=1后,立刻递归调用random_func()并break,循环只执行一次就终止,完全没起到循环计数的作用,变成用递归代替循环。 - 逻辑冗余导致混乱:循环结束后无条件调用
random_func(),不管用户是否猜对都会进入新的一轮猜测;同时print("won")的位置错误,不管对错都会触发。
修复后的代码示例
import random def guessthenumber(): while True: play = input("do you want to play ?\nanswer yes or no :") if play == "yes": break elif play == "no": quit() else: print("请输入yes或no") guessthenumber() answer = random.randint(1, 5) def guess_game(): count = 3 while count > 0: guess = int(input("choose a number between 0 and 10: ")) if guess == answer: print("won") return count -= 1 print(f"wrong,还有{count}次机会") print("次数用完,游戏结束") guess_game()
修复说明
- 去掉不必要的递归,用while循环实现次数控制,计数器
count在函数内只初始化一次,每次猜错后递减,不会被重置。 - 调整游戏开始的循环逻辑,用
while True循环直到用户输入正确指令,避免递归调用guessthenumber()。 - 修正胜利和失败的判断逻辑,猜对直接返回并提示胜利,次数用完提示游戏结束。
内容的提问来源于stack exchange,提问作者TUSK ACT 4
相关产品推荐
相关产品推荐

