负数输入时,基于数字位数的5次幂乘法Python函数结果异常问题
问题原因与解决方案
你的函数处理负数时结果不符合预期,核心原因是将负数转为字符串时,负号-被计入了长度统计。比如输入-2,str(-2)得到的是"-2",长度为2,导致计算式变成5**2 * (-2) = -50,但你预期的是基于数字部分的位数(1位)计算5**1 * (-2) = -10。
修正方法
方法一:通过绝对值排除负号影响
先取输入的绝对值再转字符串计算位数,这样负号不会被统计:
def multiply(n): return 5 ** len(str(abs(n))) * n
测试输入-2时,abs(-2)为2,str(2)长度为1,计算得5*(-2) = -10,符合预期。
方法二:判断负数并调整长度
直接判断输入是否为负数,若为负则将字符串长度减1:
def multiply(n): s = str(n) length = len(s) - 1 if n < 0 else len(s) return 5 ** length * n
这种方式同样能排除负号的干扰,得到正确的数字位数。
内容的提问来源于stack exchange,提问作者OrigamiDarknessDragon
相关产品推荐
相关产品推荐

