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)
那么我是如何完成这项任务的:
- 我将前 2 位数字转换为 str 并相乘。
- 我已经有了第一个总和,然后进入 while 循环并不断重复。
所以,我的问题是我一直收到这个:
我该如何解决?还是我应该尝试以不同的方式处理此任务?
你只有几个问题。
while
循环不断检查 n
。它只需要检查 sum
- 最终打印尝试将
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。我会试着弄清楚。再次感谢大家。
我的任务是找出我们需要将数字的数字相乘多少次,直到只剩下一位数字,然后计算我们需要“转”多少次,直到只剩下一位数字。
示例:
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)
那么我是如何完成这项任务的:
- 我将前 2 位数字转换为 str 并相乘。
- 我已经有了第一个总和,然后进入 while 循环并不断重复。
所以,我的问题是我一直收到这个:
我该如何解决?还是我应该尝试以不同的方式处理此任务?
你只有几个问题。
while
循环不断检查n
。它只需要检查sum
- 最终打印尝试将
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。我会试着弄清楚。再次感谢大家。