Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 1, 2016 20:51:44

serhii123
Зарегистрирован: 2016-11-01
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите пожалуста решить задачу/функц без if

Как можна написать функцию месяц(), который я принимаю в качестве аргумента число от 1 до 12, а на выходе возвращает первые три буквы месяца, соответствующего числу.
Например, месяц(2) возвращает “фев”
Как можно решить задаче, НЕ использовать условные операторы if для перечисления месяцев.

Офлайн

#2 Ноя. 1, 2016 20:56:11

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Помогите пожалуста решить задачу/функц без if

Офлайн

#3 Ноя. 2, 2016 09:35:31

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

Помогите пожалуста решить задачу/функц без if

Задолбал спамить



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

Офлайн

#4 Ноя. 2, 2016 09:58:23

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Помогите пожалуста решить задачу/функц без if

 def moth(digit):
    moths = {1: 'Янв',
             2: 'Фев',
             3: 'Мрт',
             4: 'Апр',
             5: 'Май',
             6: 'Июн',
             7: 'Июл',
             8: 'Авг',
             9: 'Снт',
            10: 'Окт',
            11: 'Нбр',
            12: 'Дкб'
             }
    return moths[digit]
print(moth(int(input())))

Офлайн

#5 Ноя. 2, 2016 10:08:25

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

Помогите пожалуста решить задачу/функц без if

  
>>> def get_month(n):
...     months = ('Янв', 'Фев', 'Мар',
...               'Апр', 'Май', 'Июн',
...               'Июл', 'Авг', 'Сен',
...               'Окт', 'Ноя', 'Дек')
...     return months[n - 1]
... 
>>> get_month(1)
'Янв'
>>> get_month(12)
'Дек'
>>>



Офлайн

#6 Ноя. 2, 2016 10:11:35

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Помогите пожалуста решить задачу/функц без if

Проще

 #
find = lambda pos: "ЯнвФевМарАпрМайИюнИюлАвгСенОктНояДек"[(pos - 1) * 3:pos * 3]
print(find(2))

Отредактировано 4kpt_IV (Ноя. 2, 2016 10:13:03)

Офлайн

#7 Ноя. 2, 2016 10:15:53

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

Помогите пожалуста решить задачу/функц без if

Гггггг 4kpt_IV ЖЖОТЕ СУДАРЬ!



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

Офлайн

#8 Ноя. 2, 2016 14:18:21

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

Помогите пожалуста решить задачу/функц без if

4kpt_IV
Проще
А полные названия? Необязательно полные, просто произвольной длины.



Офлайн

#9 Ноя. 2, 2016 17:05:36

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Помогите пожалуста решить задачу/функц без if

serhii123
Как можна написать функцию месяц(), который я принимаю в качестве аргумента число от 1 до 12, а на выходе возвращает первые три буквы месяца, соответствующего числу.

Офлайн

#10 Ноя. 3, 2016 05:03:12

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

Помогите пожалуста решить задачу/функц без if

Есть, короче, такое понятие “сила предусловия и постусловия”. Предусловие должно быть максимально ослаблено, тогда как постусловие должно быть максимально усилено. От этого зависит “применимость функции” - число задач, для решения которых эту функцию можно применить.

Вот, например, возьмём функцию zip()

  
>>> list(zip('abc', 'def'))
[('a', 'd'), ('b', 'e'), ('c', 'f')]
>>> list(zip('abc', 'def', 'ghi'))
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
>>> list(zip('abc', 'def', 'ghi', 'jkl'))
[('a', 'd', 'g', 'j'), ('b', 'e', 'h', 'k'), ('c', 'f', 'i', 'l')]
>>>
Её обычно применяют для спаривания элементов (чаще всего). Если бы она была с сильным предусловием, то её описание звучало бы как “функция для генерации пар элементов из двух последовательностей”. Вроде, всё правильно и на практике она так и применяется. Но когда нам нужно генерировать не пары, а тройки элементов, то такую функцию с сильным предусловием (фиксацией именно на парах) мы не можем применить и должны искать другую функцию для страивания элементов.
Но благодаря тому, что у функции zip() слабое предусловие “функция для генерации энок элементов из любого числа последовательностей”, мы можем применить функцию zip() и к двум последовательностям, и к трём, и к четырём и вообще к любому числу, генеря любые энки элементов. Это высокая применимость функции - функция решает множество задач, а не одну.

Чем больше у тебя высоко применимых функций, тем меньше тебе нужно писать функций потом, потому что при возникновении задачи она может быть решена какой-то функцией, которая вообще для неё не писалась.

Поэтому вот эта формулировка
serhii123
Как можна написать функцию месяц(), который я принимаю в качестве аргумента число от 1 до 12, а на выходе возвращает первые три буквы месяца, соответствующего числу.
хоть и является конкретной (сильным предусловием), но это не значит, что надо писать такую же функцию (с сильным предусловием). Надо написать функцию, которая решит и эту задачу, и множество других задач. И для этого надо в этой формулировке ослабить всю конкретику.

Было так
serhii123
Как можна написать функцию месяц(), который я принимаю в качестве аргумента число от 1 до 12, а на выходе возвращает первые три буквы месяца, соответствующего числу.

А стало так
serhii123
Как можно написать функцию имя(), которая принимает в качестве аргумента число от начала до конца, а на выходе возвращает выбранную строку, соответствующую числу.

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


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



Отредактировано py.user.next (Ноя. 3, 2016 05:12:36)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version