У меня есть основная программа меню ниже. У меня возникают проблемы с добавлением 'цены' товара в окончательный словарь "заказов", чтобы созданный файл "txt" отображал товар и цену соответствующим образом. В коде вы можете видеть, что «заказы» на данный момент не словарь, а «список» (это единственный способ, которым я могу заставить его работать в данный момент. Кроме того, я жестко запрограммирован) 3.00 "за цену вместо действительной стоимости предмета, который выбирает человек (я знаю, что мне нужно заменить это" 3.00 "на что-то другое). Заранее спасибо за вашу помощь ...

def print_menu(menu):
    for name, price in menu.items():
        print(name, ': $', format(price, '.2f'), sep='')


def get_order(menu):
    orders = []
    order = input("What would you like to order? (Q to Quit)")

    while order.upper() != 'Q':

        found_boolean = menu.get(order)
        if found_boolean:
            orders.append(order)

        else:
            print("Menu item does not exist")
            order = input("Anything else? (Q to Quit)")

    return orders


def total_bill(orders, menu):
    total = 0

    for order in orders:
        total += menu[order]

    return total


def write_sales_log(orders, total):
    sales_log = open('sales.txt', 'a')

    for item in orders:
    sales_log.write(item + ' ' + format(price, ' .2f') + '\n')
    sales_log.write('total = ' + format(total, '.2f') + '\n\n')
    sales_log.close()


def main():
    menu = {'Roast Beef': 2.5, 'Hot Dog': 3.0, 'Hamburger': 3.5}  
    print_menu(menu)
    orders = get_order(menu)
    total = total_bill(orders, menu)
    print("You ordered:", orders,
          "Your total is: $", format(total, ' .2f'), sep='')
    write_sales_log(orders, total)


main()
0
Raymond C. Fontaine 21 Дек 2019 в 04:06

1 ответ

Вот несколько вещей для работы.

Во-первых, в этом коде:

found_boolean = menu.get(order) 
   if found_boolean:
        orders.append(order)

похоже, вы неправильно понимаете, что делает функция get. Он ищет ключ в словаре и возвращает соответствующее значение. Не возвращает логическое значение. Если вы просто хотите увидеть, является ли order одним из ключей в словаре menu, попробуйте следующее:

if order in menu:
    orders.append(order)

Во-вторых, посмотрите, как в функции total_bill вы правильно написали menu[order], чтобы найти order в словаре menu и получить обратно соответствующее значение (цену)? Используйте тот же синтаксис, чтобы получить цену для каждого элемента в функции write_sales_log. Так, например:

for item in orders:
    price = menu[item]
    sales_log.write(.......

В-третьих, в функции get_order вы запрашиваете у пользователя только другой заказ, если его первый заказ был недействительным. Если они дают вам правильный заказ, то ваш код заходит в бесконечный цикл и застревает. Вы, вероятно, хотите переместить строку order = input("Anything else? (Q to Quit)") за пределы блока else.

В-четвертых, вы написали, что хотите, чтобы orders был словарем. Как вы указали, в настоящее время эта переменная содержит список. Почему вы предпочитаете, чтобы в нем был словарь? Если бы вы предпочли использовать словарь, то как бы этот словарь был структурирован? Словарь связывает ключи со значениями (например, ваш словарь menu, который связывает продукты питания с их ценами). Какими будут ключи и значения словаря orders? На самом деле, orders выглядит вполне разумным, чтобы оставаться списком.

0
Andrew Merrill 21 Дек 2019 в 01:32