CS50P Problem Set4 Little Professor:check50超时错误排查求助
CS50P Problem Set 4 Little Professor:check50超时问题修复
本地运行代码时可正常输入level、验证答案并输出预期响应,但check50执行单元测试时返回timed out while waiting for program to exit错误。原代码如下:
import random def main(): num_repeat = 10 score = 0 level = get_level() while num_repeat > 0: x = generate_integer(level) y = generate_integer(level) guess_remain = 3 try: while guess_remain > 0: answer = int(input(f'{x} + {y} = ')) if answer == x + y: score += 1 break else: print('EEE') guess_remain -= 1 if guess_remain == 0: print(f'{x} + {y} = {x+y}') continue except ValueError: print('EEE') pass else: num_repeat -= 1 print(f'Score: {score}') return 0 def get_level(): while True: try: level = int(input("Level: ")) if level in [1, 2, 3]: break except: pass return level def generate_integer(digits): if digits == 1: min_num = 0 else: min_num = 10 ** (digits - 1) max_num = (10 ** digits) -1 rand_num = random.randint(min_num, max_num) return rand_num main()
问题原因
超时的核心是输入非整数触发ValueError时,代码未消耗剩余尝试次数。当测试用例模拟非数字输入时,except块仅打印EEE后直接pass,内部的while guess_remain > 0循环会持续等待输入,check50的自动测试无法处理这种无限等待,最终触发超时。
修复方案
调整错误处理逻辑,确保每次错误输入(无论数字错误还是非整数)都消耗剩余尝试次数,同时保证每完成一题后正确递减num_repeat,避免循环卡住。
修改后的代码:
import random def main(): num_repeat = 10 score = 0 level = get_level() while num_repeat > 0: x = generate_integer(level) y = generate_integer(level) guess_remain = 3 correct = False while guess_remain > 0: try: answer = int(input(f'{x} + {y} = ')) if answer == x + y: score += 1 correct = True break else: print('EEE') guess_remain -= 1 except ValueError: print('EEE') guess_remain -= 1 # 尝试次数耗尽时输出正确答案 if guess_remain == 0: print(f'{x} + {y} = {x+y}') num_repeat -= 1 print(f'Score: {score}') return 0 def get_level(): while True: try: level = int(input("Level: ")) if level in [1, 2, 3]: break except ValueError: pass return level def generate_integer(digits): if digits == 1: min_num = 0 else: min_num = 10 ** (digits - 1) max_num = (10 ** digits) - 1 rand_num = random.randint(min_num, max_num) return rand_num main()
关键修改点
- 将
try-except移到内部循环的单次输入操作中,确保每次错误输入都正确减少guess_remain - 移除外层
try-except-else结构,改为无论答题结果如何,每完成一题都递减num_repeat - 统一数字错误和非整数错误的尝试次数消耗逻辑,彻底避免无限循环
内容的提问来源于stack exchange,提问作者Ahadul Islam
相关产品推荐
相关产品推荐

