You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正负整数位数统计代码报错求助

解决正负整数位数统计问题

原代码的问题出在isdigit()方法上——这个方法只会对纯数字字符串返回True,带负号的字符串(比如"-123")会被判定为非数字,所以输入负数时直接触发错误提示。下面给两种可行的修改方案:

方案一:先处理负号再验证数字

先判断输入是否以负号开头,再检查负号后的部分是否为纯数字,同时保留对正数字符串的验证:

dato_entrada = input("INTRODUZCA UN NÚMERO: ")

# 验证是否为合法正负整数
es_numero = False
if dato_entrada.startswith('-'):
    # 负号后至少要有一个字符,且全部是数字
    if len(dato_entrada) > 1 and dato_entrada[1:].isdigit():
        es_numero = True
elif dato_entrada.isdigit():
    es_numero = True

if es_numero:
    numero = int(dato_entrada)
    numero_abs = abs(numero)
    cont = 0
    # 处理0的特殊情况:0有1位
    if numero_abs == 0:
        cont = 1
    else:
        while numero_abs != 0:
            numero_abs = numero_abs // 10
            cont += 1
    print(f"El número tiene {cont} dígitos")
else:
    print("El dato introducido no es un numero")

方案二:用异常处理(更健壮)

直接尝试将输入转换为整数,转换失败再抛出错误提示,这种方式能覆盖更多异常情况(比如输入字母、符号混合的内容):

dato_entrada = input("INTRODUZCA UN NÚMERO: ")

try:
    numero = int(dato_entrada)
    numero_abs = abs(numero)
    cont = 0
    if numero_abs == 0:
        cont = 1
    else:
        while numero_abs != 0:
            numero_abs = numero_abs // 10
            cont += 1
    print(f"El número tiene {cont} dígitos")
except ValueError:
    print("El dato introducido no es un numero")

补充说明

  • 两种方案都修正了0的统计错误:原代码输入0时循环不会执行,统计结果为0,现在统一修正为1位。
  • 方案二的异常处理更推荐,因为它不需要手动判断字符串格式,Python的类型转换会自动处理所有合法整数的情况,包括正负号。

内容的提问来源于stack exchange,提问作者Staryellow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:15:47