下面的代码给出了int
没有长度的错误,即使我将其转换为str
。那里的问题在哪里?
代码:
n=39
x=str(n)
counter=0
mult=1
while len(x) != 1:
for i in x:
mult = mult * int(i)
x=mult
mult=1
counter+=1
我得到的输出:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
答案 0 :(得分:4)
在循环中为x
分配一个整数:
x = mult
所以while
循环的 next 迭代现在将该整数传递给len()
函数,你就会得到异常。
将值转换为字符串:
x = str(mult)
我在循环中将mult
设置为1以简化它,并测试超过1 数字:
def digit_multiply_steps(n):
"""Reduce n to one digit, multiplying the digits each step
Returns the number of steps required to do so.
"""
x = str(n)
counter = 0
while len(x) > 1:
mult = 1
for i in x:
mult *= int(i)
x = str(mult)
counter += 1
return counter
print(digit_multiply_steps(39))
循环也可以使用functools.reduce()
function和operator.mul()
function来完成。 map()
function可用于将x
的字符转换回整数以与之相乘。我们可以使用itertools.count()
来生成计数器:
from functools import reduce
from itertools import count
from operator import mul
def digit_multiply_steps(n):
"""Reduce n to one digit, multiplying the digits each step
Returns the number of steps required to do so.
"""
x = str(n)
for counter in count():
if len(x) == 1:
return counter
x = str(reduce(mul, map(int, x), 1))
答案 1 :(得分:0)
while
循环检查所有代码后的条件,在代码中counter+=1
之后。那时,你的x
变量是一个产品,(可能是int?)为mult,然后python解释器尝试在int对象中应用__len__
,因此它会引发TypeError
。