Оптимизируйте код python

введите сюда описание изображения

year = ['Крыса', 'Буйвол', 'Тигр', 'Кролик(Кот)', 'Дракон', 'Змея', 'Лошадь', 'Овца', 'Обезьяна', 'Петух', 'Собака', 'Свинья']
color = {0: 'Белый (Металл)', 1: 'Белый (Металл)', 2: 'Черный (Вода)', 3: 'Черный (Вода)', 4: 'Голубой (Дерево)', 5: 'Голубой (Дерево)', 6: 'Красный (Огонь)', 7: 'Красный (Огонь)', 8: 'Желтый (Земля)', 9: 'Желтый (Земля)'}
year_new = int(input())
k = year_new % 10
yk = abs((year_new - 2020) % 12)
st = color[k]
if yk in [0, 5, 6, 7, 8, 10, 11] :
    st = st.replace('ый', 'ая').replace('ой', 'ая')
print(st + ' ' + year[yk])

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


Ответы (1 шт):

Автор решения: Zhihar
years = ['Крыса', 'Буйвол', 'Тигр', 'Кролик(Кот)', 'Дракон', 'Змея', 'Лошадь', 'Овца', 'Обезьяна', 'Петух', 'Собака', 'Свинья']
colors = ['Белый (Металл)', 'Белый (Металл)', 'Черный (Вода)', 'Черный (Вода)', 'Голубой (Дерево)', 'Голубой (Дерево)', 'Красный (Огонь)', 'Красный (Огонь)', 'Желтый (Земля)', 'Желтый (Земля)']
genders = [False, True, True, True, True, False, False, False, False, True, False, False]

year = int(input())

print(colors[year % 10].replace('ый', 'ый' if genders[(year - 2020) % len(genders)] else 'ая').replace('ой', 'ой' if genders[(year - 2020) % len(genders)] else 'ая'), years[(year - 2020) % len(years)])

можно чуть покороче:

print(colors[year % 10].replace('ый', ('ая', 'ый')[genders[(year - 2020) % 12]]).replace('ой', ('ая', 'ой')[genders[(year - 2020) % 12]]), years[(year - 2020) % 12])

можно еще чуть покороче, но тогда надо будет изменить основные списки:

years = ['Обезьяна', 'Петух', 'Собака', 'Свинья', 'Крыса', 'Буйвол', 'Тигр', 'Кролик(Кот)', 'Дракон', 'Змея', 'Лошадь', 'Овца',]
colors = ['Белый (Металл)', 'Белый (Металл)', 'Черный (Вода)', 'Черный (Вода)', 'Голубой (Дерево)', 'Голубой (Дерево)', 'Красный (Огонь)', 'Красный (Огонь)', 'Желтый (Земля)', 'Желтый (Земля)']
genders = [False, True, False, False, False, True, True, True, True, False, False, False,]

year = int(input())

print(colors[year % 10].replace('ый', ('ая', 'ый')[genders[year % 12]]).replace('ой', ('ая', 'ой')[genders[year % 12]]), years[year % 12])
→ Ссылка