Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 8, 2022 13:28:03

al76ex
Зарегистрирован: 2022-06-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Задачи

Добрый день! Помогите решить задачу:
Клиент приходит в кондитерскую. Он хочет приобрести один или несколько видов продукции, а также узнать её состав. Реализуйте кондитерскую. У вас есть словарь, где ключ – название продукции (торт, пирожное, маффин и т.д.). Значение – список, который содержит состав, цену (за 100гр) и кол-во (в граммах). Предложите выбор: 1. Если человек хочет посмотреть описание: название – описание 2. Если человек хочет посмотреть цену: название – цена. 3. Если человек хочет посмотреть количество: название – количество. 4. Всю информацию. 5. Приступить к покупке: С клавиатуры вводите название торта и его кол-во. n – выход из программы. Посчитать цену выбранных товаров и сколько товаров осталось в изначальном списке 6. До свидания.

Офлайн

#2 Июнь 8, 2022 13:31:54

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Задачи

и что у вас уже есть?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#3 Июнь 8, 2022 21:06:55

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Задачи

AD0DE412
и что у вас уже есть?
…желание получить готовый отлаженный код на 5-ку



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Июнь 8, 2022 21:29:57

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Задачи

0.0001 BTC



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Июнь 8, 2022 21:33:09)

Офлайн

#5 Июнь 10, 2022 23:31:45

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Задачи

Казалось бы, не такая уж и сложная задача по описанию, но с@ка, я два вечера угробил на реализацию. Чукча конечно не бухгалтер, над расчётами и правда посмеяться можно, как лучше я не знаю, но в целом всё работает, даже не падает. На перёд, в своё оправдание скажу дефолтное: “я художник, я так вижу”.

  
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()

Офлайн

#6 Июнь 11, 2022 00:13:00

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Задачи

Palrom
Здесь есть вообще все ошибки проектирования и алгоритмирования, вообще все,
на вашем материале можно докторскую защитить - как ни в коем случае нельзя писать код

апдейт
я более внимательно еще посмотрел…
не чувак, это прям совсем говно
если хочешь, я разберу по строкам, но не в пятницу вечером

ПС. Ты извини за грубость выражения мысли, но смысл он важнее формы



Отредактировано FishHook (Июнь 11, 2022 00:21:43)

Офлайн

#7 Июнь 11, 2022 00:35:53

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Задачи

FishHook
не чувак, это прям совсем говно
Спасибо, старался) Если честно, выложил, просто потому что жалко было вложенный труд (по натягиванию совы на глобус) отправить сразу в мусор. Я изначально начал не с того. Программа была более менее стройной до тех пор, пока я не начал примазывать к ней функцию покупки..
FishHook
смысл он важнее формы
Я тоже так считаю. Переосмыслю на днях, переделаю всё.

Офлайн

#8 Июнь 11, 2022 06:20:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Задачи

Palrom
Если честно, выложил, просто потому что жалко было вложенный труд
Выкладывай всегда, не ведись на код. Практически всегда чудесное творение, которое жалко выложить, оказывается говнокодом на каком-то уровне развития. Если не будешь выкладывать, тебе никто на ошибки или просто на какую-то тупость не укажет и ты её не будешь исправлять у себя и будешь долго-долго писать с ней и она будет у тебя во всех твоих кодах, пока ты сам не перейдёшь на следующий уровень и на нём уже не заметишь, что это тупость какая-то. Отказываться от тупостей очень сложно, особенно, если ты ими пользуешься уже несколько лет. Часто приходится себя полностью перестраивать. Прямо фундаментально, бывает.



Отредактировано py.user.next (Июнь 11, 2022 06:24:41)

Офлайн

#9 Июнь 11, 2022 08:59:11

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Задачи

FishHook
если хочешь, я разберу по строкам
py.user.next
тебе никто на ошибки или просто на какую-то тупость не укажет и ты её не будешь исправлять
Ну вообще, если не брезгуете и располагаете временем, я бы конечно не отказался от какого никакого код-ревью.. Буду рад любым замечаниям.

Офлайн

#10 Июнь 11, 2022 11:57:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Задачи

Palrom
я бы конечно не отказался от какого никакого код-ревью
Видно, что ты программируешь снизу вверх. Ну, типа пишешь функцию, потом думаешь “а что для неё надо?” и начинаешь писать ещё функцию, которая вызывает эту функцию. Потом снова и снова так делаешь. Ну, и чем больше ты так делаешь, раз за разом, тем больше оно становится похоже на свалку, что мы и наблюдаем в твоём итоговом коде. Свалка и свалка. Нет чёткой такой конструкции, где всё во всём понятно.

Надо программировать сверху вниз. Тогда эта штука вся будет вырисовываться точно и определённо, не будет ничего лишнего.
Тут писал подборку материалов.
Тут выполнил один пример от и до.

По синтаксису питона и по принятым правилам написания кода FishHook тебе будет писать. Много у тебя всяких непитонячих приёмов, которые в питоне просто не используются так, как в других языках. Типа там безымянный except и подобные вещи.

Вообще, очень бросается в глаза, что у тебя функции такие маленькие, а в них уже можно запутаться. Типа, есть клубок ниток, который можно размотать в одну нитку. А есть борода из ниток, которая тоже может быть одной ниткой по сути, но при этом её проще разрезать всю, чем разматывать. Вот такой код у тебя - не красивый маленький десятисантиметровый клубок, а борода на четыре квадратных метра. А всё дело в том, кто это всё смотать пытался и по какому принципу - по всем правилам или просто побыстрее.



Отредактировано py.user.next (Июнь 11, 2022 11:59:36)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version