我在用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
唯一的区别是我使用a计数器返回x的索引,而不是使用索引(x)来获取它。你知道吗
有人能解释为什么第一个代码不总是有效的吗?一般来说,当我需要引用像这样的列表中某个项目的索引时,我似乎很难。。。最后像我一样用柜台。:/
(另外,我知道有更多的Python和有效的方式来执行这项任务,我只是还不是很好。)
您的第一个函数不会找到像
1676
或2427
这样的数字,因为它们包含重复的数字,.index()
只返回列表项的第一次出现次数。你知道吗此外,不要使用
list
作为变量名,它会隐藏内置名称。你知道吗相关问题 更多 >
编程相关推荐