CS50P猜数字游戏check50报错:timed out while waiting for program to exit
问题分析与解决方案
你的代码在本地运行正常,但check50检测时出现超时,核心问题出在两个地方:
- 未正确处理超出范围的猜测值(大于设定的level),导致不符合题目的输入校验要求;
- 猜对数字后仅用
break跳出循环,在check50的自动化测试环境中可能存在退出不及时的情况。
具体修改点
- 用
random.randint()替代random.choice(list(range(...))):无需生成完整列表,更高效且逻辑更直观; - 先获取并保存
level变量,避免重复调用函数; - 增加对猜测值范围的校验:若猜测值小于1或大于
level,直接跳过后续判断,重新提示输入; - 猜对数字时用
return直接结束main()函数,确保程序立即退出,避免测试环境超时。
修改后的完整代码
from random import randint def main(): level = get_level() number = randint(1, level) while True: try: guess = int(input("Guess: ")) # 校验猜测值是否在有效范围内 if guess < 1 or guess > level: continue if guess < number: print("Too small!") elif guess > number: print("Too large!") else: print("Just right!") return # 直接结束main函数,确保程序退出 except ValueError: pass def get_level(): while True: try: level = int(input("Level: ")) if level > 0: return level except ValueError: pass main()
修改说明
- 范围校验:题目要求仅接受1到
level之间的猜测值,超出该范围的输入(包括小于1或大于level)应重新提示,而非直接判断大小; - 退出逻辑:
return比break更直接,能确保main()函数立即结束,程序快速退出,避免自动化测试环境的超时判定; - 随机数生成:
randint(1, level)直接生成1到level的整数,无需转换为列表,性能更优。
内容的提问来源于stack exchange,提问作者bluemary
相关产品推荐
相关产品推荐

