Программа Python не должна вычислять длину с плавающей запятой, только строку

Я создаю функцию в Python для вычисления длины строки, сообщая пользователю, что Int и float не являются строкой. Секция Int работает, однако функция не учитывает число с плавающей запятой, и я не знаю, почему.

Я использую Visual Studio Code в Windows 10. Python 3.7.0 [MSC v.1914 64 бит (AMD64)] на win32

def length_string(mystring):
  try:
    if type(int(mystring)) == int:
       return f"Hello, this is not {mystring} a string"
    elif type(mystring) == float:
       return f"Hello, this is not {mystring} a string"
    elif type(str(mystring)) == str:
       return len(mystring)
  except:
    return len(mystring)

string_name = input("Пожалуйста, введите значение: ") print(length_string(string_name))`

Result String Hello: 5 Result Int 555 = Hello, это не 555 строка Result Float 555.0 = 5, но должно быть таким же, как int.


person Piton    schedule 07.09.2018    source источник
comment
string_name = input(Пожалуйста, введите ваше значение:) print(length_string(string_name))   -  person Piton    schedule 07.09.2018
comment
Число с плавающей запятой будет округлено на int и поэтому никогда не пройдет дальше вашего первого if.   -  person Chris Mueller    schedule 07.09.2018
comment
type(int(mystring)) == int всегда либо True, либо вызывает ValueError — невозможно достичь ни одного из следующих elif. После явного преобразования строки в int нет особого смысла проверять, является ли int int!   -  person jasonharper    schedule 07.09.2018
comment
Я проверил вашу программу, и она не делает то, что вы говорите. Ввод 555.5 по-прежнему приводит к выводу Hello, это не 555.0 строка   -  person Simon    schedule 08.09.2018


Ответы (2)


Float вызывает ошибку значения в первом блоке if. Поскольку вы возвращаете длину только в том случае, если переменная является строкой, вы можете сделать это более эффективно с помощью одиночного сравнения.

def length_string(mystring):
     if isinstance(mystring, basestring):
          return len(mystring);
     else:
          return f"Hello, {mystring} is not a string";
person Dunura Dulshan    schedule 07.09.2018

Если преобразование строки int(mystring) выполнено успешно, тип всегда является строкой, в противном случае выполняется блок execpt, поэтому два блока elif никогда не выполняются.

def length_string(mystring):
    try:
        float(mystring)
    except ValueError:
        return f"Hello, this is not {mystring} a string"
    return len(mystring)
person Daniel    schedule 07.09.2018