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
相关产品推荐
相关产品推荐

