Python猜数字项目BUG排查:5次猜错未触发Game Over仍停留在当前关卡
问题根源
- 核心错误是
for循环的else块缩进错误:你当前把else和判断猜测结果的elif同级对齐,Python会认为这个else是if...elif...else分支的一部分,只有当猜测值既不等于、也不小于、也不大于秘密数字时才会触发,这个逻辑永远不可能成立,所以5次猜错后永远走不到游戏结束的分支。 - Python中
for循环的else块必须和for关键字同级对齐,只有当for循环完整执行完所有迭代(没有被break打断)时才会触发,刚好对应5次全部猜错的场景。 - 额外的小问题:
- 游戏结束提示的格式化字符串参数错误,总得分应该取
points_scored不是points[counter] - 游戏结束后需要把
level置为0,才能跳出外层的while level !=0循环 quit()语句缩进错误,比上一行代码少1个缩进位
- 游戏结束提示的格式化字符串参数错误,总得分应该取
修复后的完整代码
from random import randint level = 1 points = [100,75,50,25,10] points_scored = 0 play = True while play: while level != 0: end_value = level * 10 secret_number = randint(1, end_value) for counter in range(0, 5): # 获取用户输入的猜测数字 guess_number = int(input(f"请输入1到{end_value}之间的数字,你还有{5-counter}次机会:")) # 判断猜测结果 if secret_number == guess_number: print(f"恭喜你猜对了!你通过了第{level}关,获得{points[counter]}积分") points_scored += points[counter] level += 1 break elif guess_number < secret_number: print("你猜的数字比秘密数字小") elif guess_number > secret_number: print("你猜的数字比秘密数字大") # 此处else和for同级,5次全部猜错才会触发 else: print(f"游戏结束!秘密数字是{secret_number},你的总积分为{points_scored}") # 把level置为0,跳出外层关卡循环 level = 0 break else: print(f"恭喜你通关了!总积分为{points_scored}!!!") again = input("你想再玩一次吗?请输入yes或no:") if again == "no": play = False quit()
内容的提问来源于stack exchange,提问作者Laiba Ijaz Khan
相关产品推荐
相关产品推荐

