簡體   English   中英

帶中斷/繼續的 Python 循環

[英]Python loops with break/continue

給定一組整數 numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9] 至少包含兩個零。 打印位於最后兩個零之間的給定集合中的數字總和(如果最后一個零在一行中,則打印 0)。 我的嘗試:

numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
index_of_first_zero = 0
i = 0
while i < len(numbers):
    if numbers[i] == 0:
        index_first_zero = 1
        break
    i += 1

index_of_last_zero = len(numbers) - 1
i = len(numbers) - 1
while i >= 0:
    if numbers[i] == 0:
        index_of_last_zero = i
        break
    i -= 1


summa = 0
while i in range(index_of_first_zero+1, index_of_last_zero):
    summa += numbers[i]

print("Summa =", summa)

但是未輸入的是 Summa = 0 你能幫幫我嗎?

反轉列表並查找前兩個零要容易得多。

>>> numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
>>> numbers_rev = reversed(numbers)
>>> sum_ = 0
>>>
>>> for x in numbers_rev:
...    if x == 0:
...        break
>>>        
>>> for x in numbers_rev:
...    if x == 0:
...        break
...    sum_ += x
>>>    
>>> sum_
2

選擇:

numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 5, 6, 0, 6, 9]
numbers_rev = numbers[::-1]
sum_ = 0

for x in numbers_rev[numbers_rev.index(0)+1:]:
    if x == 0:
        break
    sum_ += x   

你的程序有幾個錯誤...

程序中的一個錯誤是,在最后一部分中,您告訴腳本:“當變量i在迭代器range時,請執行 [...]”

但是,您應該在那里放置一個 for 循環,而不是一會兒,將其更改為:

summa = 0
for i in range(index_of_first_zero+1, index_of_last_zero):
    summa += numbers[i]

print("Summa = ", summa)

現在該部分程序應該可以正常工作了,因為 for 循環中的i將被替換為range迭代器中的值。

相反,使用whileiindex_of_last_zero作為值,因此它永遠不會在range迭代器中。

但是,第二個錯誤是合乎邏輯的:您必須將最后兩個零之間的數字相加,而不是一個最后一個零之間的數字相加,所以最好的辦法是反轉列表,因為其他用戶已經回答了,所以整個程序必須改變:

original_list = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
reversed_list = reversed(original_list)
my_sum = 0

for num in reversed_list:
  if num == 0: 
    # it breaks here because it found the first zero, 
    # and then it will continue the cycle from the next element
    break 

# Now it won't loop again from the beginning, but from where it broke before.
for num in reversed_list:
  if num == 0:
    break
  my_sum += num

print(my_sum) # -> 2

感謝@timgeb,這個程序可以運行,並且可以使用reversed() ,它是一個返回Iterator對象的內置函數。

這里將向您闡明什么是Iterator以及如何使用它。

無論如何,我將在這里提出另一個不會使用該功能的解決方案。

original_list = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
reversed_list = [] # we'll create it manually
my_sum = 0

# let's create here the reversed_list
for i in range(len(original_list) - 1, 0, -1):
  reversed_list.append(original_list[i])

while i < len(reversed_list):
  if reversed_list[i] == 0: 
    # it breaks here because it found the first zero, 
    # and we store the index of the first zero.
    index_first_zero = i
    break 

  i += 1

# Now it won't loop again from the beginning, but from where it broke before.
for i in range(index_first_zero, len(reversed_list)):
  if reversed_list[i] == 0:
    break
  my_sum += reversed_list[i]

print(my_sum) # -> 2

這應該可以解決問題...

a = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
i1 = a[::-1].index(0)
i2 = a[::-1].index(0,i1+1)
print("Summa =",sum(a[len(a)-i2:len(a)-i1]))

我希望這清楚:)

#take your original list
numbers = [10, 0, 11, 5, 3, 0, 6, 0, 2, 0, 6, 9]
#reverse the list
numbes = numbers.reverse()

#make clear that the first zero has not been encountered
encountered_zero = False
#set the temporary sum to 0
cur_sum = 0
#for every number in your list
for number in numbers:
#if it's a zero, and you haven't passed any yet
    if number == 0 and not encountered_zero:
        #mark it
        encountered_zero = True
        #skip the rest of the iteration
        continue
    #if you have already encountered a zero
    if encountered_zero == True:
        #add every number to the sum
        cur_sum += number
    #if you encounter another zero
    if encountered_zero == True and number == 0:
        #break out of the loop, you're done
        break
#here you have your answer
summa = cur_sum 

print("Summa =", summa)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM