国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python的for和break循環結構中使用else語句的技巧

2019-11-25 16:46:55
字體:
來源:轉載
供稿:網友

在Python中的while或者for循環之后還可以有else子句,作用是for循環中if條件一直不滿足,則最后就執行else語句。

for i in range(5): if i == 1:  print 'in for'else: print 'in else'print 'after for-loop'# in for# in else# after for-loop

但我們發現if條件在循環的過程中成立了,最終還是執行了else語句里的內容,這是為什么呢?

好的,我們這時看下面這段程序:

for i in range(5): if i == 1:  print 'in for'  breakelse: print 'in else'print 'after for-loop'# in for# after for-loop

我們在if里添加了一個break,這是因為else是在for后執行的,但只有for循環正常退出時才會執行else語句(不是由break結束循環)。而當循環是由break語句中斷時,else就不被執行。

for/else等效于下面這段代碼,可以類似C語言那樣添加一個flag:

found = Falsefor i in range(5): if i == 1:  found = True  print 'in for'if not found: print 'not found'print 'after for-loop'# in for# after for-loop

與for語句相似,while語句中的else子句用法是一樣的,else塊在循環正常結束和循環條件不成立時執行。

對于條件語句 if- else 我們已經很熟悉了, 但是在Python中,for-else用于處理遍歷失敗。

比如我們要實現這樣一個功能:找出(81,99)中最大的完全平方數并輸出,找不到則輸出提示。

如果用c++的for循環實現,必須手動的判斷for循環是否遍歷失敗:

#include <iostream> #include<math.h> using namespace std; int main() {  int i;  float n;  for(i=99;i>81;i--)  {   n=sqrt((float)i);   if(n==int(n))   {    cout<<i;    break;   }  }  if(i==81) //邊界判斷   cout<<"didn't find it!"<<endl;  return 0; } 

而用Python的for-else則可簡單的實現這一功能:

from math import sqrt for n in range(99,81,-1):  root = sqrt(n)  if root == int(root):   print n   break else:  print"Didn't find it!" 

在for循環完整完成后才執行else;如果中途從break跳出,則連else一起跳出。

特別需要注意的是如果for中有if語句,else的縮進一定要和for對齊,如果和if對齊,則變成if-else語句,會產生意想不到的錯誤如下:

from math import sqrt for n in range(99,81,-1):  root = sqrt(n)  if root == int(root):   print n   break  else:   print"Didn't find it!" 

雖然使用for-else節省兩行代碼同時便于閱讀,但是容易和if-else混淆。貌似實際中不會常用,反而更傾向于手動處理。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 务川| 门头沟区| 温州市| 墨玉县| 博爱县| 恩平市| 四会市| 延庆县| 翁牛特旗| 四川省| 义马市| 墨江| 辽阳市| 景东| 香港| 信丰县| 新津县| 永丰县| 大厂| 建水县| 岳阳县| 乡宁县| 冷水江市| 洞头县| 项城市| 宣化县| 来安县| 剑川县| 常德市| 来凤县| 五家渠市| 博湖县| 富民县| 丹江口市| 呼伦贝尔市| 安化县| SHOW| 德化县| 钦州市| 渭南市| 萝北县|