python float不是数字?

时间:2018-06-25 16:37:42

标签: python function

此代码返回 False ,但是当我从float中删除点时,它变为 True ,我试图理解原因。请解释

<button type="submit">Submit</button>
<a href="/">Cancel</a>

我也知道我的代码不是最好的,我想知道如何改善它

2 个答案:

答案 0 :(得分:2)

isdigit仅检查所有字符是否都是数字(例如01,... 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

另一方面,如果您希望函数说所有这四个都是数字,则需要修改代码。做到这一点的一种方法(可能不是最好的方法!)是拥有一个执行以下操作的测试用例:

  1. 如果我在“。”上分割此字符串,我会得到两个字符串吗?
  2. 如果是,那么两个字符串数字都是吗?
  3. 如果是,则字符串是数字。

不清楚您想要什么行为。