Как сделать этот код цикла в словари и не продолжать цикл в Python? - PullRequest
0 голосов
/ 22 октября 2019
  • Напишите программу для расчета стоимости обеда
    • Если человек младше 5 лет, ужин бесплатный
    • Если человеку младше 10 лет, ужин составляет $ 5
    • Если человек младше 18 лет, ужин составляет $ 10
    • Если человек старше 65 лет, ужин составляет $ 12
    • Все остальные обеды оплачиваются в размере 15
    • Рассчитать 8%налог
    • Отображение общей суммы для каждого посетителя, количества посетителей, средней стоимости для каждого посетителя и совокупной суммы для всех посетителей
    • Программа должна циклически повторяться до тех пор, пока не будет введен выход, при этом каждый циклдобавлена ​​новая закусочная и обновлено общее количество

Это то, что мне нужно сделать. Я не уверен, как это сделать, чтобы итоговые значения входили в словари, а не в циклы.

Я задал похожий вопрос, но теперь этот вопрос требует суммирования всех вместе, и я неконечно как. Это код, который я сделал для предыдущего аналогичного вопроса. Проблема, которую я, кажется, в настоящее время имею, это не входит в словарь и там не напечатает это в конце. Мне также нужно, чтобы он продолжал цикл, пока я не наберу quit

dinner = {}
total ={}


name = input("What's your name? ")
age = input("What age is the person eating? ")
age = int(age)
amount = input("How many people that age? ")
amount = int(amount)

while True:
    if name == 'quit':
        print('Done')
        break
    elif age < 5:
        price = 0 * amount
        tax = price * 0.08
        dinner[name] = name
        dinner[age] = age
        total[amount] = price + tax
        break
    elif age < 10:
        price = 5 * amount
        tax = price * 0.08
        dinner[name] = name
        dinner[age] = age
        total[amount] = price + tax
        break
    elif age < 18:
        price = 10 * amount
        tax = price * 0.08
        dinner[name] = name
        dinner[age] = age
        total[amount] = price + tax
        break
    elif age > 65:
        price = 12 * amount
        tax = price * 0.08
        dinner[name] = name
        dinner[age] = age
        total[amount] = price + tax
        break
    else:
        price = 15 * amount
        tax = price * 0.08
        dinner[name] = name
        dinner[age] = age
        total[amount] = price + tax
        break
print("Thank you for having dinner with us! \nYour total is {total}, for {dinner}.")

1 Ответ

2 голосов
/ 22 октября 2019

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

  • np.digitize выполняет эту задачу
    • параметр bins, содержит возрасты и определяет, к какому индексу в списке подходит данное значение. bins является эксклюзивным, поэтому диапазоны 0-4, 5-9, 10-17, 18-65 и 66 +.
    • диапазоны соответствуют индексам 0, 1, 2, 3 и 4.
  • idx используется для возврата соответствующей цены за возрастной диапазон
  • Используйте функцию для возврата стоимости вместо набора if-elif утверждений
  • Направления, выделенные желтым цветом, не требуют, чтобы имя или возраст человека были возвращены.
  • Все, что требуется для печати в конце, может быть рассчитано на основании списка расходов,содержит цену каждого клиента.
  • print(f'some string {}') является f-String
  • Тип Подсказки используются в функциях (например, def calc_cost(value: int) -> float:).
import numpy as np

def calc_cost(value: int) -> float:
    prices = [0, 5, 10, 15, 12]
    idx = np.digitize(value, bins=[5, 10, 18, 66])
    return prices[idx] + prices[idx] * 0.08


cost = list()

while True:
    age = input('What is your age? ')
    if age == 'exit':
        break
    cost.append(calc_cost(int(age)))

# if cost is an empty list, nothing prints
if cost:
    print(f'The cost for each diner was: {cost}')
    print(f'There were {len(cost)} diners.')
    print(f'The average cost per diner was: {sum(cost)/len(cost):.02f}')
    print(f'The total meal cost: {sum(cost):.02f}')

Вывод:

What is your age?  4
What is your age?  5
What is your age?  9
What is your age?  10
What is your age?  17
What is your age?  18
What is your age?  65
What is your age?  66
What is your age?  exit
The cost for each diner was: [0.0, 5.4, 5.4, 10.8, 10.8, 16.2, 16.2, 12.96]
There were 8 diners.
The average cost per diner was: 9.72
The total meal cost: 77.76

Если не разрешено использовать numpy:

def calc_cost(value: int) -> float
    return value + value * 0.08

cost = list()

while True:
    age = input("What age is the person eating? ")
    if age == 'exit':
        break
    age = int(age)
    if age < 5:
        value = 0
    elif age < 10:
        value = 5
    elif age < 18:
        value = 10
    elif age < 66:
        value = 15
    else:
        value = 12

    cost.append(calc_cost(value))

if cost:
    print(f'The cost for each diner was: {cost}')
    print(f'There were {len(cost)} diners.')
    print(f'The average cost per diner was: {sum(cost)/len(cost):.02f}')
    print(f'The total meal cost: {sum(cost):.02f}')

Примечания:

  • Не используйте break во всех if-elif условиях, потому что это нарушает while-loop
  • Каждый раз, когда вы повторяете что-то, например, вычисление цены, пишите функцию.
  • Ознакомьтесь с вашимself с структурами данных Python , например list и dict
  • , для этого нужно сложить все суммы вместе, и я не знаю, как.
    • list.append(price) в цикле
    • sum(list) для получения суммы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...