Что не так с расчетом общих расходов по моей программе

#python #python-3.x

Вопрос:

Здравствуйте, моя программа может подсчитать количество клиентов и сообщить клиенту их цену в зависимости от количества часов, но не может добавить общую стоимость, чтобы спасти мою жизнь Вот мой код

 count = 1
total_charge = 0
total = 0
hours_parked = 0
ask = 1
standardRate = 2.00
FEE = .50
def calculate_charges(x, f, sr, t):
    if x <= 3:
        sr = 2.00
        t = sr
        print(t)
    elif x >= 3 and x <= 24:
        sr = 2.00
        f = (x - 3) * .50
        t = f   sr
        print(t)
    else:
        print("We only allow 24 hours tops. Check the number of hours again!")
        main(count, total_charge, hours_parked, ask, total)
        
def main(c, y, h, a, t):
    h = int(input("How many hours did the customer park?"))
    calculate_charges(h, FEE, standardRate, total)
    c  = 1
    a = int(input("Is there more customers?(Type 1 for YES and 2 for NO.)"))
    if a == 1:
        y = t   y
        main(count, total_charge, hours_parked, ask, total)
    else:
        y = t   y
        c  = 1
        print("There was a total of ", c, " customers and a profit of $", y, "for the day!" )
main(count, total_charge, hours_parked, ask, total)
 
 How many hours did the customer park?2
2.0
Is there more customers?(Type 1 for YES and 2 for NO.)1
How many hours did the customer park?2
2.0
Is there more customers?(Type 1 for YES and 2 for NO.)2
There was a total of  3  customers and a profit of $ 0 for the day!
 

Комментарии:

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

2. Понятно, но я довольно новичок, просто не могу понять, почему это не увеличивает общую стоимость программы

Ответ №1:

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

 count = 0
total_charge = 0
total = 0
hours_parked = 0
ask = 1
standardRate = 2.00
FEE = .50


def calculate_charges(x, f, sr):
    if x <= 3:
        t = sr
        print(t)
    else:
        f = (x - 3) * f
        t = f   sr
        print(t)
    return t


def main(c, y, h, a, t):
    while True:
        h = abs(int(input("How many hours did the customer park?")))
        if h > 24:
            print("We only allow 24 hours tops. Check the number of hours again!")
        else:
            break
    t  = calculate_charges(h, FEE, standardRate)
    c  = 1
    a = int(input("Is there more customers?(Type 1 for YES and 2 for NO.)"))
    if a == 1:
        y = t   y
        main(c, y, h, ask, total)
    else:
        y = t   y
        print("There was a total of ", c, " customers and a profit of $", y, "for the day!")


main(count, total_charge, hours_parked, ask, total)

 
 How many hours did the customer park?27
We only allow 24 hours tops. Check the number of hours again!
How many hours did the customer park?6
3.5
Is there more customers?(Type 1 for YES and 2 for NO.)1
How many hours did the customer park?28
We only allow 24 hours tops. Check the number of hours again!
How many hours did the customer park?10
5.5
Is there more customers?(Type 1 for YES and 2 for NO.)2
There was a total of  2  customers and a profit of $ 9.0 for the day!
 

Комментарии:

1. Если бы у зверя была фотография, это был бы ты, твой зверь, спасибо, чувак!

Ответ №2:

Ты звонишь

 main(count, total_charge, hours_parked, ask, total)
 

но count , total_charge , hours_parked , ask и total нигде не обновляются.

Итак, вы проходите, total_charge = 0 и это то, что возвращает программа.

Попробуйте перейти c, y, h, a, t main в свою основную функцию. (кстати, может быть проще сделать все в a while в calculate_charges функции)

Также… Возможно, вам будет легче понять, что происходит, если ваши переменные имеют значимые имена. После изучения CompSci в течение 4 лет в аспирантуре, а теперь в качестве аспиранта, я усвоил один важный урок: соблюдение соглашения о кодировании окупится как в краткосрочной, так и в долгосрочной перспективе.

Комментарии:

1. Что вы имеете в виду, передавая их в моей основной? Кстати, спасибо за помощь

2. Это: if a == 1: y = t y main(count, total_charge, hours_parked, ask, total) Заменить (count, total_charge, hours_parked, ask, total) на c, y, h, a, t