如何编写一个迭代函数,使用for循环计算它返回1 + 3 + ... +(2n - 1)的前n个奇数之和?

问题描述 投票:1回答:4

假设n是一个正整数

这是我的代码:

def sum_odd_n(n):
    x =1
    for x in range(n):
        if x%2==1:
            continue
        return x + 2

但是当我在Python上运行它时,它给了我答案2。你能帮我告诉我什么是错的,我该怎么做才能解决这个问题?

python
4个回答
1
投票

由于你想找到第一个'n'个奇数的总和,我建议你使用步长= 2的范围函数。我会详细说明:

def sum_n(n):
    addition=0
    for x in range(1,2*n,2):
        addition+=x
    return addition
s=sum_n(5)
print(s)

这给出了输出:25

这里,在范围函数中,第一个属性提供起始点,第二个属性提供结束点,第三个属性给出序列中每个数字之间的差异。我希望这有帮助。


0
投票

您的代码存在一些问题。

  • 第一个是你在for循环中有一个return语句。
  • 其次,您只需访问前n个整数并检查其中哪个是奇数。你不会访问所有前n个奇数。

列表理解解决方案如下。

def sum_odd_n(n):
    # sum up the first n odd numbers
    return sum([2*i + 1 for i in range(n)])

0
投票

如果您感兴趣,这个特殊问题也有更快的解决方案。一组均匀分布的数字的平均值只是最小值加上最大值除以2(在这种情况下,(1 +(2n-1))/ 2,或者只是n)。由于您将n个数字相加,平均值为n,因此以下函数将具有您正在寻找的输出。

def sum_odd_n(n):
    return n**2

如果你需要它在技术上是一个迭代解决方案来满足一些家庭作业约束,你总是可以在循环中包装更快的解决方案,并依赖于你想要突破循环的数字的返回:

def sum_odd_n(n):
    while True:
        return n**2

-1
投票

检查这个程序它会工作:

a=int(input("how many first odd number sum you want"))

x=1

i=0

def OddSum():

      global i
      global x
      while i<=a:
            x+=2
            i+=1
      print(x)
OddSum()
© www.soinside.com 2019 - 2024. All rights reserved.