Почему не работает функция return float(value) (не возвращает переменную другого типа)?

Помогите, пожалуйста! Хочу функцию, изменяющую тип переменной, получаемой через input в формате str на тип float.

def num (x):
    while isinstance(x, str):
        try:
            return float(x)
        except ValueError:
            input ("one more time")
            break 

a = input ("Go: ")
num (a)
print (a)
print (type (a))

По итогу, несмотря на то, что я ставлю return float(x), вывод при помощи print (type (a)) показывает, что тип данных введенной пользователем строки все равно остается str. Подскажите , как реализовать задамунное и возможно ли это?


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

Автор решения: Евгений

Мне такой вариант не подходит, нужно чтобы именно функция num конвертировала тип данных во флоат, а если пользователь введет неконвертируемые данные, например, текст, то вылезал бы input ("one more time"), для того, чтобы он ввел именно число

Решение с рекурсией

def num(x):
  try:
    return float(x)
  except:
    return num(input('one more time '))

a = 2
b = '3'
c = '3aw3'

print(num(a))
print(num(b))
print(num(c))

Результат:

2.0 # вывод float(2) - успех
3.0 # вывод float('3') - успех
one more time 5da2 # вывод float('3aw3') - неудача. Повторный ввод
one more time 54d # вывод float('5da2') - неудача. Повторный ввод
one more time 4 # вывод float('54d') - неудача. Повторный ввод
4.0 # вывод float('4') - успех

Решение без рекурсии

def numinput(*args):
  try:
    return float(input(*args))
  except:
    while 1:
      try:
        return float(input("one more time "))
      except:
        pass

a = numinput("Введите число ")
print(a)

Результат:

Введите число 412в2
one more time -3
-3.0
→ Ссылка