何為死循環:在編程中,一個無法靠自身的控制終止的循環被稱為死循環。
死循環的使用:死循環並非一無是處,C語言中死循環while true或 while 1 是單片機編程的普遍用法,死循環一直運行等待中斷程序發生,然后去處理中斷程序。
在Python中,我們也可以利用死循環完成特定功能。
下面這段死循環程序可以用來一直捕捉輸入異常。
while True: try: x=int(input("Please enter a number:")) break except ValueError: print("Oops,that was no valid number. Try again ...")
后測循環:
假設程序需要用戶輸入一個非負數
如果輸入錯誤,重新提示用戶輸入直到得到一個有效值。
偽代碼如下:
重復執行以下語句
接受外部輸入數據
直到外部輸入為負值為止
循環不斷接收輸入,直到接受到合法的值為止
條件判斷在循環體后面,稱之為后測循環(即前面提到過的“直到型循環”)
后測循環至少執行一次循環體
后測循環實現:
Python沒有后測循環語句,但可以通過while間接實現。
思想是設計一個循環條件,直接進入循環體,循環至少執行一次,相當於后測循環。
number=-1 while number<0: number=eval(input("Enter a positive number:"))
break語句也可以用來實現后測循環:
while True: number=eval(input("Enter a positive number:")) if x>=0:break #如果數字有效則跳出循環
#while語句體永遠執行,if條件決定循環退出
另外:if語句體只包含一個語句時,break可以跟在if同一行。這種結構被稱為循環出口。
#后測循環代碼1:
在前面的while版本的后測循環代碼中添加一個if語句,使得在有效輸入時不顯示警告。
修改代碼如下:
number=-1 while number<0: number=eval(input("Enter a positive number:")) if number<0: print("The number you entered was not positive")
在上面這段代碼中,合法性檢驗重復了兩次。
#后測循環代碼2:
限定合法性檢驗只判斷一次,需為if添加匹配的else語句來實現
修改后的代碼如下:
while True: number=eval(input("Enter a positive number:")) if x>=0: break ##如果數字有效則跳出循環 else: print("The number you entered was not positive")
半路循環:運用break中途退出循環,循環出口在循環體中部,被稱為半路循環
while True: number=eval(input("Enter a positive number:")) if x>=0:break #跳出循環 print("The number you entered was not positive")
半路循環-哨兵:半路循環退出實現哨兵循環的一般模式:
While True: Get next data item if the item is the sentinel :break process the item
我們注意:break語句是一種很方便的設計,但是,任何算法都可以使用不包含break語句的其他語句來實現
在程序中是否使用break語句,跟個人編程風格有關。
應避免在一個循環體內使用過多的break語句。因為當循環有多個出口的時候,程序邏輯就顯得不夠清晰了。