繁体   English   中英

Python:如何区分输入是整数还是浮点数

[英]Python: How to differentiate whether input is an integer, or floating point

我是一个试图学习 Python 的初学者,并决定尝试一个练习,我将接受输入并区分其类型; 无论是整数、浮点数还是字符串。

据我了解,Python 将所有输入视为字符串,因此即使我输入数字/小数点,输入也被视为字符串。 我已经克服了区分输入是字符串还是其他方式的第一步:

def get():
    prompt = 'Give a number or a word.\n'
    x = input(prompt)
    try:
        float(x)
        print('You entered a number.')

    except:
        print('You entered a string.')

我利用了 'try' 和 'except',因为如果 x 是字符串而不是数字/浮点数,则 float(x) 将返回错误。 接下来,我推断我可以使用类似的方法来区分整数和浮点数,但我不知道什么会导致整数错误而浮点数不会,反之亦然。 (因为 float(x) 其中 x 是一个整数工作正常)

有没有这样的事情,以便我可以使用类似的方法来区分十进制数输入和整数?

你的问题中有两个问题。

  1. 要处理字符串 > int/float,您可以先利用ast.literal_eval
>>> import ast
>>> print(type(ast.literal_eval("2"))
int
>>> print(type(ast.literal_eval("3.4"))
float
>>> print(ast.literal_eval("3e2"))
300.0
  1. 要检查类型,我认为您正在寻找isinstance
>>> x = 2
>>> print(isinstance(x, int))
True
>>> y = 3.4
>>> print(isinstance(y, int))
False
>>> print(isinstance(y, float))
True

因此,将这两者放在一起,您可以使用这样的if语句:

if isinstance(ast.literal_eval(x), int):
    # do whatever you want if it's an int
elif isinstance(ast.literal_eval(x), float):
    # do whatever you want if it's a float

这取决于您对整数的定义是什么。 “3.0”是整数吗? 还是只有“3”? 前者通常表示为一个浮点数,其值恰好是一个数学整数(但不是int类型)。

如果您的意思是包含“3.0”,那么您可以进行一个同时捕获“3.0”和“3”的测试:

f = float(x)
if f==int(f):
   print("really an integer value")

否则,您可以使用isinstance(f, int)

(警告:这是Python3在Python2容易有两种整数- intlong ,你必须测试另发)。

输入始终是一个字符串。

您只想知道该字符串是否可以转换为intfloat值。 您可以轻松地说服自己,大多数 (*) 整数表示可以转换为浮点值,而对称不正确。

所以你应该

  1. 尝试转换为 int
  2. 如果失败尝试转换为浮点数
  3. 如果它仍然失败,则将输入作为字符串处理

基本原理是,如果用户输入3.0他们可能希望它应该是一个浮点值,否则他们会输入 3。


Python 整数仅受可用内存的限制,而浮点数是 64 位 iEEE-754 浮点数。 但是 Python 足以将大于最大浮点值的整数转换为inf 所以即使是不能表示为浮点数的整数也会毫无例外地被转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM