2013-05-04 53 views
0
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」中分離奇數元素。我打算將奇數元素中的所有值加起來。有人能指出我正確的方向嗎?如何在數組中找到奇怪的元素?

謝謝。

+1

你想添加奇怪的元素嗎?還是奇數指數的元素? – asheeshr 2013-05-04 02:31:14

+2

你的'totalOdds'函數....你不需要增加'i'; '我在範圍'位已經這樣做了。你在循環的外面打印它只會打印一個數字(最後一個)。 – mpen 2013-05-04 02:31:54

回答

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 

至於你做錯了什麼,你遍歷包含的元素0可迭代到size這不會總是num值(除非num確實range(size))。一旦你讓i代表你正在迭代的num的值,if i%2 == 0將意味着它的,甚至,如果你想賠率,數字musk't可以被二整除。因此,應將其更改爲if i%2 != 0if i%2。您還需要在for i ...循環之前聲明odd清單,因此您可以追加符合if i%2選擇控制結構中條件的num中的數字。您應該通過執行odd.append(i)來追加num中的號碼,此時您將重新分配一個新值。你也不應遞增i。 '我'應該代表num中的一個數字,而不是索引中的數字num

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) 
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) 
+0

好的答案,但不需要你的'sum'中的第二組parens,如果n%2'直接到'sum',你可以將n和n和。 – 2013-05-04 02:36:38

+0

我對[]中的for循環和索引不熟悉。 (如果n%2,n爲n)。你能向我解釋那是如何工作的嗎? – user2348621 2013-05-04 02:38:23

+0

@NolenRoyalty:不錯!新知識,謝謝! – marcadian 2013-05-04 02:42:51

1

可以在一個行完成的總和:

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

此外,請參閱我在你出錯的地方問題下發表評論。

相關問題