通常在不使用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
或不。在for
和while
解決方案中都是一樣的。像這樣:
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]))
您可以指定越好*「號立即來了一個13後,也別指望」 *。這是否意味着14號不算? – pepr
當然。如果函數正在查看數字列表[2,5,7,13,15,19],則目標是對除了(在本示例中)13和15之外的每個數字進行求和,它仍然將總和加上19列表。 – user1417877
'range()'不應該在while循環中使用。 'range()'產生一個數字序列。 'while'需要一個布爾謂詞。這裏顯示的'while'不會通過一個循環,因爲'range'產生的第一個值是零。這被解釋爲False值。另外,'return'被錯誤地縮進。 – pepr