1
def fillaray(size):

    num = [0] * size
    num = [random.randint(0,9) for i in range(size)]
    print(num)

    return num


def totalOdds(num, size):

    for i in range (size):
        if i % 2 ==0:
            odd = num[i]
            i+1
    print(odd)

正如您在中看到的,def totalOdds()我试图将奇数元素与数组“num”分开。我计划将奇数元素中的所有值加起来。有人可以指出我做错了什么的正确方向吗?

谢谢。

4

4 回答 4

3
  1. 你没有对它们求和
  2. i+1 什么都不做

获取所有奇数元素

odds = [n for n in nums if n%2]

只得到奇数元素的总和

sum_odds = sum(n for n in sums if n % 2)
于 2013-05-04T02:33:08.220 回答
1

可以在一行中完成:

print sum(x for x in num if x & 1)

另外,请参阅我在问题下的评论,了解您出错的地方。

于 2013-05-04T02:34:05.077 回答
0
nums = [1,2,3,4,5,6,7,8,9,10,11,12]
odds = [ n for n in nums if n%2 ]
print odds

给出:

>>> 
[1, 3, 5, 7, 9, 11]

这可以放入这样的函数中:

def getOdds(aList):
    return [ n for n in aList if n%2 ]

示例用法:

myOdds = getOdds(nums)
print("{0} has {1} odd numbers which were {2}".format(nums,len(myOdds),myOdds))
print("The odd numbers sum to {0}".format(sum(myOdds)))

产生:

>>> 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] has 6 odd numbers which were [1, 3, 5, 7, 9, 11]
The odd numbers sum to 36

至于你做错了什么,你正在迭代一个包含元素的可迭代对象0size这并不总是num(除非num确实是)的值range(size)。一旦你i表示一个num你正在迭代的值,if i%2 == 0将意味着它是偶数,如果你想要赔率,这个数字不能被 2 整除。因此,这应该更改为if i%2 != 0or 或if i%2。您还必须在循环之前odd声明列表,以便您可以在选择控制结构中附加满足条件的数字。您应该通过执行添加号码for i ...numif i%2numodd.append(i),此时您正在重新分配奇数一个新值。你也不应该增加i. 'i' 应该代表一个数字而num不是数字的索引num

于 2013-05-04T02:30:30.227 回答
0

如果您试图在数组中的奇数位置找到元素的总和:

def totalOdds(num, size):

    for i in range(size):
        if i % 2 ==0 :
            odd += num[i]
    print(odd)

如果您尝试对奇数值元素求和:

def totalOdds(num, size):

    for i in range(size):
        if num[i] % 2 !=0 :
            odd += num[i]
    print(odd)
于 2013-05-04T02:32:05.267 回答