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

CS50P Pset4 Little Professor作业Check50未通过问题求助

CS50P Pset4 Little Professor: Check50 Failing on "EEE" and Correct Answer Checks

你的代码手动运行看似正常,但Check50的报错暴露了两个关键逻辑问题:

问题1:get_user_input非法过滤非正整数

原函数中的if user_input > 0会拒绝0和负数输入,但题目中允许正确答案为0(比如0+0=0)。当用户输入0时,会被判定为无效输入进入无限循环,既无法提交正确答案,也不会触发"EEE"输出,导致Check50检测不到预期的错误提示和正确答案。

问题2:非整数输入未输出"EEE"

原get_user_input在捕获ValueError(比如用户输入字符串)时仅执行pass,没有打印"EEE",也没有计入尝试次数。根据题目要求,任何错误输入(格式错误或答案错误)都要输出"EEE",且最多允许3次尝试,这部分逻辑缺失导致Check50无法检测到预期输出。

修改后的代码

import random

def main():
    score = 0
    level = get_level()

    for _ in range(10):
        x, y, correct_answer = generate_problem(level)
        user_attempts = 0

        while user_attempts < 3:
            print(f"{x} + {y} = ", end="")
            try:
                user_answer = int(input())
            except ValueError:
                # 格式错误,输出EEE并计数
                print("EEE")
                user_attempts += 1
                continue

            if user_answer == correct_answer:
                score += 1
                break
            else:
                # 答案错误,输出EEE并计数
                user_attempts += 1
                print("EEE")

        if user_attempts == 3:
            print(f"{x} + {y} = {correct_answer}")

    print(f"Score: {score}")

def generate_problem(prob_level):
    x = generate_integer(prob_level)
    y = generate_integer(prob_level)
    return x, y, x + y

def get_level():
    while True:
        try:
            num_level = int(input("Level: "))
            if num_level in [1, 2, 3]:
                return num_level
            else:
                raise ValueError
        except ValueError:
            pass

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

if __name__ == "__main__":
    main()

修改说明

  1. 移除了get_user_input函数,将输入逻辑直接整合到主循环中,便于统一处理格式错误和答案错误。
  2. 当用户输入非整数时,立即打印"EEE"并增加尝试次数,符合题目要求。
  3. 去掉了对非正整数的过滤,允许用户输入0和负数,确保正确答案为0时能被正常识别。
  4. 简化了generate_integer函数的返回逻辑,去掉不必要的变量赋值。

这些修改后,Check50的测试用例(包括输入非整数、正确答案为0的场景)都会得到符合要求的输出,从而通过所有测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:08:23