CS50P Little Professor代码未通过check50检测求助
CS50P 作业4 Little Professor 问题排查
问题描述
- 本地运行正常,但 check50 自动检测在 Level 1、2、3 均失败
- 错误提示:期望输出包含「6 + 6 =」,实际输出为「6 + 0 =」
- 疑问:为何检测要求特定随机加法题目,寻求代码排查思路
代码
import random import sys def main(): level = get_level() generate_integer(level) score = 0 for i in range(10): a = generate_integer(level) b = generate_integer(level) for j in range(3): ans = input(f"{a} + {b} =") if int(ans) == int(a + b): score += 1 break else: print("EEE") if j == 2: print(a+b) j += 1 i += 1 print(f"Score: {score}") sys.exit(0) # Prompts the user for a level, n # If the user does not input 1, 2, or 3, the program should prompt again. # get_level prompts (and, if need be, re-prompts) the user for a level and returns 1, 2, or 3, def get_level(): while True: try: level = int(input()) if level < 1 or level > 3: level = input() else: break except ValueError: level = input() return level # generate_integer returns a randomly generated non-negative integer with level digits or raises a ValueError if level is not 1, 2, or 3 def generate_integer(level): if level == 1: y = random.randint(0, 9) elif level == 2: y = random.randint(10, 99) elif level == 3: y = random.randint(100, 999) else: raise ValueError return y if __name__ == "__main__": main()
错误原因分析
多余的随机数调用:
main 函数开头的generate_integer(level)是无意义的多余调用,它会消耗一个随机数,导致后续生成的 a、b 序列与 check50 测试时预设的随机序列不一致。check50 依赖固定的随机种子生成预期题目,这个多余调用打乱了序列,从而出现「6 + 0 =」与预期「6 + 6 =」不符的错误。get_level 函数逻辑错误:
当用户输入无效值(非 1-3 的整数或非整数)时,函数处理流程混乱:- 输入非 1-3 的整数时,会额外执行一次
input()但不验证,下一次循环又重新要求输入,导致用户需要多次输入才能通过验证。 - 输入非整数时,进入
except块后仅执行input(),同样没有验证逻辑,后续循环仍需重新输入。
这不符合题目要求的「输入无效时重新提示」的逻辑,也可能导致 check50 自动化输入时出现异常。
- 输入非 1-3 的整数时,会额外执行一次
冗余的循环变量自增:
for 循环中的i += 1和j += 1完全多余,for 循环会自动迭代变量,这些语句不影响逻辑但增加代码冗余。
修复方案
移除多余的随机数调用:
删除 main 函数中level = get_level()后的generate_integer(level)语句。修正 get_level 函数逻辑:
重构函数,确保输入无效时直接重新提示:def get_level(): while True: try: level = int(input()) if 1 <= level <= 3: return level except ValueError: pass # 输入无效时自动循环,重新提示删除冗余代码:
移除 for 循环中的i += 1和j += 1语句。
内容的提问来源于stack exchange,提问作者TravisP
相关产品推荐
相关产品推荐

