You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:06:03