简体   繁体   中英

Sum of odd numbers using while loop in python

I'm new to programming and was asked to sum odd numbers from 1 to (2*n)-1 using a while loop. This is my attempt:

def sum_odd_n(n):
    while n<2*n:
        sum = 0
        if n%2==1:
            sum = sum+n
    return (sum)

May i know my mistake? Any help will be appreciated

The condition while n<2*n: is always true while n >= 0 , you'll have an infinite loop. Try the following

def sum_odd(n):
    value = 1
    total = 0
    while value < (2*n) - 1:
        if value % 2 == 1:
            total += value
        value += 1
    return total

>>> sum_odd(25)
576

For completeness the more pythonic way to handle this would be using sum with a generator expression

def sum_odd(n):
    return sum(i for i in range(1, 2*n -1) if i%2 == 1)

The first hint would be to take a look at your condition in while loop:

while n < 2*n

Notice that this will always be true, because if n>0 , then 2*n is always greater. If you need more help, write a comment ;)

UPDATE: I will just tell you what is wrong so if you want to try it out first on your own, stop reading. So basically you need another variable, let's say i that will loop through integers. Then you can do something like this:

def sum_odd_n(n):
    i = n
    sum = 0
    while i < 2*n:
        if i % 2 == 1:
            sum += i
        i += 1
    print sum # for python3: print(sum)

I'll try to point out the mistakes you have done, and try to offer corrections.

def sum_odd_n(n):
while n<2*n: # n will always be less than ('<') 2*n. For eg, if n=5, 5<10.
    sum = 0 # you are resetting the sum at every iteration. We need to take this outside.
    if n%2==1:
        sum = sum+n
return (sum)

Here's what I think should work.

def sum_odd_n(n):
  sum = 0  # sum is initialized here, so that it doesn't reset inside the loop
  iterator = 0
  while iterator<2*n
    if iterator%2==1:
      sum = sum+iterator # or sum += iterator
    iterator = iterator + 1 # otherwise this will be an infinite loop, as iterator will always be 0.
  return sum

Hope this works for you. :-)

This worked for me:

def sum_odd(n: int):
    total = 0
    for x in range(2*n):
        if x%2==1:
           total += x
    return total
>>> def sum_odd_n(n):
...     return sum([2 ** i  for i in range(0,n,1) ])
... 
>>> sum_odd_n(2)
3
>>> sum_odd_n(5)
31
>>> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM