猜数字游戏代码Bug排查:选择不重玩时陷入无限循环
Python猜数字游戏退出异常修复
你的代码在猜对数字后选择不重玩(输入N/No)时陷入无限循环,原因是quit()函数会抛出SystemExit异常,而代码里的except:捕获了所有异常(包括这个异常),导致程序无法正常退出,反而回到循环开头重复执行,持续输出错误提示。
两种解决方法:
方法1:用break替换quit()(推荐)
直接用break跳出最外层的while True循环,不会触发异常,程序可正常终止:
import random random_num = random.randint(1, 100) count = 1 while True: try: num = int(input("Guess the number? ")) if num == random_num: print("Congrates! you guessed it.") print("Tried:", count, "times") play = input("Do you want to play again Y/N? ") if play.lower() in ['n', 'no']: break # 跳出循环终止程序 elif play.lower() in ['y', 'yes']: random_num = random.randint(1, 100) count = 1 else: break # 输入无效时直接退出 elif num > random_num: print("Not yet, smaller.") elif num < random_num: print("Not yet, Greater.") count += 1 except ValueError: # 仅捕获输入非数字的异常 print("Oops! please enter a valid number.")
方法2:限制except捕获的异常类型
将except:改为只捕获ValueError(即输入无法转为整数的情况),这样quit()抛出的SystemExit异常不会被拦截,程序能正常退出:
import random random_num = random.randint(1, 100) count = 1 while True: try: num = int(input("Guess the number? ")) if num == random_num: print("Congrates! you guessed it.") print("Tried:", count, "times") play = input("Do you want to play again Y/N? ") if play.lower() in ['n', 'no']: quit() elif play.lower() in ['y', 'yes']: random_num = random.randint(1, 100) count = 1 else: quit() elif num > random_num: print("Not yet, smaller.") elif num < random_num: print("Not yet, Greater.") count += 1 except ValueError: # 仅捕获int转换失败的异常 print("Oops! please enter a valid number.")
另外,原代码中num == random_num分支外的else: quit()属于冗余代码,前面的条件已覆盖所有数字对比情况,可直接删除。
内容的提问来源于stack exchange,提问作者abdulshafi99
相关产品推荐
相关产品推荐

