Форум сайта python.su
Добрый день! Помогите решить задачу:
Клиент приходит в кондитерскую. Он хочет приобрести один или несколько видов продукции, а также узнать её состав. Реализуйте кондитерскую. У вас есть словарь, где ключ – название продукции (торт, пирожное, маффин и т.д.). Значение – список, который содержит состав, цену (за 100гр) и кол-во (в граммах). Предложите выбор: 1. Если человек хочет посмотреть описание: название – описание 2. Если человек хочет посмотреть цену: название – цена. 3. Если человек хочет посмотреть количество: название – количество. 4. Всю информацию. 5. Приступить к покупке: С клавиатуры вводите название торта и его кол-во. n – выход из программы. Посчитать цену выбранных товаров и сколько товаров осталось в изначальном списке 6. До свидания.
Офлайн
и что у вас уже есть?
Офлайн
AD0DE412…желание получить готовый отлаженный код на 5-ку
и что у вас уже есть?
Офлайн
0.0001 BTC
Отредактировано AD0DE412 (Июнь 8, 2022 21:33:09)
Офлайн
Казалось бы, не такая уж и сложная задача по описанию, но с@ка, я два вечера угробил на реализацию. Чукча конечно не бухгалтер, над расчётами и правда посмеяться можно, как лучше я не знаю, но в целом всё работает, даже не падает. На перёд, в своё оправдание скажу дефолтное: “я художник, я так вижу”.
goods = {'торт': ['мука, яйцо, сливки, шоколад', 150, 2000], 'пирожное': ['тесто слоеное, молоко, сливочное масло', 120, 1500], 'маффин': ['порошок яичный, порошок какао, ванилин', 200, 1000]} my_cart = {} def goods_demo(demo_type=0, product=None): p = 'Товар:' s = 'Состав: ' c = 'Цена за 100 гр.: ' k = 'Количество (г): ' if demo_type == 0: for i in goods: print(i) return elif demo_type == 1: return f'{s}{goods[product][0]}' elif demo_type == 2: return f'{c}{goods[product][1]}' elif demo_type == 3: return f'{k}{goods[product][2]}' elif demo_type == 4: return f'{s}{goods[product][0]}\n' \ f'{c}{goods[product][1]}\n' \ f'{k}{goods[product][2]}' elif demo_type == 6: print('\nОстаток кондитерской:') for i in goods: print(f'{p} "{i}" {k}{goods[i][2]}') return def ask_action_type(product): while True: try: action = int(input('Что вы хотели бы узнать о товаре?\n ' '(1)-состав, (2)-цена, (3)-количество, ' '(4)-вся инф., (5)-покупка\n>>> ')) if action == 5: return action elif 1 <= action <= 4: return goods_demo(action, product) except: print('Введите число, сопоставленное с действием.') continue def ask_continue(): while True: s = input('Продолжить покупки? д|н\n>>> ').lower() if s == 'д': return True elif s == 'н': return False def add_to_cart(product, price, weight): if product in my_cart.keys(): my_cart[product][0] += price my_cart[product][1] += weight else: my_cart.update({product: [price, weight]}) def buy(product): while True: try: weight = abs(int(input('Сколько грамм купить?\n>>> '))) except: print('Нужно ввести целое число.') continue if goods[product][2] - weight >= 0: if weight > 0: goods[product][2] -= weight price = goods[product][1] * (weight * 0.01) return add_to_cart(product, price, weight) else: print('Нужно число больше нуля.') continue else: print(f'На складе нет такого количества! ' f'В наличии: {goods[product][2]}') continue def show_total(): p = 'Товар:' o = 'Общая стоимость товаров: ' w = 'Вес в граммах: ' summ = 0 print('В вашей корзине: ') for i in my_cart: summ += my_cart[i][0] print(f'{p} "{i}" {w}{my_cart[i][1]}') print(f'{o}{summ} у.е.') if goods != {}: return goods_demo(6) def check_goods(): global goods new = goods.copy() for i in goods: if goods[i][2] == 0: new.pop(i) goods = new.copy() if goods == {}: print('Все товары закончились!') return False else: return True def ask_product(): while True: product = input('Какой из товаров вас интересует?\n>>> ').lower() if product in goods.keys(): return product else: print('Такого товара нет, введите товар из списка выше.') continue def main(): print('Добро пожаловать в кондитерскую!') run = True while run: if check_goods(): print('В продаже имеется:') goods_demo() user_choice = ask_product() user_interest = ask_action_type(user_choice) if user_interest == 5: buy(user_choice) else: print(f'Товар: "{user_choice}"\n{user_interest}') run = ask_continue() else: break show_total() print('До свидания.') if __name__ == '__main__': main()
Офлайн
Palrom
Здесь есть вообще все ошибки проектирования и алгоритмирования, вообще все,
на вашем материале можно докторскую защитить - как ни в коем случае нельзя писать код
апдейт
я более внимательно еще посмотрел…
не чувак, это прям совсем говно
если хочешь, я разберу по строкам, но не в пятницу вечером
ПС. Ты извини за грубость выражения мысли, но смысл он важнее формы
Отредактировано FishHook (Июнь 11, 2022 00:21:43)
Офлайн
FishHookСпасибо, старался) Если честно, выложил, просто потому что жалко было вложенный труд (по натягиванию совы на глобус) отправить сразу в мусор. Я изначально начал не с того. Программа была более менее стройной до тех пор, пока я не начал примазывать к ней функцию покупки..
не чувак, это прям совсем говно
FishHookЯ тоже так считаю. Переосмыслю на днях, переделаю всё.
смысл он важнее формы
Офлайн
PalromВыкладывай всегда, не ведись на код. Практически всегда чудесное творение, которое жалко выложить, оказывается говнокодом на каком-то уровне развития. Если не будешь выкладывать, тебе никто на ошибки или просто на какую-то тупость не укажет и ты её не будешь исправлять у себя и будешь долго-долго писать с ней и она будет у тебя во всех твоих кодах, пока ты сам не перейдёшь на следующий уровень и на нём уже не заметишь, что это тупость какая-то. Отказываться от тупостей очень сложно, особенно, если ты ими пользуешься уже несколько лет. Часто приходится себя полностью перестраивать. Прямо фундаментально, бывает.
Если честно, выложил, просто потому что жалко было вложенный труд
Отредактировано py.user.next (Июнь 11, 2022 06:24:41)
Офлайн
FishHook
если хочешь, я разберу по строкам
py.user.nextНу вообще, если не брезгуете и располагаете временем, я бы конечно не отказался от какого никакого код-ревью.. Буду рад любым замечаниям.
тебе никто на ошибки или просто на какую-то тупость не укажет и ты её не будешь исправлять
Офлайн
PalromВидно, что ты программируешь снизу вверх. Ну, типа пишешь функцию, потом думаешь “а что для неё надо?” и начинаешь писать ещё функцию, которая вызывает эту функцию. Потом снова и снова так делаешь. Ну, и чем больше ты так делаешь, раз за разом, тем больше оно становится похоже на свалку, что мы и наблюдаем в твоём итоговом коде. Свалка и свалка. Нет чёткой такой конструкции, где всё во всём понятно.
я бы конечно не отказался от какого никакого код-ревью
Отредактировано py.user.next (Июнь 11, 2022 11:59:36)
Офлайн