CS50 Little Professor遇'timed out while waiting for program to exit'问题求助
解决CS50 Little Professor check50超时问题
问题根源:你的代码在生成每一道题目时都会调用get_level(),要求用户输入难度。但根据题目要求,用户只需要输入一次难度,之后程序要生成10道该难度的算术题。check50的测试用例只会提供一次难度输入,你的程序却会反复等待输入,最终导致超时。
修改步骤:
- 将
get_level()的调用移到10次题目的循环外部,只获取一次难度值 - 用这个统一的难度值生成所有10道题的数字
修改后的代码:
import random def main(): score = 0 level = get_level() # 移到循环外,只获取一次难度 for _ in range(10): X = generate_integer(level) Y = generate_integer(level) for i in range(3): try: ans = int(input(f'{X} + {Y} = ')) if ans == X + Y: score += 1 break else: raise ValueError except ValueError: print('EEE') if i == 2: print(f'{X} + {Y} = {X+Y}') print(f'Score: {score}') def get_level(): while True: try: level = int(input('Level: ')) if level in [1,2,3]: return level except ValueError: pass def generate_integer(level): match level: case 1: return random.randint(0,9) case 2: return random.randint(10,99) case _: return random.randint(100,999) if __name__ == "__main__": main()
额外说明:
- 原代码逻辑不符合题目“一次选难度,做10道同难度题目”的规则,手动测试时你可能每次都输入了难度所以没发现问题,但自动测试时会因为等待多余输入而超时
- 修改后程序只会在开始时请求一次难度输入,之后连续生成10道对应难度的题目,符合check50的测试预期
内容的提问来源于stack exchange,提问作者Pius
相关产品推荐
相关产品推荐

