CS50 Little Professor程序超时退出问题求助
CS50 Little Professor check50超时问题解决
本地运行程序可正常生成10道题目后退出,但通过check50检测时出现超时错误:
:( Little Professor generates 10 problems before exiting - timed out while waiting for program to exit
你的代码核心问题是每道题循环都会调用get_level()要求输入难度,但题目要求是用户仅输入一次难度,后续连续生成10道对应难度的算术题。check50测试用例只会输入一次Level,之后程序因持续等待下一次Level输入陷入阻塞,最终导致超时。
错误核心片段
for _ in range(10): level = get_level() # 每道题都要求输入Level,违反题目逻辑 x = generate_integer(level) y = generate_integer(level) # ... 后续逻辑
修正方案
将get_level()移至循环外部,仅获取一次难度,后续10道题均使用该难度生成数字;同时补充输入非数字时的错误次数递增(原代码漏写,会导致无限循环)。
修正后完整代码
import random import sys def main(): score = 0 level = get_level() # 仅获取一次难度 for _ in range(10): x = generate_integer(level) y = generate_integer(level) total = x + y errors = 0 while errors < 3: try: guess = int(input(f"{x} + {y} = ")) if total == guess: score += 1 break else: print("EEE") errors += 1 except ValueError: print("EEE") errors += 1 # 输入非数字时递增错误次数 if errors == 3: print(f"{x} + {y} = {total}") print(f"Score: {score}") sys.exit(0) def get_level(): while True: try: level = int(input("Level: ")) if level < 1 or level > 3: raise ValueError return level except ValueError: pass def generate_integer(level): if level == 1: return random.randint(0,9) elif level == 2: return random.randint(10,99) elif level == 3: return random.randint(100,999) if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者alaska22
相关产品推荐
相关产品推荐

