Как сделать переменную входной, как буквальную запись (например: # 10 не должно быть строкой) - PullRequest
0 голосов
/ 04 мая 2018

Может ли кто-нибудь помочь мне с ниже:

Я пытаюсь передать буквальный ввод, например, если я введу 10, функция должна быть передана с int, но в приведенном ниже случае она все еще передает строку.

Может кто-нибудь отредактировать это, чтобы код передавался как введенный тип?

def str_len(s):
    if type(s) == int:
        return "You entered Integer, Please enter strings only to get length"
    elif type(s) == float:
        return "You entered float, Please enter strings only to get length"
    else:
        return len(s)

string = input("Enter a string to find its length: ")
print(str_len(string))

1 Ответ

0 голосов
/ 04 мая 2018

Из документации input:

читает строку из ввода, преобразует ее в строку (удаляя завершающий символ новой строки) и возвращает

Всякий раз, когда вы берете ввод, это будет строка, поэтому type(s) не даст вам желаемого результата.

Однако вы можете обойти это, используя блок try/except, чтобы попытаться привести к определенному типу, и если не возникает ошибок, вы знаете правильный тип для того, что содержит строка.

def try_as_type(t, v):
  try:
    t(v)
    return True
  except:
    return False

def check(s):
  if try_as_type(int, s):
    return "You entered an integer"
  elif try_as_type(float, s):
    return "You entered a float"
  else:
    return len(s)

Примеры прогонов:

>>> Please enter a value:  10
You entered an integer

>>> Please enter a value:  1.43
You entered a float

>>> Please enter a value:  hello there
11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...