我怎样可以检测一个字符串中的数字或字母?我知道可以使用ASCII码,但是哪些函数可以利用它们呢?
您可以使用 str.isdigit()
和 str.isalpha()
分别检查给定的字符串是否为非负整数(大于等于0)和字母字符。
示例结果:
# For alphabet
>>> 'A'.isdigit()
False
>>> 'A'.isalpha()
True
# 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
},那么可以编写一个自定义函数进行检查,如下所示:
如果您想要同时检查负数整数和float
,那么可以编写一个自定义函数进行检查,如下所示:
def is_number(n):
try:
float(n) # Type-casting the string to `float`.
# If string is not a valid `float`,
# it'll raise `ValueError` exception
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
上面的函数会返回True
,对于"NAN"(非数字)字符串因为对于Python来说它是一个有效的浮点数,表示它不是一个数字。例如:
>>> is_number('NaN')
True
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
:is_number
。def is_number(n):
is_number = True
try:
num = float(n)
# check for "nan" floats
is_number = num == num # or use `math.isnan(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
上述函数仍会对复数返回False
。如果您希望您的is_number
函数将复数视为有效数字,则需要将传递的字符串强制转换为complex()
而不是float()
。然后您的is_number
函数将如下所示:
def is_number(n):
is_number = True
try:
# v type-casting the number here as `complex`, instead of `float`
num = complex(n)
is_number = num == num
except ValueError:
is_number = False
return is_number
示例运行:
>>> is_number('1+2j') # Valid
True # : complex number
>>> is_number('1+ 2j') # Invalid
False # : string with space in complex number represetantion
# is treated as invalid complex number
>>> is_number('123') # Valid
True # : positive integer
>>> is_number('-123') # Valid
True # : negative integer
>>> is_number('abc') # Invalid
False # : some random string, not a valid number
>>> is_number('nan') # Invalid
False # : not a number "nan" string
PS:每个检查操作都会带来额外的开销,具体取决于数字类型。请选择适合您需求的 is_number
函数版本。
is_number
函数时。 - Aminfloat([1, 2, 3])
会发生什么呢?它将会触发TypeError异常
。但是,如果你想要压缩所有的错误,你可以从try/except
中删除ValueError
来使我的函数压缩所有异常。 - Moinuddin Quadri对于长度为1的字符串,您可以简单地使用 isdigit()
或者 isalpha()
函数。
如果您的字符串长度大于1,则可以编写一个类似以下的函数..
def isinteger(a):
try:
int(a)
return True
except ValueError:
return False
str.isdigit()
和str.isalpha()
。 - Ken Y-N