Python实现driving_cost函数直接调用出现ValueError错误求助
问题原因分析
报错触发逻辑
你当前把input()读取输入、循环输出10/50/400英里油费的代码放在了全局作用域,只要Python解释器加载这个文件,这些全局代码会第一顺序执行。
当评测脚本直接导入你的文件调用driving_cost(20.0,3.1599, 50.0)时,程序不会收到你预期的两个浮点数输入,反而会把评测脚本的调用语句当做input()的输入内容,尝试把字符串'driving_cost(20.0, 3.1599, 50.0)'转为float时就触发了类型错误。
if __name__ == '__main__'的作用
Python中每个文件都有内置变量__name__:
- 如果你直接运行这个py文件,
__name__的值就是'__main__' - 如果你把这个文件作为模块导入到其他代码中使用,
__name__的值就是你的文件名(不带.py后缀)
所以这个判断的作用就是:只有直接运行该文件时才执行判断块内的代码,被导入时仅加载函数定义,不执行业务逻辑。
代码修改方案
你需要把所有和输入读取、直接执行的输出逻辑都放到if __name__ == '__main__'块里,同时注意题目要求三个油费结果空格分隔在同一行输出,不要每次循环单独换行打印:
def driving_cost(miles_per_gallon, dollars_per_gallon, miles_driven): return dollars_per_gallon / miles_per_gallon * miles_driven if __name__ == '__main__': # 仅直接运行文件时才执行输入、输出逻辑 miles_per_gallon = float(input()) dollars_per_gallon = float(input()) miles_list = [10, 50, 400] # 生成保留两位小数的结果列表,再用空格拼接后一次输出 result_list = [f'{driving_cost(miles_per_gallon, dollars_per_gallon, m):.2f}' for m in miles_list] print(' '.join(result_list))
修改后:
- 评测脚本导入你的文件时,只会加载
driving_cost函数定义,不会执行输入相关代码,直接调用函数就不会报错 - 直接运行文件时,输入两个参数后会按要求输出空格分隔的三个结果,符合题目要求
内容的提问来源于stack exchange,提问作者Kristi Farrell
相关产品推荐
相关产品推荐

