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()
问题原因
- 等式格式不匹配:测试脚本期望的题目格式是
"X + Y ="(等号后无空格),但代码中print(x, "+", y, "= ", end="")输出的是"X + Y = "(等号后多了一个空格),导致测试无法识别符合要求的题目字符串。 - 输入提示不符合要求:题目规定等级输入提示为
"Level: ",但代码中使用的是"Choose Level: ",多余的前缀会干扰测试脚本的输出解析逻辑。 - 随机数生成方式冗余:
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
相关产品推荐
相关产品推荐

