Простая программа магазина

Я новичок в программировании, и это одна из моих первых программ. Я понятия не имел, что я делаю, поэтому большая часть этой программы была сделана из-за плохого исправления ошибок, который едва успел исправить ошибки. Я уверен, что есть много вещей, которые я сделал неправильно или очень неэффективно. Скажите, пожалуйста, что я сделал неправильно и как я могу улучшить эту программу:

stock={'banana':6,
'apple':0,
'orange':32,
'pear':15,}
prices={'banana': 4,
'apple':2,
'orange':1.5,
'pear':3}

def uppercase(x):
  return x[0].upper()+x[1:]

name=input('''What is your name?
''')
print('Hi, %s, welcome to my fruit store. Here is the menu:'%(name))
print()

def menu():
  for fruit in prices:
    print(uppercase(fruit))
    print('Price: $%s'%(prices[fruit]))
    print('Stock: %s'%(stock[fruit]))
    print()
  print('You have: $%s'%(money))
  print()

def ask_fruit(money):
  fruit=input('''What fruit do you want?
''')
  print()
  if fruit in stock:
    if stock[fruit]>0:
      ask_amount(fruit,money)
    else:
      print('''Sorry, %ss are out of stock
'''%(fruit))
      ask_fruit(money)
  else:
    print('''Sorry, we don\'t have that, look at the menu.
    ''')
    ask_fruit(money)

def ask_amount(fruit,money):
  amount=int(input('''How many %ss do you want?
'''%(fruit)))
  print()
  if amount<=0:
    print('''At least buy one.
  ''')
    ask_amount(fruit,money)
  elif stock[fruit]>=amount:
    sell(fruit,amount,money)
  else:
    print('''Sorry, we don\'t have that many %ss.
    '''%(fruit))
    ask_amount(fruit,money)

def sell(fruit,amount,money):
  cost=prices[fruit]*amount
  confirmation=input('''Are you sure? That will be $%s.
-Yes
-No
'''%(cost)).lower()
  print()
  if confirmation=='yes':
    money-=cost
    print('''Thank you for the business!
''')
    stock[fruit]=stock[fruit]-amount
    ask_again()
  elif confirmation=='no':
    ask_fruit()
  else:
    print('''Answer me.
''')
    sell(fruit,amount,money)

def ask_again():
  answer=input('''Do you want anything else?
-Yes
-No
''').lower()
  print()
  if answer=='yes':
    menu()
    ask_fruit(money)
  elif answer=='no':
    print('Okay, bye.')
  else:
    print('Answer me.')
    ask_again()

money=117
menu()
ask_fruit(money)
8 голосов | спросил zoklev 1 PM00000040000003731 2018, 16:44:37

2 ответа


2

Хорошая работа!

Я бы предпочел использовать f-строки, которые более читабельны.

# from
print('Price: $%s'%(prices[fruit]))
# to
print(f'Price: ${prices[fruit]}')

Использование новых строк ('\ n') избавит вас от использования этого большого количества отпечатков и сделает ваш код более читаемым.

Четыре пробела (вместо двух) для отступов также отображали бы вашу осведомленность о соглашениях стиля PEP8

Try /Except структура (ошибки ловушки определенного типа) более предпочтительна и рассматривается как метод Pythonic (см. https://docs.quantifiedcode.com/python-anti -patterns /правильностью /not_using_get_to_return_a_default_value_from_a_dictionary.html

ответил Yeldos Balgabekov 1 PM00000070000000731 2018, 19:52:07
2

Чтобы объяснить мою мысль выше, нужен единственный цикл, который вам нужен, в entry_point. Поскольку я изменил структуру данных, я подумал, что лучше всего включить некоторые дополнительные примеры кода в обработку запаса. В этом коде отсутствует функция make_a_sale (комбинация вашего ask_quantity и ask_amount).
Не пытайтесь использовать этот код в качестве вашей программы, но извлекайте из него часть логики, чтобы помочь своему собственному коду.

def menu(stock, money):
    item_length = 0
    for fruit in stock:
        item_length = len(fruit) if len(fruit) > item_length else item_length
    item_length += 1

    print(f"\n{'Fruit':<{item_length}} {'Price':<8} {'Quantity':<5}")

    for name, details in stock.items():
        qty, price = details
        print(f"{name.capitalize():<{item_length}} ${details[price]:<8.2f} {details[qty]:^5}")

    print(f"\nYou have: ${money}")


def sell(stock, selection, quantity, money):
    cost = quantity * stock[selection]["price"]
    confirmation = input(f"Are you sure? That will be ${cost}. [Yes/No] ")
    if "yes" == confirmation.lower():
        money -= cost
        stock[selection]["qty"] -= quantity
        print("Thank you for the business!\n")
        return stock, money


if __name__ == "__main__":
    stock = dict(banana=dict(qty=6, price=4),
                 apple=dict(qty=0, price=2),
                 orange=dict(qty=32, price=1.5),
                 pear=dict(qty=15, price=3),
                 )
    money = 115
    welcome()
    while True:
        menu(stock, money)
        selection, quantity = make_a_sale(stock, money)
        if selection:
            stock, money = sell(stock, selection, quantity, money)

Надеюсь, это поможет!

ответил C. Harley 3 AM00000040000001231 2018, 04:06:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132