Предизвикателства > Полиморфичен негативизъм > Решения > Решението на Пламена Стоянова

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

5 успешни теста
0 неуспешни теста
Код
Скрий всички коментари

 1def no_it_isnt(list):
 2    new_list = []
 3    for argument in list:
 4        if type(argument) in (int, float):
 5                new_list.append(-argument)
 6        elif type(argument) == str:
 7                new_list.append(argument[::-1])
 8        elif type(argument) == bool:
 9                new_list.append(not argument)
10    return new_list[::-1]
11    # list.reverse() can also be used

.....
----------------------------------------------------------------------
Ran 5 tests in 0.000s

OK

Дискусия
Георги Кунчев
20.10.2023 00:20

`match` може да мачва по тип, но тогава се подава самият обект, а не `type(обект)`. Стойностите в кейсовете трябва да са във формата на функция. ``` def no_it_isnt(elements): new_list = [] for argument in elements: match argument: case bool(): new_list.append(not argument) case int() | float(): new_list.append(-argument) case str(): new_list.append(argument[::-1]) return new_list[::-1] ``` Важно е, че този код работи на база `isinstance`, което, както говорихме днес, ще върне `True` за булева стойност, която сравняваш към `int`, така че е задължително първо да провериш `bool` и чак после `int`. Не мисля, че има начин да използваш `type()` като таргет за мачване. Един workaround е да ползваш името на типа, но това е отвратително: ``` def no_it_isnt(elements): new_list = [] for argument in elements: match type(argument).__name__: case int.__name__ | float.__name__: new_list.append(-argument) case bool.__name__: new_list.append(not argument) case str.__name__: new_list.append(argument[::-1]) return new_list[::-1] ```
Пламена Стоянова
19.10.2023 20:17

Въпрос за 100 000: "Защо ми дава грешка във втория кейс?" def no_it_isnt(list): new_list = [] # list.reverse() can also be used for argument in list: match type(argument): case (int, float): new_list.append(-argument) case (str): new_list.append(argument[::-1]) case (bool): new_list.append(not argument) return new_list[::-1]
История
Това решение има само една версия.