CS50P问题集1数学解释器代码报错:check50测试未通过
修复CS50P数学解释器代码的check50测试问题
问题根源分析
- 重复输出与类型报错:代码最后一行
print(round(exp, 1))是核心问题:exp是split()返回的字符串列表,round()仅支持数值类型,因此抛出type list doesn't define __round__ method错误- 前面已打印计算结果,这一行会导致输出两行内容,不符合check50要求的单一行输出规范
修正后的代码
exp = input("Expression: ").split(" ") x, y, z = exp n1 = float(x) n2 = float(z) result = 0.0 if y == "+": result = n1 + n2 elif y == "-": result = n1 - n2 elif y == "*": result = n1 * n2 elif y == "/": result = n1 / n2 print(round(result, 1))
关键修改点
- 新增
result变量存储计算结果,避免重复计算逻辑 - 将原代码中直接打印计算结果的逻辑改为赋值给
result,最后统一对数值结果执行round()并输出,确保格式符合要求 - 删除错误的
print(round(exp, 1))行,彻底解决类型错误和重复输出问题
验证效果
输入1 + 1时,代码计算得到2.0,经round(result,1)处理后输出2.0,仅单一行内容,完全匹配check50的预期输出。
内容的提问来源于stack exchange,提问作者snuptrof
相关产品推荐
相关产品推荐

