Python实现字符串数字判断的两种算法详解

沈知远
沈知远
发布时间:2026-10-14| 4人浏览过
原创

本文详细介绍在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"))

以上即为本文介绍的全部内容,希望这些算法示例能对您的学习有所帮助,也欢迎大家继续支持本站获取更多技术资源。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。