问题描述
以下代码从用户那里获得一对值,分别为a
和b
,然后如果在第一对中,B[0,0]<B[0,1]
将跳过第一对,然后第二个条件将持续到条件满足。
假设B=([1,5],[10,3],[4,6],[2,10],[20,11],8])
,因此,应该跳过第一对,并使用先前的答案(10-3)+4=11 since 11>6
,继续计算第二个条件为11
,因此,(11-6)+2=7
由于{ {1}},然后停止并从下一对7<10
重新开始。因此,由于[20,11]
满足语句[20,11]
和(20-11)+2=11
,因此它应打印成对的索引11>8
,但我的代码将打印索引4
作为答案。 / p>
1
解决方法
在交互式python终端的帮助下,我们手动进行分解。首先,我将代码的上半部分替换为
B = np.array(([1,5],[10,3],[4,6],[2,10],[20,11],8]))
因为这很重要。
现在,在您的第一次迭代中,我设置为0。
i = 0
第一个条件是:
B[i,0] < B[i,1]
,其值为True
。因此,您点击了以下嵌套块:
continue
现在,流程返回到loop语句,并将i设置为1。
i = 1
现在
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,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。