Python实现字符串数字判断的两种算法详解
本文详细介绍在Python中判断字符串是否为数字的两种常见算法。第一种方法通过区分小数和整数,分别处理正负号及小数点,验证剩余字符是否全为数字。第二种方法则先检查首位字符,再统计负号和小数点的数量,去除特殊符号后验证剩余部分。文章包含完整的Python代码示例及测试用例,帮助开发者理解字符串校验逻辑。
算法1:分步校验法
算法1
首先区分小数和整数:若字符串中包含且仅包含一个小数点,则可能为小数;若不含小数点,则可能为整数。若小数点数量既不是0也不是1,则直接判定该字符串不是数字。
若判定为小数,需进一步区分正数和负数:若字符串以负号开头,则可能为负小数;若不以负号开头,则可能为正小数。
具体处理步骤如下:若首位为负号,则将其去除。
若首位不为负号,或者在去除首位负号后,继续判断剩余字符串是否以小数点开头。若是,则判定不是数字;若不是,则去除字符串中的小数点。
最后,检查剩余字符是否全部属于"0123456789"集合。若存在不属于该集合的字符,则判定不是数字;否则,判定为数字。
对于整数的判断,同样需要区分正数和负数:若字符串以负号开头,则可能为负整数;若不以负号开头,则可能为正整数。
具体处理步骤如下:若首位为负号,则将其去除。
若首位不为负号,或者在去除首位负号后,判断剩余字符是否全部属于"0123456789"集合。若存在不属于该集合的字符,则判定不是数字;否则,判定为数字。

#encoding=utf-8
def is_number(s):
if s.count(".")==1: #小数的判断
if s[0]=="-":
s=s[1:]
if s[0]==".":
return False
s=s.replace(".","")
for i in s:
if i not in "0123456789":
return False
else: #这个else与for对应的
return True
elif s.count(".")==0: #整数的判断
if s[0]=="-":
s=s[1:]
for i in s:
if i not in "0123456789":
return False
else:
return True
else:
return False
print(is_number("1334345345"))
print(is_number("1.12344565"))
print(is_number("-14344343"))
print(is_number("-1.123456"))
print("**********************")
print(is_number("abc"))
print(is_number("1.32.2"))
print(is_number(".2344"))
print(is_number("1234a"))
print(is_number("--1.1"))
print(is_number("--1abc"))

算法2:符号统计法
算法2
首先判断字符串的首位字符是否为负号或数字。若首位既不是负号也不是数字,则直接判定不是数字;若符合上述条件,则可能为数字。
接着判断字符串中"."和"-"的数量是否均小于等于1。若任一符号数量超过1,则判定不是数字;若均符合数量限制,则可能为数字。
将字符串中的"."和"-"全部去除。
最后,判断剩余字符是否全部属于"0123456789"集合。若存在不属于该集合的字符,则判定不是数字;否则,判定为数字。

#encoding=utf-8
def is_number(s):
if s[0]=="-" or s[0] in "0123456789":
if s.count(".")<=1 and s.count("-")<=1:
s=s.replace("-","").replace(".","")
#print (s)
for i in s:
if i not in "0123456789":
return False
else: #这个else与for对应
return True
else:
return False
else:
return False
print(is_number("1334345345"))
print(is_number("1.12344565"))
print(is_number("-14344343"))
print(is_number("-1.123456"))
print("**********************")
print(is_number("abc"))
print(is_number("1.32.2"))
print(is_number(".2344"))
print(is_number("1234a"))
print(is_number("--1.1"))
print(is_number("--1abc"))

以上即为本文介绍的全部内容,希望这些算法示例能对您的学习有所帮助,也欢迎大家继续支持本站获取更多技术资源。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









