如何获取函数将其输出加在一起?

时间:2018-08-14 00:47:59

标签: python algorithm

这是到目前为止我的代码行,

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的幂后将范围内的数字相加?

如果有人可以给我一些建议,我将不胜感激!任何编码的第一周,我都不知道该怎么问这个问题,为此含糊不清!

现在的问题已答复,感谢每个如此迅速答复的人!

4 个答案:

答案 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 )或递归解决(其中函数使用数据的子集调用自身)。在您的示例中,您可以设想一个函数调用自身,并且每次调用该函数都会执行以下操作:

  1. 计算j和的平方
  2. 将其添加到自减j调用返回的值中 直到1直到
  3. j

一旦达到限制条件(第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的值,但是如果您不返回任何内容,则他们将无法执行此操作,因为结果不会传递给程序。旁注,请勿大写功能。这些是上课的。