Python猜数字游戏try except不生效、获胜后循环无法跳出问题
问题原因定位
- 异常捕获不生效的原因:
int(input("Guess: "))这行代码写在了try代码块之外,输入非数字时触发的ValueError不在捕获范围内,所以直接抛出异常终止程序。同时原异常分支只对异常变量e赋值,没有打印提示信息,用户无法看到报错提示。 - 猜对后无法结束游戏的原因:内层循环的
break仅能跳出当前所在的内层while循环,外层while True属于死循环,没有退出逻辑,所以会重新初始化猜数次数、隐藏数字,开启新一轮游戏。同时原代码中else: print("You lose!")的分支逻辑永远无法触发,因为guess和hidden_num的关系只有小于、大于、等于三种,不存在其他情况,达到最大猜数次数的提示逻辑缺失。
修复方案
- 将输入和
int转换逻辑移入try代码块内,确保非数字输入的异常可以被捕获,异常分支添加提示打印逻辑 - 新增全局标记变量控制外层循环,猜对后修改标记变量同时跳出内层循环,即可终止整个程序
- 补充达到最大猜数次数后的失败提示逻辑,放在内层循环之外
修复后完整代码
# 新增外层循环控制标记 game_over = False while not game_over: num_of_guess = 0 max_guess = 9 hidden_num = 13 while num_of_guess < max_guess: try: # 输入和类型转换移入try块内 guess = int(input("Guess: ")) num_of_guess += 1 if guess < hidden_num: print("Too low!") elif guess > hidden_num: print("Too high!") elif guess == hidden_num: print("You win!") # 修改标记变量,触发外层循环退出 game_over = True break except ValueError: # 精准捕获类型转换异常,打印提示,不消耗猜数次数 print("Please enter a number!") continue # 内层循环结束后判断是否用完次数还没猜对 if not game_over and num_of_guess >= max_guess: print(f"You lose! The hidden number is {hidden_num}") game_over = True
内容的提问来源于stack exchange,提问作者Pratham S. Gorawala
相关产品推荐
相关产品推荐

