i=0
while(i<=20): # it will print:0,2,4,6,8
if(i%2==0):
print(i)
elif(i==9):
break
else:
i += 1
continue
i+=1
第一个问题:如果我删除第二个1+=1
,它会无休止地打印0
,为什么? break
/ continue
到底做了什么?
第二个问题:我了解到当if
满足其要求时,它将无法继续运行到以下elif
和else
,因此当i = 0
符合i % 2 = even number
时{1}},因此会打印数字0
,其余的后续内容不应该运行,那么这个数字是如何增加的呢?
答案 0 :(得分:1)
如果您删除i += 1
,则在第一次迭代时,i
为0.它将转到if(i%2==0)
。它会找到True
,以便执行if
块并跳过elif
和else
。如果删除i+=1
,i
在第二次迭代时仍然为0,同样的事情会一次又一次地发生......
当if
符合其要求时,它会跳过elif
和else
,但i+=1
块中不包含elif
或else
if
阻止。 elif
,else
和break
组合在一起,但除非continue
,return
,i+=1
或异常发生。你的第二个i%2==0
真的不是很有帮助,因为上面提到的事情都没有发生在else
时。您可以删除整个i += 1
块,因为 switch (indexPath.section) {
case 0:
if (self.myInvoicesUnPaid.isEmpty){
self.displayAlertMessage("Ödenmemiş faturanız bulunmamaktadır.")
} else if (!self.myInvoicesUnPaid.isEmpty){
// Get Cell Label
let indexPath = tableView.indexPathForSelectedRow;
//let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("viewControllerIdentifer") as! invoiceDetailsViewController
viewController.passedValue = self.myUnpaidInvoicesDetails[(indexPath?.row)!]
viewController.isPaid = false
self.presentViewController(viewController, animated: true , completion: nil)
}
break
case 1:
// Get Cell Label
let indexPath = tableView.indexPathForSelectedRow;
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("viewControllerIdentifer") as! invoiceDetailsViewController
viewController.passedValue = self.myPaidInvoicesDetails[(indexPath?.row)!]
viewController.isPaid = true
self.presentViewController(viewController, animated: true , completion: nil)
break
default: break
}
会在没有它的情况下发生。
答案 1 :(得分:0)
首先注意 i 从0开始,只要 i 小于或等于 i ,我们就会输入而循环继续运行到20岁。
当 i 等于9时,条件i%2==0
为false,因此它会下降到下一个 elif ,其值为true。在这种情况下,break
关键字表示结束当前循环结构(而),因此循环结束。
现在假设 i 是偶数(以这种方式开始),第一个如果条件评估为真,导致 i 打印。它现在跳过下一个 elif 和 else ,在的同时跳到的底部; i 增加1(导致它现在变为奇数)。请注意,底部的增量不是最终 else 的一部分,因为它缩进较少。因为它与 if / elif / else 缩进相同,所以它位于同一级别而不是它的一部分(它是的一部分,而)。
当 i 为奇数时,第一个 if 评估为false,如果不是9, elif 也是如此我们进入 else 。这里 i 加1(使其均匀),continue
表示跳过循环的其余部分( while )并返回开始(跳过底部的i+=1
)。
因此我们看到的是
如果删除最终i+=1
,请查看 i 为0时发生的情况。将其从0更改为1并允许我们移至上一条件的步骤是最后的声明。因此,如果没有这个,我们就无法逃避 i = 0条件,当我们回到 while 循环的开头时,我们仍处于同一点。
答案 2 :(得分:0)
要记住的是你的i + = 1在你的while循环范围内,所以在循环结束时它总会被执行。因此,如果你删除它然后你得到一个无限循环,因为没有其他地方你增加你的i。
自从你将i初始化为0以来,你的第一个if总是被命中。因此,除非你击中你的第二个i + = 1,否则你永远不会改变你的i。
据我所知,继续做的是跳过代码体的其余部分到循环的下一次迭代。
如果我太困惑了,请告诉我。谢谢!
答案 3 :(得分:-1)
对于break
和continue
,您应该阅读tutorial:)
简而言之,但可能还不够:
continue
退出封闭循环的当前运行(for
),而break
退出整个循环。
你的第二个问题答案较短:
你在if/elif/else
之后有缩进块 - 从那里只有一个被执行。比之后的代码(增加i
)与if
处于同一级别,因此它将在之后的任何其他语句之后运行...