Помогите разобраться в задачке с декоратором

vladi

Новичок
Пользователь
Янв 16, 2022
9
1
3
Уважаемые форумчане помогите в решении задачи, нужно использовать декоратор
Есть 3 типа запросов на отпуск:
1. Vacation
2. Sick leave
3. Day off
Нужно написать программу, которая предложит вам выбрать один из 3 видов отпуска, после ввести Имя Фамилию, дату начала отпуска и дату конца.
В консоли должна появиться заявка на отпуск:
Screenshot_1.png
Задачу я решил но это больше работа со строками чем с декоратором, подскажите как переписать код.

Python:
vacation = int(input(' \n1. Vacation \n2. Sick Leave \n3. Day Off \nSelect type of vacation: '))
name = input('Enter your first and last name: ')
from_date = input('Vacation start date: ')
to_date = input('Vacation end date: ')

def decorate(func):
    def wrapper(value):
        print('\nTitle \nCEO Red Bull Inc \nMr. John Bigbull')
        func(value)
    return wrapper

@decorate
def job_func(value):
    if vacation == 1:
        print(f'\nVacation Type: Vacation Pattern \nHi John,\nI need the paid vacations from {from_date} to {to_date}'
              f'\n{name}')
    elif vacation == 2:
        print(f'\nVacation Type: Sick Leave Pattern \nHi John,\nI need the paid sick leave {from_date} to {to_date}'
              f'\n{name}')
    elif vacation == 3:
        print(f'\nVacation Type: Day Off Pattern \nHi John,\nI need the paid day off {from_date} to {to_date}'
              f'\n{name}')
    else:
        print('You entered the wrong number')

job_func('finish')
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
929
207
43
20
Москва
Как-нибудь так например:
Python:
def decorate(func):
    def wrapper():
        vacation, from_date, to_date, name = func()
        print('\nTitle \nCEO Red Bull Inc \nMr. John Bigbull')
        print(
            f'\nVacation Type: {vacation} \nHi John,\nI need the paid vacations from {from_date} to {to_date}\n{name}')
    return wrapper


@decorate
def Vacation():
    return ('Vacation', *get_info())


@decorate
def SickLeave():
    return ('Sick Leave', *get_info())


@decorate
def DayOff():
    return ('Day Off', *get_info())


def get_info():
    name = input('Enter your first and last name: ')
    from_date = input('Vacation start date: ')
    to_date = input('Vacation end date: ')
    return (from_date, to_date, name)


vacation = int(
    input(' \n1. Vacation \n2. Sick Leave \n3. Day Off \nSelect type of vacation: '))
(Vacation, DayOff, SickLeave)[vacation-1]()
 
  • Мне нравится
Реакции: vladi

vladi

Новичок
Пользователь
Янв 16, 2022
9
1
3
Как-нибудь так например:
Python:
def decorate(func):
    def wrapper():
        vacation, from_date, to_date, name = func()
        print('\nTitle \nCEO Red Bull Inc \nMr. John Bigbull')
        print(
            f'\nVacation Type: {vacation} \nHi John,\nI need the paid vacations from {from_date} to {to_date}\n{name}')
    return wrapper


@decorate
def Vacation():
    return ('Vacation', *get_info())


@decorate
def SickLeave():
    return ('Sick Leave', *get_info())


@decorate
def DayOff():
    return ('Day Off', *get_info())


def get_info():
    name = input('Enter your first and last name: ')
    from_date = input('Vacation start date: ')
    to_date = input('Vacation end date: ')
    return (from_date, to_date, name)


vacation = int(
    input(' \n1. Vacation \n2. Sick Leave \n3. Day Off \nSelect type of vacation: '))
(Vacation, DayOff, SickLeave)[vacation-1]()
Большое Вам спасибо!
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
Декораторы — это, по сути, "обёртки", которые дают нам возможность изменить поведение функции, не изменяя её код.
как это вяжется с
Есть 3 типа запросов на отпуск:
1. Vacation
2. Sick leave
3. Day off
Нужно написать программу, которая предложит вам выбрать один из 3 видов отпуска, после ввести Имя Фамилию, дату начала отпуска и дату конца
не понятно, или это что-то из школьного\лицейского?
 

vladi

Новичок
Пользователь
Янв 16, 2022
9
1
3
Декораторы — это, по сути, "обёртки", которые дают нам возможность изменить поведение функции, не изменяя её код.
как это вяжется с

не понятно, или это что-то из школьного\лицейского?
То что декоратор это обертка я понял теорию читал, практики нет я не разобрался как задачу разбить на функции и применить к ним декоратор, спасибо модератору помог с программой, сижу разбираюсь
 

vladi

Новичок
Пользователь
Янв 16, 2022
9
1
3
Извини, утром пропустил эту ошибку, я в первом посте забыл это упомянуть, после paid вместо vacations должно подставляться то что выбирает пользователь, vacations, sick leave, day off, не подскажешь как это реализовать?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
929
207
43
20
Москва
Извини, утром пропустил эту ошибку, я в первом посте забыл это упомянуть, после paid вместо vacations должно подставляться то что выбирает пользователь, vacations, sick leave, day off, не подскажешь как это реализовать?
Да все так-же, просто создать переменную vacation, а в строке обернуть её в скобки фигурные скобки
(в моей версии кода в 6 строке можно просто обернуть, переменная уже есть)
 

vladi

Новичок
Пользователь
Янв 16, 2022
9
1
3
Да все так-же, просто создать переменную vacation, а в строке обернуть её в скобки фигурные скобки
(в моей версии кода в 6 строке можно просто обернуть, переменная уже есть)
переменная vacation хранит не тот текст она хранит Vacation Pattern, Sick Leave Pattern, Day Off Pattern, а должно передавать vacations, sick leave, day off все с маленькой буквы без слова Pattern
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
929
207
43
20
Москва
Python:
vacantion.lower().removesuffix(' pattern')

Sick Leave Pattern -> sick leave
и.т.д
 

vladi

Новичок
Пользователь
Янв 16, 2022
9
1
3
Python:
vacantion.lower().removesuffix(' pattern')

Sick Leave Pattern -> sick leave
и.т.д
большое спасибо за помощь!
 
Последнее редактирование:
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов