【问题标题】:How to check if input is float or int?如何检查输入是浮点数还是整数?
【发布时间】:2020-05-05 13:10:39
【问题描述】:

我想做一个简单的转换器,打印十六进制的浮点数或整数。我的代码是:

number = input("Please input your number...... \n") 
if type(number) == type(2.2):
    print("Entered number is float and it's hexadecimal number is:", float.hex(number)) 
elif type(number) == type(2):
    print("Entered number is, ", number,"and it's hexadecimal number is:", hex(number)) 
else:
    print("you entered an invalid number")

但它总是跳过前两个语句,只打印 else 语句。有人可以找出问题吗?

【问题讨论】:

  • 因为number 的类型总是str。注意,类型/类是对象。您可以直接使用它们int 而不是type(2)
  • @juanpa.arrivillaga 感谢您的回复,但我之前检查过这个但它没有工作。正如你所说,我再次对其进行了更改,但它跳过了 if 和 elif 语句。
  • @Ibrahim 不,我并不是说这可以解决您的问题。我已经向您解释过input总是返回str 类型的对象,这就是它被跳过的原因。
  • @Ibrahim 我已经编辑了您的标题以匹配您刚才描述的内容。如果您认为它不正确,请随时进一步调整。

标签: python-3.x


【解决方案1】:

TLDR:首先使用ast.literal_eval 转换您的input


Python3 中input 的返回类型始终为str。因此,对照type(2.2)(又名float)和type(2)(又名int)检查它不会成功。

>>> number = input()
3
>>> number, type(number)
('3', <class 'str'>)

最简单的方法是显式要求 Python 转换您的输入。 ast.literal_eval 允许保存转换为 Python 的基本数据类型。它会自动将 intfloat 文字解析为正确的类型。

>>> import ast
>>> number = ast.literal_eval(input())
3
>>> number, type(number)
(3, <class 'int'>)

在您的原始代码中,将ast.literal_eval 应用于用户输入。 那么你的类型检查可以成功:

import ast

number = ast.literal_eval(input("Please input your number...... \n"))
if type(number) is float:
    print("Entered number is float and it's hexadecimal number is:", float.hex(number)) 
elif type(number) is int:
    print("Entered number is, ", number,"and it's hexadecimal number is:", hex(number)) 
else:
    print("you entered an invalid type")

急切地尝试转换输入也意味着您的程序可能会收到无效的输入,就转换器而言。在这种情况下,将引发异常,而不是获取另一种类型的 some 值。使用try-except回应本案:

import ast

try:
    number = ast.literal_eval(input("Please input your number...... \n"))
except Exception as err:
    print("Your input cannot be parsed:", err)
else:
    if type(number) is float:
        print("Entered number is float and it's hexadecimal number is:", float.hex(number)) 
    elif type(number) is int:
        print("Entered number is, ", number, "and it's hexadecimal number is:", hex(number)) 
    else:
        print("you entered an invalid type")

【讨论】:

    【解决方案2】:

    input 返回一个字符串,您正在尝试检查它看起来像是浮点数还是整数:

    number = input("Enter your number? ")
    try:
        number = int(number)
        print("Entered number is, ", number,"and it's hexadecimal number is:", hex(number))
    except ValueError:
        try:
            number = float(number)
            print("Entered number is float and it's hexadecimal number is:", float.hex(number)) 
        except ValueError:
            print("You entered an invalid number")
    

    【讨论】:

      【解决方案3】:

      我想制作一个简单的转换器,可以使用 Python3 将 decimalfloat 数字转换为 Hexadecimal。但在此之前,我想添加一个简单的检查,通过命令提示符输入的数字是十进制还是十六进制。但是经过一番搜索,我发现 Python3 的input() 函数的问题是使用此函数通过终端输入的任何内容都将始终打印为字符串并且不会对其进行评估。所以我们不能直接应用检查条件。现在有一种可能使用像number = int(input("Enter the number"))number = float(input("Enter the number")) 这样的数据转换函数,但这里的主要问题是我们一次只能检查一个条件,floatinteger 。如下图所示:

      number = float(input("Enter the number"))
      if type(number) == float:
          print("Entered number is float and it's hexadecimal is:", float.hex(number))
      else:
          print("you entered an invalid number") 
      

      或者同样的方法可以用于int,只需稍作修改,例如:

      number = int(input("Enter the number"))
      if type(number) == int:
          print("Entered number is, ", number,"and it's hexadecimal is:", hex(number))
      
      else:
          print("you entered an invalid number")
      

      但是这里我们只能输入integer,因为使用int()函数不能将浮点数转换为整数。它会给出以下错误:

      以 10 为底的 int() 的无效文字:'2.2'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        相关资源
        最近更新 更多