gpt4 book ai didi

python - 密码战。一些测试通过了,但我需要得到输出以下错误的测试 : 3263 should equal -1

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:16:23 25 4
gpt4 key购买 nike

你能解释一下这里有什么问题吗?在我看来,这段代码就像一堆废话,但解决方案是正确的。请原谅我的英语。这个型的任务:

一些数字具有有趣的特性。例如:

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 * 1

dig_pow(92, 1) 应该返回 -1,因为没有 k,例如 9¹ + 2² 等于 92 * k

dig_pow(695, 2) 应该返回 2,因为 6² + 9³ + 5⁴= 1390 = 695 * 2

dig_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

最佳答案

我不知道您使用的 Python 的确切版本。以下代码在 Python 3 中。如果我没听错,代码可以很简单

def dig_pow(n, p):
assert n > 0 and p > 0
digits = (int(i) for i in str(n)) # replaces your a,b part with generator
result = 0 # you don't use result as a list, so an int suffice
for x in digits: # why do you need if in the loop? (am I missing something?)
result += x ** p
p += 1

if result % n: # you just test for divisibility
return -1
else:
return result // n

主要问题是,在您的目标中,您只有两个返回选项,但是您编写了 if elif else,这绝对是不必要的,并且会导致问题和错误。 % 是模运算符。

另外,有一个 if 而在另一个分支中不返回任何东西通常不是一个好主意(参见 assert 部分)。当然,如果您不喜欢它,只需回退到 if

关于python - 密码战。一些测试通过了,但我需要得到输出以下错误的测试 : 3263 should equal -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com