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()
修改说明
- 移除了
get_user_input函数,将输入逻辑直接整合到主循环中,便于统一处理格式错误和答案错误。 - 当用户输入非整数时,立即打印"EEE"并增加尝试次数,符合题目要求。
- 去掉了对非正整数的过滤,允许用户输入0和负数,确保正确答案为0时能被正常识别。
- 简化了
generate_integer函数的返回逻辑,去掉不必要的变量赋值。
这些修改后,Check50的测试用例(包括输入非整数、正确答案为0的场景)都会得到符合要求的输出,从而通过所有测试。
内容的提问来源于stack exchange,提问作者Jeff F
相关产品推荐
相关产品推荐

