检测Python字符串是数字还是字母

Tri*_*Kal 28 python string ascii

如何检测字符串中的数字或字母?我知道你使用ASCII码,但是哪些功能利用了它们?

Moi*_*dri 62

检查字符串是否为数(整数)和字母

您可以使用str.isdigit()str.isalpha()分别检查给定字符串是否为整数和字母.

样本结果:

# For alphabet
>>> 'A'.isdigit()
False
>>> 'A'.isalpha()
True

# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
Run Code Online (Sandbox Code Playgroud)

检查字符串为正/负 - 整数/浮点数

str.isdigit()False如果字符串是负数或浮点数,则返回.例如:

# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
Run Code Online (Sandbox Code Playgroud)

如果你还想检查整数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
Run Code Online (Sandbox Code Playgroud)

样品运行:

>>> 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
Run Code Online (Sandbox Code Playgroud)

检查号码时丢弃"NaN"(不是数字)字符串

上面的函数将返回True"NAN"(非数字)字符串,因为对于Python,它是有效的float,表示它不是数字.例如:

>>> is_number('NaN')
True
Run Code Online (Sandbox Code Playgroud)

为了检查数字是否为"NaN",您可以使用math.isnan():

>>> import math
>>> nan_num = float('nan')

>>> math.isnan(nan_num)
True
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想导入其他库来检查这一点,那么您可以通过比较它自己来检查它==.Falsenanfloat与自身进行比较时,Python会返回.例如:

# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
Run Code Online (Sandbox Code Playgroud)

因此,上述功能is_number可以更新,返回False"NaN"是:

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
Run Code Online (Sandbox Code Playgroud)

样品运行:

>>> 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
Run Code Online (Sandbox Code Playgroud)

允许将像"1 + 2j"这样的复数视为有效数字

上述功能仍然会返回你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
Run Code Online (Sandbox Code Playgroud)

样品运行:

>>> 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
Run Code Online (Sandbox Code Playgroud)

PS:每个检查的每个操作取决于数字的类型带来额外的开销.选择is_number适合您要求的功能版本.

  • 这是一个非常完整且描述良好的答案.+1 (2认同)

归档时间:

查看次数:

98938 次

最近记录:

7 年,5 月 前