判断字符串是否是数字

#判断字符串是否是数字,看起来很简单,但是还是有些难度的
def is_number(s):
    try:
        float(s)#尝试转换为浮点数
        return True
    except ValueError:
        pass
    try:
        import unicodedata#尝试转换为一个数字符
        unicodedata.numeric(s)
        return True
    except(TypeError, ValueError):
        pass
    try:
        complex(s) # 尝试转换为复数
        return True
    except ValueError:
        pass
    s = s.replace(',', '') # 去掉千位分隔符
    s = s.strip('$%') # 去掉货币符号或百分号
    if s.startswith('0x') or s.startswith('0X'): # 判断是否是十六进制字符串
        try:
            int(s, 16) # 尝试转换为十六进制整数
            return True
        except ValueError:
            pass
    elif s.startswith('0b') or s.startswith('0B'): # 判断是否是二进制字符串
        try:
            int(s, 2) # 尝试转换为二进制整数
            return True
        except ValueError:
            pass
    elif s.startswith('0o') or s.startswith('0O'): # 判断是否是八进制字符串
        try:
            int(s, 8) # 尝试转换为八进制整数
            return True
        except ValueError:
            pass
    return False # 如果都不成功,返回False
print(is_number('2+2j'))   # False
print(is_number('1'))     # True
print(is_number('1.3'))   # True
print(is_number('-1.37')) # True
print(is_number('1e3'))   # True



这段代码是很有意义的代码,与我们的日常生活息息相关。

这串代码中运用了以下函数:

•  float(s):这个函数可以将字符串s转换为浮点数,如果s不是一个有效的浮点数字符串,就会抛出ValueError异常。

•  unicodedata.numeric(s):这个函数可以将字符串s转换为一个特殊的数字字符,例如'½','④','ⅲ'等,如果s不是一个有效的特殊数字字符,就会抛出TypeError或ValueError异常。

•  complex(s):这个函数可以将字符串s转换为复数,如果s不是一个有效的复数字符串,就会抛出ValueError异常。

•  s.replace(old, new):这个方法可以返回一个新的字符串,其中s中的所有old子串都被替换为new子串。

•  s.strip(chars):这个方法可以返回一个新的字符串,其中s两端的所有chars中的字符都被去掉。如果不指定chars,默认去掉空白字符。

•  s.startswith(prefix):这个方法可以判断字符串s是否以prefix开头,返回True或False。

•  int(s, base):这个函数可以将字符串s转换为base进制的整数,如果s不是一个有效的base进制整数字符串,就会抛出ValueError异常。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值