Python: 以 10 为底的 int() 的错误无效文字

Python: error invalid literal for int() with base 10

我的任务是找出我们需要将数字的数字相乘多少次,直到只剩下一位数字,然后计算我们需要“转”多少次,直到只剩下一位数字。

示例:

39 -> 3*9=27 -> 2*7=14 -> 1*4=4,所以答案应该是3.

到目前为止我得到了:

def persistence(n):
    
    count = 1
    sum = int(str(n)[0:1]) * int(str(n)[1:2])

    while(n > 0 or sum > 9):

        sum = int(str(sum)[0:1]) * int(str(sum)[1:2])
        count = count + 1
        print(sum)

    print("how many times: " + count) 
    
persistence(39)

那么我是如何完成这项任务的:

  1. 我将前 2 位数字转换为 str 并相乘。
  2. 我已经有了第一个总和,然后进入 while 循环并不断重复。

所以,我的问题是我一直收到这个:

我该如何解决?还是我应该尝试以不同的方式处理此任务?

你只有几个问题。

  1. while 循环不断检查 n。它只需要检查 sum
  2. 最终打印尝试将 int 添加到 str。只需使用打印参数即可。
def persistence(n):
    
    count = 1
    sum = int(str(n)[0:1]) * int(str(n)[1:2])

    while sum > 9:

        sum = int(str(sum)[0:1]) * int(str(sum)[1:2])
        count = count + 1
        print(sum)

    print("how many times: ", count) 
    
persistence(39)

按预期输出。

但是,您不应该使用 sum 作为变量的名称。您可以重复使用 n

def persistence(n):
    
    count = 1
    n = int(str(n)[0:1]) * int(str(n)[1:2])

    while n > 9:

        n = int(str(n)[0:1]) * int(str(n)[1:2])
        count = count + 1
        print(n)

    print("how many times: ", count) 

这应该有效。

def returnLength(n):
    return len(str(n))


def returnProduct(n, pro=1):
    n = str(n)
    for i in n:
        pro *= int(i)
    return pro


n = int(input())
c = 0
while returnLength(n) != 1:
    n = returnProduct(n)
    c += 1
print(c)

所以基本上在开始时我的程序有致命弱点,因为当我有 3 位以上的数字时它失败了。我非常仔细地阅读了每条建议,我的最终代码是这样的:

def persistence(n):

    def returnLength(n):
        return len(str(n))
    
    def returnProduct(n, pro=1):
        n = str(n) 
        for i in n:
            pro *= int(i)
        return pro
    
    c = 0

    while n > 9:
        n = returnProduct(n)
        c += 1
    
    print(c)

然而,我仍然无法通过测试,但在 VScode 上一切正常,我做了一些随机的手动测试(我在 codewars.com 练习,很多人写道在此任务的测试中可能有错误)。可能是我只能有一个def。我会试着弄清楚。再次感谢大家。