我将int转换为str并仍然得到len()的错误

时间:2018-01-23 11:53:25

标签: python

下面的代码给出了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()

2 个答案:

答案 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() functionoperator.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