python算法例16 数字判断

1. 问题描述

给定一个字符串,验证其是否为数字。

2. 问题示例

"0"判断为True,"0.1"判断为True,"abc"判断为False,"1 a"判断为False,"2e10"判断为True。

3.代码实现

使用一个标记变量来记录是否遇到数字、小数点、指数符号和正负号。通过遍历字符串的每个字符,并根据不同的情况进行判断,最终确定字符串是否为数字。

def isNumber(s: str) -> bool:
    # 去除字符串两端的空格
    s = s.strip()

    # 标记是否遇到数字、小数点、指数符号和正负号
    hasNumber = False
    hasDot = False
    hasE = False
    hasSign = False

    # 遍历字符串中的每个字符
    for i in range(len(s)):
        # 如果字符是数字,则标记hasNumber为True
        if s[i].isdigit():
            hasNumber = True
        # 如果字符是小数点
        elif s[i] == '.':
            # 如果之前已经有小数点、指数符号或者没有遇到数字,则返回False
            if hasDot or hasE or not hasNumber:
                return False
            hasDot = True
        # 如果字符是指数符号
        elif s[i] == 'e' or s[i] == 'E':
            # 如果之前已经有指数符号或者没有遇到数字,则返回False
            if hasE or not hasNumber:
                return False
            hasE = True
            # 重置hasNumber标记,以便判断指数部分是否有数字
            hasNumber = False
        # 如果字符是正负号
        elif s[i] == '+' or s[i] == '-':
            # 如果不是第一个字符,并且前一个字符不是指数符号,则返回False
            if i != 0 and s[i-1] != 'e' and s[i-1] != 'E':
                return False
            hasSign = True
        # 其他情况,返回False
        else:
            return False

    # 最后必须有数字,否则返回False
    return hasNumber


# 测试
print(isNumber("0"))       # True
print(isNumber("0.1"))     # True
print(isNumber("abc"))     # False
print(isNumber("1 a"))     # False
print(isNumber("2e10"))    # True

python算法例16 数字判断_第1张图片 

你可能感兴趣的:(Python算法,python,算法)