2012-06-03 217 views
1

我正在爲一個班級做一些作業,而作業是在codingbat.com。問題如下:使用while循環

返回數組中數字的總和,返回0作爲空數組。除了13號是非常不幸的,所以它不計算在13之後立即出現的數字也不算。

到目前爲止,我有這樣的:

def sum13(nums): 
    sum = 0 
    i = 0 
    while i in range(len(nums)): 
     if i == 13: 
      i += 2 
     else: 
      i += 1 
    return sum 

而且,我有這個代碼工作得更好:

def sum13(nums): 
    sum = 0 
    for i in range(len(nums)): 
    if nums[i] != 13: 
    sum += nums[i] 
    return sum 

我知道我應該使用while循環,但我只是不沒有這個。

+0

您可以指定越好*「號立即來了一個13後,也別指望」 *。這是否意味着14號不算? – pepr

+0

當然。如果函數正在查看數字列表[2,5,7,13,15,19],則目標是對除了(在本示例中)13和15之外的每個數字進行求和,它仍然將總和加上19列表。 – user1417877

+0

'range()'不應該在while循環中使用。 'range()'產生一個數字序列。 'while'需要一個布爾謂詞。這裏顯示的'while'不會通過一個循環,因爲'range'產生的第一個值是零。這被解釋爲False值。另外,'return'被錯誤地縮進。 – pepr

回答

1

看起來你幾乎在那裏;你只需要在適當的地方添加nums[i]sum的值。也請重新考慮您的return sum系列的縮進。

+0

感謝您對Ant P的幫助,我仍然沒有想到它,但我只是想說,在我發佈後,我開始編輯我的文章,看起來在您回答後我改變了它,因此,我不認爲你給出的答案對我錯誤的解決方案是準確的。 – user1417877

+0

對不起,您還在檢查索引('i')是否爲13,而不是該索引處的元素('nums [i]')。 –

0

通常在不使用range()的情況下使用for循環。這種循環(在Python中)通常用於循環元素值,而不是通過索引值。當您需要的索引,使用enumerate()函數來獲得兩個指標和元素值,像這樣(但你並不需要的情況下):

... 
for i, e in enumerate(nums): 
    do something with index and/or the element 
... 

的問題是不相關的指數值。這樣,for/while解決方案僅在訪問數組的元素時有所不同。您需要使用while編制索引,但您不需要使用for編制索引。

您的while方法的問題還在於,您不能簡單地跳過值13之後的索引,因爲下一個元素也可以包含13.您需要存儲上一個元素的值,並使用它來決定當前值應添加到sum或不。在forwhile解決方案中都是一樣的。像這樣:

last = 0 # init; whatever value different from 13 
sum = 0 
the chosen kind of loop: 
    e ... # current element from nums 
    if e != 13 bool_operator_here last != 13: # think about what boolean operator is 
     add the element to the sum 
    remember e as the last element for the next loop 
sum contains the result 

[編輯稍後]好的,你放棄了。這裏是解決該問題的代碼:

def sumNot13for(nums): 
    last = 0 # init; whatever value different from 13 
    sum = 0 
    for e in nums: 
     if e != 13 and last != 13: 
      sum += e  # add the element to the sum 
     last = e   # remember e as the last element for the next loop 
    return sum 


def sumNot13while(nums): 
    last = 0 # init; whatever value different from 13 
    sum = 0 
    i = 0  # lists/arrays use zero-based indexing 
    while i < len(nums): 
     e = nums[i]   # get the current element 
     if e != 13 and last != 13: 
      sum += e  # add the element to the sum 
     last = e   # remember e as the last element for the next loop 
     i += 1    # the index must be incremented for the next loop 
    return sum 


if __name__ == '__main__': 
    print(sumNot13for([2, 5, 7, 13, 15, 19])) 
    print(sumNot13while([2, 5, 7, 13, 15, 19])) 

    print(sumNot13for([2, 5, 7, 13, 13, 13, 13, 13, 13, 15, 19])) 
    print(sumNot13while([2, 5, 7, 13, 13, 13, 13, 13, 13, 15, 19])) 
+0

感謝您的提示pepr,我切換標籤添加作業。第一次在這裏發佈,所以我很感謝適當的禮儀幫助。 – user1417877

+0

我修改了答案以反映任務的說明。 – pepr

+0

感謝您的幫助。我明白你在說什麼,我仍然不明白。不要擔心,在這之後我不再繼續編程課程,而且課程已經快結束了,不到一週的時間了!我很高興幾乎可以做到這一點。 :) – user1417877