期望使它返回False,因为字符串包含整数
def is_float(s):
try:
float(s)
return True
except ValueError:
return False
list1 =[['a','4'],['20.1','4'],['100','4'],['102','10'],['31.3','10'],['c','10'],['113','12'],['s','12'],['32.9','12']]
print(is_float(list1[6][0]))
当值为113时返回true。由于数字是整数,我期望为False吗?
答案 0 :(得分:1)
发生的事情是python将您的字符串“ 113”隐式连接到一个float上,这不会产生错误,因此会破坏is_float方法。
您应该使用的是isinstace()
方法,该方法将允许您通过运行isinstance(variable, type)
进行测试并返回布尔值
这是实现它的方法:
def is_float(input):
if isinstance(input, float):
return True
else:
return False
答案 1 :(得分:1)
float()
不检查变量是否为float类型,它返回以float形式传递的任何整数(或字符串)。因此,您的函数将始终返回true。
答案 2 :(得分:1)
您可以使用isdigit()
检查变量是否为数字。
与isinstance(float(s), float)
一起将str
转换为float
,然后检查它是否为float
:
def is_float(s):
try:
print(s)
if s.isdigit():
return "It is an Integer.", False
if isinstance(float(s), float):
return "It is a Float.", False
except ValueError:
return "Not an Integer or Float.", True
list1 =[['a','4'],['20.1','4'],['100','4'],['102','10'],['31.3','10'],['c','10'],['113','12'],['s','12'],['32.9','12']]
print(is_float(list1[0][0])) # a
print(is_float(list1[6][0])) # 113
print(is_float(list1[8][0])) # 32.9
输出:
a
('Not an Integer or Float.', True)
113
('It is an Integer.', False)
32.9
('It is a Float.', False)
答案 3 :(得分:0)
正如其他人所解释的,'113'
可以转换为float
并得到113.0
,我想补充一点,在这种情况下,最好使用try-except-else
而不是{ {1}},即
try-except
应该理解为尝试转换为浮点数,如果出现def is_float(s):
try:
float(s)
except ValueError:
return False
else:
return True
则返回ValueError
,否则返回False
。它将产生与原始实现相同的结果,但是请注意,它更具可读性,因为将True
放在return True
块中可能表明您在排除try
语句中的错误。