这是到目前为止我的代码行,
def Adder (i,j,k):
if i<=j:
for x in range (i, j+1):
print(x**k)
else:
print (0)
应该做的是获取输入(i,j,k),以便[i,j]之间的每个数字都乘以k的幂。例如,Adder(3,6,2)将为3 ^ 2 + 4 ^ 2 + 5 ^ 2 + 6 ^ 2并最终输出86。我知道如何获取该函数以输出i和j之间的数字列表到K的幂,但我不知道如何使它求和,以使该函数对输出进行求和。因此,在给定的示例中,我的输出将为9、16、25、36。
是否可以做到这一点,以便在有条件的情况下,我可以生成一个输出,将数字取K的幂后将范围内的数字相加?
如果有人可以给我一些建议,我将不胜感激!任何编码的第一周,我都不知道该怎么问这个问题,为此含糊不清!
现在的问题已答复,感谢每个如此迅速答复的人!
答案 0 :(得分:3)
您可以使用内置函数sum()
def adder(i,j,k):
if i <= j:
print(sum(x**k for x in range(i,j+1)))
else:
print(0)
文档为here
答案 1 :(得分:1)
我不确定这是否是你想要的,但是
if i<=j:
sum = 0
for x in range (i, j+1):
sum = sum + x**k #sum += x**k for simplicity
这将为您提供力量之和
答案 2 :(得分:1)
看一些发布的答案,他们很好地为您提供了pythonic代码作为您的解决方案,我想我可以回答您的特定问题:
如何获取函数的输出结果?
一种可能合理的方法是迭代和增量执行计算,并将临时解决方案存储在变量中。看看您是否可以形象地看到这一点:
说(i,j,k)=(3,7,2) 我们希望输出为:135(即计算结果3 ^ 2 + 4 ^ 2 + 5 ^ 2 + 6 ^ 2 + 7 ^ 2)
使用一个变量,将其命名为 result 并将其初始化为零。
当您的for循环以 x = 3 开始时,执行 x ^ 2 并将其添加到 result 中。因此, result 现在存储了中间结果9。现在循环前进到 x = 4 。与第一次迭代相同,执行 x ^ 2 并将其添加到 result 中。现在 result 是25。您现在可以想象,到 x = 7 时, result 包含了计算 3的答案。 ^ 2 + 4 ^ 2 + 5 ^ 2 + 6 ^ 2 。让循环结束,您会发现 7 ^ 2 也添加到了 result 中。
循环完成后,输出 result 以获取汇总的答案。
注意事项:
考虑在代码中需要设置和初始化_result_变量的地方。
如果有人可以给我一些建议,我将不胜感激!任何编码的第一周,我都不知道该怎么问这个问题,为此含糊不清!
也许对您来说有点高级,但有助于使我意识到:
好的,让我们在此讨论中添加一些细微差别。由于这是您的第一个星期,我想记下一些我必须学习的东西,这些东西大有帮助。
迭代和递归算法
首先,确定解决方案是迭代算法。实际计算是相同的,但是对不同的累积数据执行。 在此示例中,如果我们将计算表示为称为ADDER(i,j,k)的操作,则:
ADDER(3,7,2)= ADDER(3,6,2)+ 7 ^ 2
ADDER(3,6,2)= ADDER(3,5,2)+ 6 ^ 2
ADDER(3,5,2)= ADDER(3,4,2)+ 5 ^ 2
ADDER(3,4,2)= ADDER(3,3,2)+ 4 ^ 2
ADDER(3,3,2)= 0 + 3 ^ 2
这类问题可以迭代解决(例如使用循环,例如 while 或 for )或递归解决(其中函数使用数据的子集调用自身)。在您的示例中,您可以设想一个函数调用自身,并且每次调用该函数都会执行以下操作:
一旦达到限制条件(第3点),就会触发沿途排队的一系列附加操作。
在使用成语之前学习讲语言
我可能对此不满意,但是您会遇到很多建议,它们显示了标准解决方案的python惯用法。您的示例的惯用解决方案如下:
def adder(i,j,k):
return sum(x**k for x in range(i,j+1)) if i<=j else 0
但是对于初学者来说,这模糊了很多“科学”。踏上更简单的道路成为初学者,这会带来更大的回报。一旦您对使用python设计和实现算法有了自己的基本了解,那么这些成语就会变得有意义。
为了便于您理解上述惯用语,以下是其用法的说明:
它调用称为 sum 的标准库函数,该函数可以在列表以及迭代器上进行操作。我们以 generator表达式作为其参数,通过“滴灌” sum 函数并将 x ^ k 值作为参数来完成迭代器的工作。迭代范围(1,j + 1)。在N(j-i)任意大的情况下,使用标准列表可能会导致巨大的内存开销和性能劣势。使用生成器表达式可以避免这些问题,因为迭代器(生成器表达式创建的迭代器)将使用新值覆盖同一块内存,并且仅在需要时才生成下一个值。
当然,只有在我<= j时才执行所有这些操作,否则它将返回0。
最后,要犯错误并提出问题。社区很棒而且很有帮助
答案 3 :(得分:0)
好吧,不要使用打印。像这样修改您的功能很容易,
if i<=j:
s = 0
for x in range (i, j+1):
s += x**k
return s # print(s) if you really want to
else:
return 0
通常,功能不打印任何内容。相反,它们返回其调用者的值以进行打印或进一步处理。例如,某人可能想查找Adder(3, 6, 2)+1
的值,但是如果您不返回任何内容,则他们将无法执行此操作,因为结果不会传递给程序。旁注,请勿大写功能。这些是上课的。