CS50 Python课程check50报'timed out while waiting for program to exit'求助
问题排查:Little Professor程序check50超时问题
check50测试结果
:) professor.py exists :) Little Professor rejects level of 0 :) Little Professor rejects level of 4 :) Little Professor rejects level of "one" :( Little Professor accepts valid level timed out while waiting for program to exit :| At Level 1, Little Professor generates addition problems using 0–9 can't check until a frown turns upside down :| At Level 2, Little Professor generates addition problems using 10–99 can't check until a frown turns upside down :| At Level 3, Little Professor generates addition problems using 100–999 can't check until a frown turns upside down :| Little Professor generates 10 problems before exiting can't check until a frown turns upside down :| Little Professor displays number of problems correct can't check until a frown turns upside down :| Little Professor displays EEE when answer is incorrect can't check until a frown turns upside down :| Little Professor shows solution after 3 incorrect attempts can't check until a frown turns upside down
问题描述
手动测试程序时流程正常,但check50检测时,输入有效关卡后提示timed out while waiting for program to exit,请求排查超时原因。
代码问题分析
你的代码存在以下几个关键问题,直接或间接导致了check50超时:
1. 未处理答案输入的非数字情况
在处理答题输入时,直接使用int(answer)转换输入内容,但未捕获ValueError异常。如果输入非数字(比如check50测试用例中包含这类输入),程序会直接崩溃,无法正常退出,进而触发超时。
2. 重复代码导致的逻辑漏洞
你将第一题和后续9题的处理逻辑分开编写,不仅冗余,还容易出现变量重置不及时的问题。比如在后续题目的循环中,错误次数变量i的重置逻辑依赖于k的判断,一旦逻辑触发异常,可能导致死循环。
3. Level 1的数字范围不符合要求
generate_integer函数中,Level 1生成的是1-9的随机数,但题目要求是0-9,这会导致后续测试用例失败。
修复后的代码
import random def main(): get_level() def get_level(): while True: lvl_input = input("Level: ") if not lvl_input.isnumeric(): continue lvl = int(lvl_input) try: # 验证level有效性 generate_integer(lvl) break except ValueError: continue score = 0 # 循环生成10道题目 for _ in range(10): x = generate_integer(lvl) y = generate_integer(lvl) correct_answer = x + y attempts = 0 while attempts < 3: try: user_answer = int(input(f"{x} + {y} = ")) except ValueError: print("EEE") attempts += 1 continue if user_answer == correct_answer: score += 1 break else: print("EEE") attempts += 1 # 三次错误后显示正确答案 else: print(f"{x} + {y} = {correct_answer}") print(f"Score: {score}") def generate_integer(level): if level not in (1, 2, 3): raise ValueError 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()
修复说明
- 新增异常捕获:在处理答题输入时,捕获
ValueError,确保输入非数字时程序不会崩溃,而是继续提示输入并累计错误次数。 - 合并重复逻辑:将10道题的处理合并为一个循环,避免重复代码,确保错误次数变量
attempts每次都正确初始化,消除逻辑漏洞。 - 修正Level 1范围:将Level 1的随机数范围改为
0-9,符合题目要求。 - 简化Level验证:直接判断level是否为1/2/3,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Isaac Reshedo
相关产品推荐
相关产品推荐

