我正在使用Codewars网站练习一些东西。我不认为这与我的问题有关,但是 - 代码的目标是找到这样的数字: 89 = 8 ^ 1 + 9 ^ 2 135 = 1 ^ 1 + 3 ^ 2 + 5 ^ 3
此代码适用于几乎所有测试用例,但在一个测试中失败,其中b> 2000年:
def sum_dig_pow(a, b):
list = []
for i in range (a, b + 1):
digitlist = [int(x) for x in str(i)]
sum = 0
for x in digitlist:
sum += x**(int(digitlist.index(x)) + 1)
if sum == i:
list.append(i)
print list
此代码适用于所有测试:
def sum_dig_pow(a, b):
list = []
for i in range (a, b + 1):
digitlist = [int(x) for x in str(i)]
sum = 0
digicounter = 1
for x in digitlist:
sum += x**digicounter
digicounter += 1
if sum == i:
list.append(i)
print list
唯一的区别是我用一个计数器来返回x的索引,而不是用索引(x)来获取它。
有人可以解释为什么第一个代码并不总是有效吗?一般来说,当我需要引用像这样的列表中的项目的索引时,似乎我很难...并且最终只是像我一样使用计数器。 :/
(另外,我知道有更多的pythonic和有效的方法来执行这项任务,我还不是很好。)
答案 0 :(得分:0)
您的第一个功能无法找到1676
或2427
等数字,因为它们包含重复的数字,.index()
会返回首次出现的数字仅列出项目。
此外,不要使用list
作为变量名称,它会隐藏内置名称。