这篇答案提供了一步一步的指南,包括函数和示例,以查找字符串是否为:
- 正整数
- 正/负-整数/浮点数
- 如何在检查数字时丢弃"NaN"(不是数字)字符串?
检查字符串是否为正整数
您可以使用str.isdigit()
来检查给定的字符串是否为正整数。
样本结果:
# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
检查字符串是正数/负数 - 整数/浮点数
str.isdigit()
返回False
,如果字符串是一个负数或浮点数。例如:
# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
如果你想要同时检查负整数和
float
,那么可以编写一个自定义函数进行检查:
如下:
def is_number(n):
try:
float(n)
except ValueError:
return False
return True
样例运行:
>>> is_number('123') # positive integer number
True
>>> is_number('123.4') # positive float number
True
>>> is_number('-123') # negative integer number
True
>>> is_number('-123.4') # negative `float` number
True
>>> is_number('abc') # `False` for "some random" string
False
在检查数字时忽略 "NaN" (不是数字) 字符串
上述函数将返回 True
,因为对于Python来说,“NAN”(不是数字)字符串是有效的浮点数,表示它不是一个数字。例如:
>>> is_number('NaN')
True
为了检查数字是否为 "NaN",您可以使用
math.isnan()
,如下所示:
>>> import math
>>> nan_num = float('nan')
>>> math.isnan(nan_num)
True
如果你不想导入额外的库来检查这个问题,那么你可以通过使用==
将其与自身进行比较来简单地检查它。当将nan
浮点数与自身进行比较时,Python返回False
。例如:
# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
因此,上述的
is_number
函数可以更新为:当输入为
"NaN"
时,返回
False
。
def is_number(n):
is_number = True
try:
num = float(n)
is_number = num == num
except ValueError:
is_number = False
return is_number
示例运行:
>>> is_number('Nan') # not a number "Nan" string
False
>>> is_number('nan') # not a number string "nan" with all lower cased
False
>>> is_number('123') # positive integer
True
>>> is_number('-123') # negative integer
True
>>> is_number('-1.12') # negative `float`
True
>>> is_number('abc') # "some random" string
False
PS:每个检查操作都会带来额外的开销,具体取决于数字类型。选择适合您要求的is_number
函数版本。
x = float('0.00'); if x: use_float(x);
,你的代码中现在有一个bug。这些函数抛出异常而不是一开始返回None
的原因是为了避免Truthy值。更好的解决方案是在需要使用时避免实用程序函数,而是在调用float时使用try catch语句块捕获异常。 - ovangle