Python检验输入字符串为合法数字(包括小数、带符号正负数)

该文章讨论了一个Python函数,用于检查输入字符串是否表示合法的数字,包括正数、负数、整数和小数。函数首先判断正负,然后区分整数和小数,确保没有多余的符号或异常格式,如以0开头的非单一0整数以及正确的小数点使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

合法数字根据其输入有几种分类:正数、负数、整数、小数

首先按照字符从前往后遍历顺序,最先遇到符号位,所以我们率先完成对于正/负的判断

  1. 通过字符串首位,即符号位来区分正数/负数,如果首位不为‘+’or'-'号,默认为正数

#验证输入合法性,e为输入的字符串,数据类型string
def is_legal(e):
    if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
        num = e[0:]
        #补充代码

    elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
        num = e[1:]#对e截断,去掉符号位
        #补充代码

    else:
        return False
  1. 完成对输入字符正负号的检验后,再对去掉符号位的num进行整数/小数的判断

def is_legal(e):
    #区分正数和负数
    if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
        num = e[0:]
        #接下来区分num 是小数还是整数
        if num.isdigt():#若输入字符全为数字,即验证num是否为整数
            #补充代码

        if num.count('.')==1:#输入字符包含一个数量的小数点
            #补充代码


    elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
        num = e[1:]
        # 接下来区分num 是小数还是整数
        if num.isdigt():  # 若输入字符全为数字,即验证num是否为整数
           #补充代码

        if num.count('.') == 1:  # 输入字符包含一个数量的小数点
            #补充代码
        else:
            return False  # 输入不合法

    else:
        return False
  1. num整数时:需要去掉字符长度大于1且以0 开头的非法数字

def is_legal(e):
    #区分正数和负数
    if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
        num = e[0:]
        #接下来区分num 是小数还是整数
        if num.isdigt():#若输入字符全为数字,即验证num是否为整数
            #排除以0开头长度大于1的不合法数字
            if len(num)>1 and num[0] == 0:
                return False
            else:
                return True

        if num.count('.')==1:#输入字符包含一个数量的小数点
            #补充代码


    elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
        num = e[1:]
        # 接下来区分num 是小数还是整数
        if num.isdigt():  # 若输入字符全为数字,即验证num是否为整数
            # 排除以0开头长度大于1的不合法数字
            if len(num) > 1 and num[0] == 0:
                return False
            else:
                return True

        if num.count('.') == 1:  # 输入字符包含一个数量的小数点
            #补充代码
        else:
            return False  # 输入不合法

    else:
        return False

  1. num小数时:需要以‘.’split num为小数点左边的整数部分left和小数点右边的小数部分right,并用isdigit()检验两部分是否全为数字输入,完整代码如下:

def is_legal(e):
    #区分正数和负数
    if e[0] != '+' or e[0] != '-':#无符号位,默认为正数
        num = e[0:]
        #接下来区分num 是小数还是整数
        if num.isdigt():#若输入字符全为数字,即验证num是否为整数
            #排除以0开头长度大于1的不合法数字
            if len(num)>1 and num[0] == 0:
                return False
            else:
                return True

        if num.count('.')==1:#输入字符包含一个数量的小数点
            left,right = num.split('.')[0],num.split('.')[1]
            if left.isdigit() and right.isditgit():
                return True
            else:
                return False
        else:
            return False#输入不合法


    elif e[0] == '+' or e[0] == '-':#有符号位,对去掉符号位的num 进行检验
        num = e[1:]
        # 接下来区分num 是小数还是整数
        if num.isdigt():  # 若输入字符全为数字,即验证num是否为整数
            # 排除以0开头长度大于1的不合法数字
            if len(num) > 1 and num[0] == 0:
                return False
            else:
                return True

        if num.count('.') == 1:  # 输入字符包含一个数量的小数点
            left, right = num.split('.')[0], num.split('.')[1]
            if left.isdigit() and right.isditgit():
                return True
            else:
                return False
        else:
            return False  # 输入不合法

    else:
        return False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值