你能解释一下这里有什么问题吗?在我看来,这段代码就像一堆垃圾,但有正确的解决方法。我请你原谅我的英语。这个角色的任务:
有些数字有一些有趣的特性。例如:
89 --> 8¹ + 9² = 89 * 1
695 --> 6² + 9³ + 5⁴= 1390 = 695 * 2
46288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51
给定一个正整数n写为abcd ...(a,b,c,d ...是数字)和一个正整数p,我们想找到一个正整数k,如果它存在,如总和的数字n采取的连续幂p等于k * n。换句话说:
Is there an integer k such as : (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + ...) = n * k
如果是,我们将返回k,如果不是,返回-1。
注:n,p总是严格的正整数。dig_pow(89, 1)
应返回1,因为8 ¹ +9 ² = 89 = 89 * 1dig_pow(92, 1)
应返回-1,因为没有k,例如9 ¹ +2 ²等于92 * kdig_pow(695, 2)
应返回2,因为6平方+9立方+5立方= 1390 = 695 * 2dig_pow(46288, 3)
应返回51,因为4 ³ +6 + 2 + 8 + 8 = 2360688 = 46288 * 51
def dig_pow(n, p):
if n > 0 and p > 0:
b = []
a = str(n)
result = []
for i in a:
b.append(int(i))
for x in b:
if p != 1:
result.append(x ** p)
p += 1
else:
result.append(x ** (p + 1))
if int((sum(result)) / n) < 1:
return -1
elif int((sum(result)) / n) < 2:
return 1
else:
return int((sum(result)) / n)
测试结果:
测试通过
测试通过
测试通过
测试通过
3263应等于-1
3条答案
按热度按时间e4yzc0pl1#
我不知道你用的是哪个版本的Python,下面的代码是Python 3的,如果我没理解错的话,代码可以简单到
主要的问题是,在你的目标中,你只有两个返回选项,但是你写了
if elif else
,这肯定是不必要的,而且会导致问题和bug。另外,使用
if
而在另一个分支中不返回任何东西通常不是一个好主意(请参阅assert
部分)。当然,如果您不喜欢它,可以回到if
。rdrgkggo2#
我相信这可以工作以及我发现它更容易阅读一点,但它肯定可以改进:
1szpjjfi3#
这是一个简单的例子:
我选择使用这个版本,因为我仍然是一个初学者,这可以用这个alt方式:
至于完整的解决方案,它是这样的: