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

CS50 Python LittleProfessor代码无法通过加法题生成测试求助

CS50 Python LittleProfessor 测试失败排查

问题概述

完成CS50 Python课程LittleProfessor题目时,代码未能通过"生成加法题"测试。题目要求输入1-3的等级,对应生成1、2、3位随机整数的加法题,但测试报错如下:

:( At Level 1, Little Professor generates addition problems using 0–9
Did not find "6 + 6 =" Choose Level "C: 8 + 7 = "
:( At Level 2, Little Professor generates addition problems using 10–99
Did not find "59 + 63 =" in "Choose Level: 85 + 78 = ..."
:( At Level 3, Little Professor generates addition problems using 100–999
Did not find "964 + 494 =" in "Choose Level: 859 + 782 ..."

用户提交的代码:

import random

def main():
    level = get_level()
    score = 0
    for i in range(10):
        x, y = generate_integer(level)
        answer = x + y

        for j in range(3):
            print(x, "+", y, "= ", end="")
            guess = int(input())
            if guess == answer:
                score = score + 1
                break
            elif guess != answer and j == 2:
                print(x, "+", y, "=", answer)
                break
            else:
                print("EEE")
    print("Score:", score)

def get_level():
    while True:
        try:
            n = int(input("Choose Level: "))
            if 1 <= n <= 3:
                return n
        except ValueError:
            pass

def generate_integer(level):
    if level == 3:
        return random.choices(range(100, 1000), k=2)
    elif level == 2:
        return random.choices(range(10, 100), k=2)
    elif level == 1:
        return random.choices(range(0, 10), k=2)
    else:
        raise ValueError

if __name__ == "__main__":
    main()

问题原因

  1. 等式格式不匹配:测试脚本期望的题目格式是"X + Y ="(等号后无空格),但代码中print(x, "+", y, "= ", end="")输出的是"X + Y = "(等号后多了一个空格),导致测试无法识别符合要求的题目字符串。
  2. 输入提示不符合要求:题目规定等级输入提示为"Level: ",但代码中使用的是"Choose Level: ",多余的前缀会干扰测试脚本的输出解析逻辑。
  3. 随机数生成方式冗余:random.choices用于生成列表形式的随机数,虽然功能可用,但题目需要的是单个随机整数,改用random.randint逻辑更直接清晰,也避免不必要的列表操作。

修正后的代码

import random

def main():
    level = get_level()
    score = 0
    for i in range(10):
        x, y = generate_integer(level)
        answer = x + y

        for j in range(3):
            # 调整等式格式,匹配测试要求的"X + Y ="
            print(f"{x} + {y} =", end=" ")
            try:
                guess = int(input())
            except ValueError:
                print("EEE")
                continue
            if guess == answer:
                score += 1
                break
            elif j == 2:
                print(f"{x} + {y} = {answer}")
            else:
                print("EEE")
    print(f"Score: {score}")

def get_level():
    while True:
        try:
            # 改为题目要求的输入提示
            n = int(input("Level: "))
            if 1 <= n <= 3:
                return n
        except ValueError:
            pass

def generate_integer(level):
    if level == 3:
        return random.randint(100, 999), random.randint(100, 999)
    elif level == 2:
        return random.randint(10, 99), random.randint(10, 99)
    elif level == 1:
        return random.randint(0, 9), random.randint(0, 9)
    else:
        raise ValueError

if __name__ == "__main__":
    main()

额外说明

修正后的代码还补充了对非整数输入的错误处理,符合题目中输入错误时输出"EEE"的要求,同时格式化字符串的使用让代码更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:15:49