CS50P Problem Set3:Fuel.py程序测试未通过,请求排查问题
问题排查与修复方案
1. 输入100/100、99/100未输出F
- 原代码中输出F的条件
percent>98逻辑上虽等价于≥99,但存在歧义;更关键的是get_fuel函数用字符串比较x和y的大小,可能引发隐性逻辑错误(比如字符串"10"<="3"会被判定为True)。修复时需明确条件为percent>=99,同时修正数值比较逻辑。
2. 输入10/3时未拒绝输入
- 原代码直接用字符串比较
x<=y,字符串按ASCII字符顺序对比,导致"10"<="3"被误判为合法。正确做法是先将x、y转为整数,再比较大小。
3. 输入5-10时未拒绝输入
- 原代码的
try-except包裹了整个while循环,输入不含"/"的内容触发ValueError后,会直接退出循环而非重新提示。需将try-except移至循环内部,捕获单次输入的异常后继续循环。
修正后的完整代码
def main(): a, b = get_fuel() percent = round(a / b * 100) if percent <= 1: print("E") elif percent >= 99: print("F") else: print(f"{percent}%") def get_fuel(): while True: try: fuel = input("Fraction: ") x_str, y_str = fuel.split("/") # 转换为整数,非整数输入会触发ValueError x = int(x_str) y = int(y_str) # 校验除数为0或分子大于分母的情况 if y == 0 or x > y: continue return x, y except (ValueError, ZeroDivisionError): # 捕获异常后继续循环,重新提示输入 continue main()
代码说明
- get_fuel函数优化:
- 把异常捕获逻辑放到循环内部,确保输入错误后持续提示用户。
- 先将输入转为整数,自动过滤非整数输入;再校验y是否为0、x是否大于y,符合题目拒绝条件。
- main函数条件修正:
- 将输出F的条件改为
percent>=99,明确匹配题目要求的≥99%输出F,消除逻辑歧义。
- 将输出F的条件改为
内容的提问来源于stack exchange,提问作者shubhrodey
相关产品推荐
相关产品推荐

