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]
|
19.10.2023 17:56