此代码返回 False ,但是当我从float中删除点时,它变为 True ,我试图理解原因。请解释
<button type="submit">Submit</button>
<a href="/">Cancel</a>
我也知道我的代码不是最好的,我想知道如何改善它
答案 0 :(得分:2)
isdigit
仅检查所有字符是否都是数字(例如0
,1
,... 9
)。
因此,字符串234.4
将返回False
,因为它还包含一个小数点.
,而不是数字。
help("".isdigit)
会告诉您,要成为True
,所有字符必须为数字,并且至少必须有一个字符。
您可以使用正则表达式进行这种检查,例如使用类似以下内容的
:import re
def isnumber(x):
return re.match("-?[0-9]+([.][0-9]+)?$", x) is not None
将接受可选的减号,后接一个或多个数字的序列,并可选地后接一个小数点和多个数字。
请注意,浮点数可以被更广泛的语法接受,包括小数点前后的比例指数和缺失部分,因此,如果您要验证计算机的输出,则不必太严格。但是,根据上下文,拒绝诸如1e4
之类的东西作为来自人类的数字可能是有意义的。
答案 1 :(得分:2)
让我们逐步完成代码。
if string[:1] == "-":
string[:1]
的意思是“使用从string
开始到(但不包括)索引1的字符组成字符串。”如果您的字符串是“ foobar”,则string[:1]
将是“ f”。在您的示例中,string[:1]
将为“-”
cuted = string[1:]
这将相反,生成一个字符串,其中包含除第一个字符以外的所有内容。在这种情况下,cuted
将为“ 234.4”
if cuted.isdigit():
return True
else:
return False
这将测试cuted
是否仅由数字组成。在我们的例子中,这是错误的,因为它包含一个小数点。返回False。
elif string.isdigit():
return True
else:
return False
如果第一个字符不是“-”,则改为运行。如果提供了“ 234.4”,将达到这种情况,并且测试将失败(因为“ 234.4”包含小数点),因此将返回False。
如果您想要的是 ,您的代码似乎是有效的:
123.3 -> False
-123.3 -> False
123 -> True
-123 -> True
另一方面,如果您希望函数说所有这四个都是数字,则需要修改代码。做到这一点的一种方法(可能不是最好的方法!)是拥有一个执行以下操作的测试用例:
不清楚您想要什么行为。