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

Harvard CS50P PSET4 Little Professor 程序退出超时问题求助

问题描述
  • 完成CS50P Little Professor编程习题时,本地自测代码运行逻辑正常,提交官方自动化校验时触发报错:

:( Little Professor accepts valid level // timed out while waiting for program to exit

  • 现有代码已通过全部3项无效难度等级输入的校验,无法定位超时触发原因,原实现代码如下:
def main():
    level = get_level()
    q=1
    s=0
    while q<=10:
        try:
            x = generate_integer(level)
            y = generate_integer(level)
            ans = x + y
            eq = int(input(f'{x} + {y} = '))
        
            if ans == eq:
                s += 1
                pass
            
            elif ans != eq:
                c = 1
                while c <= 2:
                    print('EEE')
                    eq = int(input(f'{x} + {y} = '))
                    
                    if ans == eq:
                        s += 1
                        break

                    else:
                        c += 1
                        
                if c == 3:
                    print('EEE')
                    print(f'{x} + {y} = {ans}')
            q += 1
            
        except EOFError:
            pass
        
    print(f'Score: {s}')
    
def get_level(): 
    valid_inputs = (1,2,3)
    while True:
        try:
            level = int(input('Level: '))
            if level in valid_inputs:
                return level
            else:
                pass
        except ValueError:
            pass
        

def generate_integer(level):
    max = 10**level-1
    min = 10**(level-1)
    
    if level == 1:
        min == 0
    
    num = random.randint(min,max)
    
    return num

main()
根因分析

代码共有3处核心问题,其中异常捕获逻辑缺陷直接导致超时:

  1. 缺失依赖导入:代码调用random.randint()生成随机数,但未在开头导入random模块,运行到题目生成环节会直接抛出NameError阻断流程。
  2. 赋值语法错误:generate_integer函数中,难度1对应的数字范围应为0-9,代码写为min == 0(双等号是比较运算,不会修改变量值),导致难度1下仅能生成1-9的数字,不符合题目要求。
  3. 异常捕获导致死循环:主循环捕获EOFError后直接执行pass,无任何退出逻辑。自动化测试用例跑完所有预设输入后会发送EOF终止信号,此时程序会跳过报错,继续停在循环中等待新的输入,测试端迟迟等不到程序退出,就会触发超时报错。

额外逻辑缺陷:现有代码未处理答题时输入非整数的场景,用户输入非整数内容时会触发ValueError导致程序直接崩溃,不符合题目“非整数输入算答错”的要求。

修正后代码
import random

def main():
    level = get_level()
    q = 1
    s = 0
    while q <= 10:
        x = generate_integer(level)
        y = generate_integer(level)
        ans = x + y
        wrong_count = 0
        correct = False
        while wrong_count < 3:
            try:
                eq = int(input(f'{x} + {y} = '))
                if eq == ans:
                    s += 1
                    correct = True
                    break
                else:
                    wrong_count += 1
                    print('EEE')
            except ValueError:
                wrong_count += 1
                print('EEE')
            except EOFError:
                print(f'Score: {s}')
                return
        if not correct:
            print(f'{x} + {y} = {ans}')
        q += 1
    print(f'Score: {s}')
    
def get_level(): 
    valid_inputs = (1,2,3)
    while True:
        try:
            level = int(input('Level: '))
            if level in valid_inputs:
                return level
        except (ValueError, EOFError):
            pass
        

def generate_integer(level):
    max_val = 10**level - 1
    min_val = 10**(level-1)
    if level == 1:
        min_val = 0
    return random.randint(min_val, max_val)

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者REL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:36:47