Python趣味入門5:迴圈語句while

dosboy發表於2020-08-25

跟著小牛叔,找準正確程式設計入門姿勢,每天只要閱讀10分鐘。

任何語言都有迴圈語句,在Python裡迴圈更是變化無窮,有基本的迴圈,有迴圈else語句,引伸出來的還有迭代器、推導式,我們們先學習最簡單的一種。

While迴圈

 

while 條件判斷語句:
  子程式碼1
  子程式碼2
  子程式碼3
  …
  子程式碼N
主程式碼1

while語句的格式與if類似,子程式碼必須進行縮排4個空格,作用卻是大不相同。當它執行第一次迴圈時,判斷條件是否成立,如果條件成立,就從子程式碼1開始執行到子程式碼N,然後程式會回到while語句再次判斷條件是否成立,如果成立就繼續從子程式碼1開始執行,如果不成立就跳過子程式碼段,系統從主程式碼1開始往後執行。

話說在North Kingdom北境國的北面夜王控制了塞外,曾經春夏交織,現在每天雪花連綿,似乎進入了無限迴圈狀態。

類似於永不停止的重複動作即無限迴圈,實現它需要在寫條件判斷語句時,直接寫上永遠為True的判斷結果,簡單直接使用True,以實現了無窮迴圈的功能,如下面的程式所示:

>>> while True: 
    print('下雪') 
下雪 
下雪 
下雪 
下雪 
下雪 
下雪 (按下Ctrl+C來終止程式無窮執行) 
KeyboardInterrupt    
>>> 

身為北境守衛者的我 - 中文名雪諾(英文名Snow)決定越過長城北,解決掉夜王。國王Stannis請我在王宮500個最強壯的衛兵中,挑選10人同行,由於時間有限不可能全部面試500人為了公平,於是我決定由電腦隨機挑出1個人,通過後即出隊入選,這樣重複多次直到10人選滿為止。
關於這個挑人程式,現在分析如下:

  • 首先定義隊伍人數,初始值是500。
  • 面試後如選中一人,隊伍中會少一個人。
  • 如果未選中,讓其歸隊,隊伍人數不會變化。
  • 無論上一次有沒有選中,只需要在剩下的人數裡再繼續產生隨機數(注意:並不是從原來整個500人中產生)。
  • 如果剩下的人數是490人就意味著10人已經選滿,迴圈結束。
    至此邏輯已經很清楚了,看看您是不是已經把程式寫出來了呢?

本程式從500人的隊伍裡,隨機挑出,如果滿意就入選,不滿意就歸隊

1 import random  #使用隨機數工具 
2 volunteer = 500 
3 while volunteer > 500-10: #當剩下的人數大於490時才繼續面試     
4     test = random.randint(1,volunteer) 
5     if(input('還剩下'+ str(volunteer)+'人,這是隨機挑選的第'+str(test)+'號,您滿意麼(y/n)?') == 'y'):
6      volunteer -= 1 #入選後隊伍就會少1人 
7 print('您已經選足了10個人!') 

 

上面程式使用了無限迴圈,為實現滿足選定10人就退出的功能,在迴圈裡進行了條件判斷,滿足條件退出Python,程式執行結果如下所示:

還剩下500人,這是隨機挑選的第329號,您滿意麼(y/n)?y
還剩下499人,這是隨機挑選的第113號,您滿意麼(y/n)?n
還剩下499人,這是隨機挑選的第176號,您滿意麼(y/n)?y
還剩下498人,這是隨機挑選的第243號,您滿意麼(y/n)?y
還剩下497人,這是隨機挑選的第315號,您滿意麼(y/n)?y
還剩下496人,這是隨機挑選的第413號,您滿意麼(y/n)?y
還剩下495人,這是隨機挑選的第375號,您滿意麼(y/n)?y
還剩下494人,這是隨機挑選的第440號,您滿意麼(y/n)?y
還剩下493人,這是隨機挑選的第389號,您滿意麼(y/n)?y
還剩下492人,這是隨機挑選的第388號,您滿意麼(y/n)?y
還剩下491人,這是隨機挑選的第231號,您滿意麼(y/n)?y
您已經選足了10個人!

在執行過程中第2次輸入不滿意n時,可以看到剩下的人數499並沒有變化。

在這裡迴圈和判斷都是之前講過的內容,重點是下面的語句:

import random

這句話是告訴計算機,我馬上要使用random模組,模組就是系統中提供高階功能的工具包。為什麼要執行這條語句呢?主要是因為系統內建會提供一些功能,比如條件語句、判斷語句、計算語句,為了節約記憶體不可能把所有功能都提供,所以當我們使用手邊沒有的工具時(比如本程式用的隨機數)就要宣告,好讓程式載入到記憶體裡。

下面的語句裡,volunteer是變數,表示剩下的人總數,randint()這種帶括號形式的寫法,表示函式的執行,該函式返回從1到volunteer之間(也包括)任意隨機數(代表抽出的人的編號),最後把抽出的編號賦值儲存於test變數。

test = random.randint(1,volunteer) 

說明:當執行外部模組的函式,要用英文符號圓點.

Python趣味入門4:while迴圈示例
 

小牛叔傾情出品,史上更簡單有趣的Python入門系列教程,用認真、上心的原創帶你飛。

更多精彩的內容,可以加關注作者,不走失。

相關文章