【问题标题】:How to break if loop and start over from next element in python如何打破if循环并从python中的下一个元素重新开始
【发布时间】:2020-09-28 19:02:18
【问题描述】:

以下代码从用户获取单个值作为 ab 作为一对值,然后如果在第一对中 B[0,0]<B[0,1] 将跳过第一对,然后第二个条件将继续直到条件满足。

假设B=([1,5],[10,3],[4,6],[2,10],[20,11],[2,8]),因此,第一对应该被跳过,第二个条件的计算是(10-3)+4=11 since 11>6继续下一个答案是11所以(11-6)+2=7因为7<10然后停止并从下一对[20,11]。因此,由于 [20,11] 满足声明 (20-11)+2=1111>8 它应该打印对的索引 4 但我的代码打印索引 1 作为答案。

import numpy as np
a = np.array(input(), dtype=int)
B=[]
for i in range(a):
    b = np.array(input().split(), dtype=int)
    B.append(b)
B = np.array(B)
for i in range(a):
    if B[i,0]<B[i,1]:
        continue
    if (B[i,0]-B[i,1])+B[i+1,0]>B[i+1,1]: 
        B[i+1,0]=B[i,0]-B[i,1]           
        print(i)
        break

【问题讨论】:

  • 我不认为我理解整个流程,但 continuebreak 有助于跳过和停止循环。
  • 为什么1 不是正确答案?在我看来,1 和 4 的条件都成立吗?如果您删除 break 语句,您还将获得 4
  • 条件应该一直到最后一对。对 1 只满足一步,它在对 [2,10] 处停止,但对 [20,11] 满足数组的其余部分,在这种情况下只是 [2,8]。我删除了中断并引发错误“索引 5 超出轴 0 的范围,大小为 5”

标签: python for-loop if-statement break continue


【解决方案1】:

让我们在交互式 python 终端的帮助下手动分解它。首先,我将代码的上半部分替换为

B = np.array(([1, 5], [10, 3], [4, 6], [2, 10], [20, 11], [2, 8]))

因为这才是相关的。

现在在您的第一次迭代中,i 设置为 0。

i = 0

第一个条件是:

B[i, 0] < B[i, 1]

计算结果为True。所以你点击了嵌套块,上面写着:

continue

流程现在回到循环语句并将 i 设置为 1。

i = 1

现在

B[i, 0] < B[i, 1]

计算为False。因此,continue 的块被跳过,我们进入下一行。具有以下条件的 if 语句:

(B[i, 0] - B[i, 1]) + B[i + 1, 0] > B[i + 1, 1]

根据我的 python shell 计算结果为True。所以我们执行嵌套块。一行一行:

// This changes some state but is irrelevant to the control flow,
B[i + 1, 0] = B[i , 0] - B[i, 1]

// So the next line is executed.
print(i)
// Since i is currently set to 1, your program prints '1'

// Now the next line is executed
break    
// This ends the execution of the loop completely.  Your code will now terminate.

所以您的代码按预期打印 1。

【讨论】:

    猜你喜欢
    • 2012-10-11
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多