CS50P作业:小费计算器手动测试正常但自动测试无输出
CS50P Problem Set 0 小费计算器测试无输出问题解决
你的代码手动测试正常,但CS50P测试用例失败且输出为空的核心原因是:测试输入包含$和%符号,而你的转换函数未处理这些符号,直接转换会触发ValueError导致程序终止,因此没有输出。
比如测试用例输入$50.00时,dollars_to_float函数尝试将带$的字符串转为float会报错;输入15%时,percent_to_float函数同样会因无法解析带%的字符串抛出异常,程序提前终止后自然没有最终输出。
修正后的代码
def main(): dollars = dollars_to_float(input("How much was the meal? $")) percent = percent_to_float(input("What percentage would you like to tip? %")) tip = dollars * percent print(f"Leave ${tip:.2f}") def dollars_to_float(d): # 移除美元符号后转换为浮点数 return float(d.replace("$", "")) def percent_to_float(p): # 移除百分号后转换为浮点数,再转为比例值 return float(p.replace("%", "")) / 100 main()
补充说明
- 建议移除代码中用于调试的
print(dollars)和print(percent)语句,避免额外输出干扰测试判断 - 修正后的函数能兼容带符号和不带符号的输入,既满足手动测试场景,也符合CS50P的测试用例要求
内容的提问来源于stack exchange,提问作者Hamid Zangeneh
相关产品推荐
相关产品推荐

