Не превращается в поплавок:
def floaty(s):
try:
k = 0
for elem in s:
if 0 <= float(elem) <= 1:
k += 1
if k == len(s):
for elem in s:
elem = float(elem)
return s
else:
return None
except ValueError:
return None
тип элементов списка [0.1, 0.2] по-прежнему str, а не float
for elem in s:
elem = float(elem)
return s
почему это не работает?
Функция имеет return s
, то есть то же самое значение, которое было передано. Так что, конечно, это все еще строка.
Вместо
for elem in s:
elem = float(elem)
делать:
s = [float(x) for x in s]
Что представляет собой понимание списка и создаст новый список float
версий для каждого элемента в списке.
Python не поддерживает такое переопределение переменных. Таким образом, вы не можете переопределить переменную, которую используете в цикле, в данном случае это elem
. Я предлагаю создать другой список и вернуть его вместо возврата старого.
это должен быть комментарий, а не ответ
Потому что переназначение
elem
не влияет на ваш список. Переменные Python так не работают. Используйтеs = [float(elem) for elem in s]
.