【问题标题】:How to calculate the average for user input? -python-如何计算用户输入的平均值? -Python-
【发布时间】:2021-04-30 07:54:45
【问题描述】:

问题要求我们创建一个 Python 程序,要求用户输入汽车数量、停车时长和停车费,并计算其总费用和总平均数。除了总平均数之外,我能找到我需要的一切。

sum = 0.00
fee = 0
avg = 0

x = int(input("Number of cars:"))

while x > 0:
    y = float(input("Duration of parking:"))
    if y <= 3:
        fee = 2
        print("Fee: 2")
    elif 3 < y <= 23
        fee = 2 + (0.05 * y)
    elif y == 24:
        fee = 10
        print("Fee: 10")
    x = x - 1
    sum = sum + fee
    avg = sum / x
print("Total fees:", sum)
print("Average:")

这是我的代码,唯一的问题是平均值。它给了我一个 'ZeroDivisionError: float division zero' for my 'avg = sum / x' 所以它基本上是说我的 x 为零,我不知道为什么或如何解决它。我几乎什么都试过了。请帮忙。

【问题讨论】:

  • 在计算平均值后将行 x=x-1 移动到。
  • 在循环之前有一个变量存储 x 的副本并使用它来计算平均值。
  • 1.请不要覆盖 sum 关键字。 2. 请使用字典来查询费用或其他内容,但不要太长if...else,这是不好的代码。

标签: python average


【解决方案1】:

您的算法会除以汽车数量x,但使用相同的变量进行递减。

建议:

  • 请求汽车号码并将其存储到另一个变量中,
  • 只有在计算完所有费用后才在最后进行平均计算。

例如:

n_cars = x = int(input("how many cars?")

while x > 0:
    # more stuff
    ...
    sum += fee

...
avg = sum / n_cars
...

【讨论】:

  • 行不通,每次迭代都会更改 x!
  • 确实!我错过了算法错误。我更新了我的答案。
【解决方案2】:

这是一个更简单的工作实现,代码更短更清晰:

import math

MIN_FEE = 2.0
MAX_FEE = 10

x = int(input("How many cars?: "))
cost = 0

for _ in range(x):
    y = float(input("Parking duration for car: "))
    fee = min(math.ceil(max(MIN_FEE, (y + 1) * 0.5)), MAX_FEE)
    print(f"Parking fee (RM): {fee}")
    cost += fee

print("Total Fee (RM):", cost)
print("Average (RM):", cost / x)

请注意,您通常不需要多次复制粘贴同一块,因为它是不可读的。

【讨论】:

    【解决方案3】:

    问题是您在每次迭代中递减x,最终变为0,因此您会收到错误消息。

    要么使用 for 循环迭代 n 输入,要么使用两个对象,一个用于迭代,另一个用于计算平均值。

    此外,您需要计算while 循环之外的平均值。

    试试这个:

    sum = 0.00
    fee = 0
    avg = 0
    
    x = int(input("How many cars?: "))
    z = x
    
    while x > 0:
        y = float(input("Parking duration for car: "))
        if y <= 3:
            fee = 2
            print("Parking fee (RM): 2")
        elif 3 < y <= 4:
            fee = 2.50
            print("Parking fee (RM): 2.50")
        elif 4 < y <= 5:
            fee = 3
            print("Parking fee (RM): 3")
        elif 5 < y <= 6:
            fee = 3.50
            print("Parking fee (RM): 3.50")
        elif 6 < y <= 7:
            fee = 4
            print("Parking fee (RM): 4")
        elif 7 < y <= 8:
            fee = 4.50
            print("Parking fee (RM): 4.50")
        elif 8 < y <= 9:
            fee = 5
            print("Parking fee (RM): 5")
        elif 9 < y <= 10:
            fee = 5.50
            print("Parking fee (RM): 5.50")
        elif 10 < y <= 11:
            fee = 6
            print("Parking fee (RM): 6")
        elif 11 < y <= 12:
            fee = 6.50
            print("Parking fee (RM): 6.50")
        elif 12 < y <= 13:
            fee = 7
            print("Parking fee (RM): 7")
        elif 13 < y <= 14:
            fee = 7.50
            print("Parking fee (RM): 7.50")
        elif 14 < y <= 15:
            fee = 8
            print("Parking fee (RM): 8")
        elif 15 < y <= 16:
            fee = 8.50
            print("Parking fee (RM): 8.50")
        elif 16 < y <= 17:
            fee = 9
            print("Parking fee (RM): 9")
        elif 17 < y <= 18:
            fee = 9.50
            print("Parking fee (RM): 9.50")
        elif 18 < y <= 24:
            fee = 10
            print("Parking fee (RM): 10")
        x = x - 1
        sum = sum + fee
    
    avg = sum / z
    print("Total Fee (RM):", sum)
    print("Average (RM):")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      相关资源
      最近更新 更多