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

CS50P 问题集4 Little Professor练习程序无法自动退出引发check50错误求助

CS50P 问题集4 Little Professor练习程序无法自动退出引发check50错误求助

嘿,我来帮你排查这个问题!首先,check50报错说程序没自动退出,核心原因是你用了sys.exit(f"Score: {score}")来输出分数——这个函数是用来强制终止程序的,而题目要求的是正常打印分数后让程序自然结束,check50会认为这种提前退出的行为不符合要求,所以触发了错误。

另外,你的代码还有几个小问题,一起帮你修正:

1. 修复退出逻辑(解决check50的核心问题)

把最后一行的sys.exit(f"Score: {score}")直接改成普通的打印语句:

print(f"Score: {score}")

这样程序完成10道题的循环后,会正常打印分数,然后自动结束,完全符合check50的检测标准。

2. 修复数字生成的范围错误

你用range()的时候忽略了它是左闭右开的特性:

  • level1需要生成0-9的数字,但range(0,9)只到8,应该改成range(0, 10)
  • level2需要10-99,range(10,99)只到98,改成range(10, 100)
  • level3需要100-999,range(100,999)只到998,改成range(100, 1000)

修正后的generate_integer函数:

def generate_integer(level):
    # 0-9, 10-99, 100-999
    if level == 1:
        numbers = range(0, 10)
    elif level == 2:
        numbers = range(10, 100)
    elif level == 3:
        numbers = range(100, 1000)
    return numbers

3. 修复输入处理的崩溃问题

当前代码里,如果用户输入类似12a这种混合字符的内容,answer.isalpha()会返回False,然后执行int(answer)时会直接抛出ValueError导致程序崩溃。我们需要用try-except来捕获这个异常,把所有非数字输入都视为错误:

修改循环内的输入处理逻辑:

while lifes > 0:
    answer = input(calculation)
    try:
        ans = int(answer)
        if ans == x + y:
            score += 1
            break
        else:
            print("EEE")
            lifes -= 1
    except ValueError:
        print("EEE")
        lifes -= 1

总结修改后的完整代码

把上面的修改整合后,你的代码应该能通过check50的所有检测,同时逻辑也更健壮:

import random

levels = {'1','2','3'}
random.seed(0)

def main():
    level = get_level()
    numbers = generate_integer(level)

    score = 0

    for i in range(10):
        lifes = 3
        x = random.choice(numbers)
        y = random.choice(numbers)
        calculation = f"{x} + {y} = "

        while lifes > 0:
            answer = input(calculation)
            try:
                ans = int(answer)
                if ans == x + y:
                    score += 1
                    break
                else:
                    print("EEE")
                    lifes -= 1
            except ValueError:
                print("EEE")
                lifes -= 1

        if lifes == 0:
            print(f"{x} + {y} = {x + y}")

    print(f"Score: {score}")


def get_level():
    output = input("Level: ")
    while output not in levels:
        output = input('Level: ')
    return int(output)

def generate_integer(level):
    # 0-9, 10-99, 100-999
    if level == 1:
        numbers = range(0, 10)
    elif level == 2:
        numbers = range(10, 100)
    elif level == 3:
        numbers = range(100, 1000)
    return numbers


if __name__ == "__main__":
    main()

备注:内容来源于stack exchange,提问作者user28961317

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 17:14:38