Как рассчитать среднее значение для пользовательского ввода? -python-

Вопросы просят нас создать программу 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 divception zero» для моего «avg = sum / x», так что он в основном говорит, что мой x равен нулю, и я понятия не имею, почему и как это решить. Практически все перепробовала. Пожалуйста помоги.


person Anon    schedule 26.01.2021    source источник
comment
Переместите строку x=x-1 на после вычисления средн.   -  person AnkurSaxena    schedule 26.01.2021
comment
Пусть переменная хранит копию x перед циклом и использует ее для вычисления среднего значения.   -  person Abdul Aziz Barkat    schedule 26.01.2021
comment
1. Пожалуйста, не переопределяйте ключевое слово sum. 2. Пожалуйста, используйте словарь для сборов или чего-то еще, но не очень длинный if...else, это плохой код.   -  person Uriya Harpeness    schedule 26.01.2021


Ответы (3)


Ваш алгоритм выполняет деление на количество автомобилей x, но та же переменная используется для уменьшения.

Предложение :

  • запросить номер автомобиля и сохранить его в другой переменной,
  • вычисление среднего значения выполняется только в самом конце, после того, как будут рассчитаны все комиссии.

e.g. :

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

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

...
avg = sum / n_cars
...
person Joël    schedule 26.01.2021
comment
Не сработает, x меняется на каждой итерации! - person Abdul Aziz Barkat; 26.01.2021
comment
верно! Я пропустил ошибку алгоритма. Я обновил свой ответ. - person Joël; 26.01.2021

Вот более простая рабочая реализация с более коротким и понятным кодом:

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)

Обратите внимание, что обычно вам не нужно копировать один и тот же блок слишком много раз, это нечитаемо.

person Uriya Harpeness    schedule 26.01.2021

Проблема в том, что вы уменьшаете 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):")
person Krishna Chaurasia    schedule 26.01.2021