【问题标题】:Is there a way to check if an input is an integer before converting it in python?有没有办法在python中转换输入之前检查输入是否为整数?
【发布时间】:2020-06-05 02:17:43
【问题描述】:
我需要接受输入并将其转换为任何类型的变量。例如,如果输入是 2,我需要找出 2 是整数,然后将 int 转换后的输入存储到 int 类型变量。例如:
>>> myInput = input("Input a number: ")
>>> if myInput is float:
>>> print("myInput is a float")
>>> if myInput is int:
>>> print("myInput is an integer")
Input a number: 2
myInput is an integer
然而,实际发生的是:
Input a number: 2
然后程序结束。
【问题讨论】:
标签:
python
variables
input
【解决方案1】:
input() 返回一个字符串,你必须先转换它。您可以通过检查 '.' 的存在来确定它是浮点数还是整数
myInput = input("Input a number: ")
if '.' in myInput:
try:
myInput = float(myInput)
print(f'{myInput} is a float')
except ValueError:
print(f'{myInput} is not a number')
else:
try:
myInput = int(myInput)
print(f'{myInput} is an integer')
except ValueError:
print(f'{myInput} is not a number')
【解决方案2】:
int 和 float 不是数据类型,它们是内置函数,它们分别将参数转换为 int 和 float。您可以为此使用 try catch。如果调用 int(myInput) 引发 ValueError,则该字符串不代表有效整数,与 float(myInput) 相同。
try:
int(myInput)
print('myInput is an int')
except ValueError:
pass
try:
myInput = float(myInput)
print('myInput is a float')
except ValueError:
pass
另一种选择
【解决方案3】:
这不是一种非常复杂的方式,但它会以一种很好的方式工作 - 我相信编码应该总是很有趣。
def check_input_type(value):
out = 'Input is String: {}'
def is_float(val):
return not (float(val)).is_integer()
ord_val = ord(value[0])
if not ord_val >= 65:
try:
if is_float(value):
out = 'Input is Float: {}'
else:
out = 'Input is Integer: {}'
except ValueError:
pass
return out.format(value)
check_input_type(input("Input a number: "))
让我们测试一下:
check_input_type(input("Input a number: "))
Input a number: 78.89
Out[37]: 'Input is Float: 78.89'
check_input_type(input("Input a number: "))
Input a number: 1arrow
Out[38]: 'Input is String: 1arrow'
check_input_type(input("Input a number: "))
Input a number: 123
Out[39]: 'Input is Integer: 123'
check_input_type(input("Input a number: "))
Input a number: 123-one-two-three
Out[40]: 'Input is String: 123-one-two-three'