本文详解如何编写符合要求的 `driving_cost()` 函数,解决输入逻辑混乱、提前返回、类型误判等典型问题,并规范输出10/50/400英里对应油费(保留两位小数)。

在编程实践中,看似简单的函数题常因细节疏忽导致运行失败——如本例中反复出现的 EOF 错误、return 位置不当、字符串与 None 的混淆等。核心问题在于:题目明确要求固定计算 10、50 和 400 英里的成本,而非接收用户输入的任意 miles_driven。因此,程序不应调用 float(input()) 读取第3个输入,否则在自动评测环境中会因无后续输入而触发 EOFError。

正确的实现需严格遵循三点要求:

  • ✅ driving_cost() 仅负责计算并返回成本(float),不执行打印
  • ✅ 成本公式为:(miles_driven / miles_per_gallon) * dollars_per_gallon(即“行驶里程 ÷ 油耗率 × 单价”,逻辑清晰且单位一致);
  • ✅ 主程序中循环调用该函数三次,分别传入 [10, 50, 400],并对每个结果使用 f'{cost:.2f}' 格式化输出。

以下是完整、可直接提交的参考代码:

复制AI写代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

def driving_cost(miles_per_gallon, dollars_per_gallon, miles_driven):

    """计算指定里程的驾驶成本(美元)

    参数:

        miles_per_gallon (float): 车辆油耗(英里/加仑)

        dollars_per_gallon (float): 油价(美元/加仑)

        miles_driven (float): 行驶里程(英里)

    返回:

        float: 对应油费(美元)

    """

    return (miles_driven / miles_per_gallon) * dollars_per_gallon

if __name__ == '__main__':

    # 仅读取两个必要输入:油耗和油价

    miles_per_gallon = float(input())

    dollars_per_gallon = float(input())

    # 固定计算三段里程的成本

    for miles in [10, 50, 400]:

        cost = driving_cost(miles_per_gallon, dollars_per_gallon, miles)

        print(f'{cost:.2f}')

⚠️ 关键注意事项

  • 禁止在函数内打印或读取输入:driving_cost() 是纯计算函数,职责单一;I/O 操作统一在 main 中处理;
  • 避免无效条件判断:原代码中 if miles_driven == 'None' 试图检测未输入,但 'None' 是字符串,而 Python 的空值是 None(无引号),且题目根本不要求此逻辑;
  • 警惕 return 提前终止循环:return 在 for 循环内会立即退出函数,导致后续迭代和 print() 永远不会执行;
  • 公式顺序不可颠倒:(dollars_per_gallon / miles_per_gallon) * miles_driven 虽数学等价,但 (miles_driven / miles_per_gallon) 更直观体现“所需油量”,降低理解与维护成本。

运行示例(输入 20.0 → 3.1599):

复制AI写代码

1

2

3

1.58

7.90

63.20

完全匹配样例输出 7.89975 ≈ 7.90(四舍五入到百分位)。掌握这一模式,不仅能通过评测,更能养成函数职责分离、输入输出解耦的专业编码习惯。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐