python--判断字符串是否为数字

# 构造判断函数
def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass
    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass
    return False


# 测试判断(Unicode也可测,四,)
num = input('输入判断:')
print(is_number(num))
代码当出现多个汉字数字时会报错,通过遍历字符串解决
对汉字表示的数字也可分辨
def is_number(s):
    try:  # 如果能运行float(s)语句,返回True(字符串s是浮点数)
        float(s)
        return True
    except ValueError:  # ValueError为Python的一种标准异常,表示"传入无效的参数"
        pass  # 如果引发了ValueError这种异常,不做任何事情(pass:不做任何事情,一般用做占位语句)
    try:
        import unicodedata  # 处理ASCii码的包
        for i in s:
            unicodedata.numeric(i)  # 把一个表示数字的字符串转换为浮点数返回的函数
            #return True
        return True
    except (TypeError, ValueError):
        pass
    return False

进一步扩展到全角数字:

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass

    import unicodedata
    try:
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass
        
    if len(s) < 2:
        return False

    try:
        d = 0
        if s.startswith('-'):
            s = s[1:]
        for c in s:
            if c == '-': # 全角减号
                return False
                
            if c == '.': # 全角点号
                if d > 0:
                    return False
                else:
                    d = 1
                    continue
            unicodedata.numeric(c)
        return True
    except (TypeError, ValueError):
        pass

    return False

# 测试字符串和数字
print(f'{is_number("foo")}')
print(f'{is_number("1") }')
print(f'{is_number("1.3") }')
print(f'{is_number("-1.37") }')
print(f'{is_number("1e3") }')
print(f'{is_number("2.345.6") }')
print(f'{is_number("-5.2-8") }')
print(f'{is_number("52-8") }')
print(f'{is_number("-.5") }')
print(f'{is_number("-5.") }')
print(f'{is_number(".5") }')

# 测试Unicode
# 阿拉伯语 5
print(f'{is_number("٥") }')
# 泰语 2
print(f'{is_number("๒") }')
# 中文数字
print(f'{is_number("四") }')
print(f'{is_number("四卅") }')
# 全角数字
print(f'{is_number("123") }')
print(f'{is_number("-123") }')
print(f'{is_number("-123") }')
print(f'{is_number("12-3") }')
print(f'{is_number("123-") }')
print(f'{is_number("1.23") }')
print(f'{is_number("1.23") }')
print(f'{is_number(".23") }')
print(f'{is_number("-.23") }')
print(f'{is_number("1.23") }')
print(f'{is_number("1.2.3") }')
# 版权号
print(f'{is_number("©") }')

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值