while,翻譯成中文是「當...的時候」,這個單詞在英語中,經常用來作爲時間狀語,while ... someone do somthing,這種類型的說法是有的。在python中,它也有這個含義,不過有點區別的是,「當...時候」這個條件成立在一段範圍或者時間間隔內,從而在這段時間間隔內讓python作好多事情。就比如這樣一段情景:python
while 年齡大於60歲:-------->當年齡大於60歲的時候 退休 -------->凡是符合上述條件就執行的動做
展開想象,若是製做一道門,這道門就是用上述的條件調控開關的,假設有不少人通過這個們,報上年齡,只要年齡大於60,就退休(門打開,人能夠出去),一個接一個地這樣循環下去,忽然有一我的年齡是50,那麼這個循環在他這裏就中止,也就是這時候他不知足條件了。git
這就是while循環。寫一個嚴肅點的流程,能夠看下圖:編程
本教程有一講,是跟看官一同作一個小遊戲,在裏面作了一個猜數的遊戲,當時遇到了一個問題,就是隻能猜一兩次,若是猜不到,程序就不能繼續運行了。segmentfault
前不久,有一個在校的大學生朋友(他叫李航),給我發郵件,讓我看了他作的遊戲,可以實現屢次猜數,直到猜中爲止。這是一個多麼喜歡學習的大學生呀。less
我在這裏將他寫的程序恭錄於此,單元李航同窗不要見怪,若是李航同窗認爲此舉侵犯了本身的知識產權,能夠告知我,我立刻撤下此代碼。dom
#! /usr/bin/env python #coding:UTF-8 import random i=0 while i < 4: print'********************************' num = input('請您輸入0到9任一個數:') #李同窗用的是python3 xnum = random.randint(0,9) x = 3 - i if num == xnum: print'運氣真好,您猜對了!' break elif num > xnum: print'''您猜大了!\n哈哈,正確答案是:%s\n您還有%s次機會!''' %(xnum,x) elif num < xnum: print'''您猜小了!\n哈哈,正確答案是:%s\n您還有%s次機會!''' %(xnum,x) print'********************************' i += 1
咱們就用這段程序來分析一下,首先看while i<4,這是程序中爲猜想限制了次數,最大是三次,請看官注意,在while的循環體中的最後一句:i +=1,這就是說每次循環到最後,就給i增長1,當bool(i<4)=False的時候,就再也不循環了。python2.7
當bool(i<4)=True的時候,就執行循環體內的語句。在循環體內,讓用戶輸入一個整數,而後程序隨機選擇一個整數,最後判斷隨機生成的數和用戶輸入的數是否相等,而且用if語句判斷三種不一樣狀況。函數
根據上述代碼,看官看看是否能夠修改?學習
爲了讓用戶的體驗更爽,不妨把輸入的整數範圍擴大,在1到100之間吧。spa
num_input = raw_input("please input one integer that is in 1 to 100:") #我用的是python2.7,在輸入指令上區別於李同窗
程序用num_input變量接收了輸入的內容。可是,請列位看官必定要注意,看到這裏想睡覺的要打起精神了,我要分享一個多年編程經驗,請牢記:任何用戶輸入的內容都是不可靠的。這句話含義深入,可是,這裏不作過多的解釋,須要各位在隨後的編程生涯中體驗了。爲此,咱們要檢驗用戶輸入的是否符合咱們的要求,咱們要求用戶輸入的是1到100之間的整數,那麼就要作以下檢驗:
爲此,要作:
if not num_input.isdigit(): #str.isdigit()是用來判斷字符串是否純粹由數字組成 print "Please input interger." elif int(num_input)<0 and int(num_input)>=100: print "The number should be in 1 to 100." else: pass #這裏用pass,意思是暫時省略,若是知足了前面提出的要求,就該執行此處語句
再看看李航同窗的程序,在循環體內產生一個隨機的數字,這樣用戶每次輸入,面對的都是一個新的隨機數字。這樣的猜數字遊戲難度太大了。我但願是程序產生一個數字,直到猜中,都是這個數字。因此,要把產生隨機數字這個指令移動到循環以前。
import random number = random.randint(1,100) while True: #不限制用戶的次數了 ...
觀察李同窗的程序,還有一點須要向列位顯明的,那就是在條件表達式中,兩邊最好是同種類型數據,上面的程序中有:num>xnum樣式的條件表達式,而一邊是程序生成的int類型數據,一邊是經過輸入函數獲得的str類型數據。在某些狀況下能夠運行,爲何?看官能理解嗎?都是數字的時候,是能夠的。可是,這樣很差。
那麼,按照這種思路,把這個猜數字程序重寫一下:
#!/usr/bin/env python #coding:utf-8 import random number = random.randint(1,100) guess = 0 while True: num_input = raw_input("please input one integer that is in 1 to 100:") guess +=1 if not num_input.isdigit(): print "Please input interger." elif int(num_input)<0 and int(num_input)>=100: print "The number should be in 1 to 100." else: if number==int(num_input): print "OK, you are good.It is only %d, then you successed."%guess break elif number>int(num_input): print "your number is more less." elif number<int(num_input): print "your number is bigger." else: print "There is something bad, I will not work"
以上供參考,看官還可改進。
break,在上面的例子中已經出現了,其含義就是要在這個地方中斷循環,跳出循環體。下面這個簡要的例子更明顯:
#!/usr/bin/env python #coding:utf-8 a = 8 while a: if a%2==0: break else: print "%d is odd number"%a a = 0 print "%d is even number"%a
a=8的時候,執行循環體中的break,跳出玄幻,執行最後的打印語句,獲得結果:
8 is even number
若是a=9,則要執行else裏面的的print,而後a=0,循環就在執行一次,又break了,獲得結果:
9 is odd number 0 is even number
而continue則是要從當前位置(即continue所在的位置)跳到循環體的最後一行的後面(不執行最後一行),對一個循環體來說,就如同首尾銜接同樣,最後一行的後面是哪裏呢?固然是開始了。
#!/usr/bin/env python #coding:utf-8 a = 9 while a: if a%2==0: a -=1 continue #若是是偶數,就返回循環的開始 else: print "%d is odd number"%a #若是是奇數,就打印出來 a -=1
其實,對於這兩東西,我我的在編程中不多用到。我有一個執拗的觀念,儘可能將條件在循環以前作足,不要在循環中跳來跳去,不只可讀性降低,有時候本身也糊塗了。
這兩個的配合有點相似if ... else,只須要一個例子列爲就理解了,固然,一遇到else了,就意味着已經不在while循環內了。
#!/usr/bin/env python count = 0 while count < 5: print count, " is less than 5" count = count + 1 else: print count, " is not less than 5"
執行結果:
0 is less than 5 1 is less than 5 2 is less than 5 3 is less than 5 4 is less than 5 5 is not less than 5