You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:54:55