紮實基礎深入篇(六):while循環帶動生產力

在本篇博客中,你將學習如何讓程序不斷地運行,讓用戶能夠根據需要輸入信息,並在程序中使用這些信息。

爲此,你需要使用wile循環讓程序不斷地運行,直到指定的條件不滿足爲止。

注意:在學習循環的路上,一定要學會剎車!

 

在進入本篇博客學習之前,我們需要解決一下上篇博客留下來的作業:

創建一個名爲cities的字典,其中將三個城市名用作鍵,對於每個城市的所屬省份、人口數、是否爲省會等等創建一個字典作爲值。

然後以更爲直觀的形式打印出這些信息在輸出窗口。

cities = {
    "咸寧": {
        '省份': '湖北',
        '人口': 6158080,
        '省會': '武漢',
        },
    "寧波": {
        '省份': '浙江',
        '人口': 11760024,
        '省會': '杭州',
        },
    '寶雞': {
        '省份': '陝西',
        '人口': 1003285,
        '省會': '西安',
        }
    }

for city, city_info in cities.items():
    shenfen = city_info['省份']
    renkou = city_info['人口']
    shenghui = city_info['省會']

    print("\n" + city+ " is in " + shenfen + ".")
    print("  這座城市的人口有 " + str(renkou) + "人.")
    print("  他所處省份的省會是"+shenghui+".")

輸出結果:

咸寧 is in 湖北.
  這座城市的人口有 6158080人.
  他所處省份的省會是武漢.

寧波 is in 浙江.
  這座城市的人口有 11760024人.
  他所處省份的省會是杭州.

寶雞 is in 陝西.
  這座城市的人口有 1003285人.
  他所處省份的省會是西安.

 

在學習while之前,我們應該接觸過input的相關知識,爲了更好地學習後面的while循環,我將快速介紹一下input()的知識:

一.input()

概念:函數input()讓程序暫停,等待用戶輸入一些文本。獲取用戶輸入後,Python將其存儲在一個變量中。

message=input("請告訴我,你想說什麼:")
print(message)

輸出情況(加粗的部分是鍵盤輸入的內容):

請告訴我,你想說什麼:我最帥
我最帥

 

使用函數input()編寫一個清晰的程序:

message=input("請告訴我,你想說什麼:")
a="我聽到你說:\n"+message
print(a)

輸出情況(加粗的部分是鍵盤輸入的內容):

請告訴我,你想說什麼:你是豬
我聽到你說:
你是豬

如果提示過長的時候,應該怎麼處理?例:

message=input("尊敬的客戶你好,由於本次服務通道出現異常,我們不得不關閉本次系統,現只能轉人工服務,你願意留下你的電話嗎:")

可以看到,提示用戶輸入的語句過長,這讓代碼不夠好看,在系統中也展現不直觀,所以採用的方法應該是:

將提示輸入的語句存儲到一個變量中,使用換行符號:

tips="尊敬的客戶你好,由於本次服務通道出現異常,我們不得不關閉本次系統,"
tips+="\n現只能轉人工服務,你願意留下你的電話嗎:"
message=input(tips)
print(message)

輸出結果(加粗的部分是鍵盤輸入的內容):

尊敬的客戶你好,由於本次服務通道出現異常,我們不得不關閉本次系統,
現只能轉人工服務,你願意留下你的電話嗎:123456789
123456789

 

處理輸入的數據學會使用int()轉換

在python3中,使用input()函數輸入的任何東西都是字符串類型,其中不乏數字,善用int()進行轉換:

math=input("請輸入一個數字讓系統計算它的平方數:")
value=int(math)**2
print("轉換後的平方數爲:",value)

輸出結果(加粗的部分是鍵盤輸入的內容):

請輸入一個數字讓系統計算它的平方數:9
轉換後的平方數爲: 81

 

雖然我們學習的是python3,但市場上很多項目還是pyton2,我們需要瞭解到關於python2的input(),有什麼不同:

在python2中,提示用戶輸入的應該使用raw_input(),都被轉爲字符串類型。

如果你直接輸入input()獲取用戶輸入,python2會解讀爲python代碼,所以往往會報錯。

 

二.while循環

 

(1).while的基礎

①不會剎車的司機不是好司機

在使用while循環的時候,新手程序員常常喜歡一寫完while就去運行,往往不可避免進入無限循環的可能,

導致終端在一直快速打印造成程序崩潰。

當你不幸陷入無限循環的時候,若不考慮損失,建議直接關閉編輯器,此方法最爲直接迅速。

也可以按Ctrl+C終止,也可以關掉顯示程序輸出的終端窗口

所以在使用while的時候,一定要善於設置循環的條件,套上一個限制,徹底對無限循環的可能斬草除根。

 

②讓用戶選擇何時退出

現在來一段極爲簡單的循環示例:

 

num=0
while num<5:
    print(num)
    num+=1

 

輸出結果:

0
1
2
3
4

解釋:設置num的初始值0,然後在while門口,發現num的值<5,滿足條件獲取進入資格,然後按照裏面的代碼辦事,出來時num已經變成了1,

這時候,while彷佛有一種魔力,又像夢境的輪迴一樣,也沒有任何的東西阻止它,於是自行開啓了月光寶盒,

再次回到了while的門口,發現它依舊小於5,於是又進去了,反反覆覆地輪迴。

直到當它的值成了5,回到while的門口時,發現不再滿足進入的條件,這時候夢醒了。

在下面的博客中,不再對while代碼進行解釋,請大家自行努力理解!

現在實現一個簡單的復讀機,當輸入退出復讀機時退出程序:

message=input("來試試復讀機吧!說出你想說的話:\n")
while message != "退出復讀機":
    print(message)
    message=input("來試試復讀機吧!說出你想說的話:\n")

輸出結果(加粗的部分是鍵盤輸入的內容):

來試試復讀機吧!說出你想說的話:
我真帥
我真帥
來試試復讀機吧!說出你想說的話:
你真醜
你真醜
來試試復讀機吧!說出你想說的話:
我真沒
我真沒
來試試復讀機吧!說出你想說的話:
退出復讀機

 

 

③在循環中使用continue

在使用while循環的過程中,有些被循環出來的條件是特殊條件,那麼此時你也想做特殊處理,

使用continue能夠讓你實現特殊處理的過程,並再回到while,並不影響循環的進行。

實現一個簡單的while讓你更加了解continue:

 

num=0
while num<5:
    print(num)
    if num==3:
        print("3剛好是我最喜歡的數字!")
        continue
    num+=1

 

輸出結果:

0
1
2
3

3剛好是我最喜歡的數字!

3剛好是我最喜歡的數字!

3剛好是我最喜歡的數字!

無限循環!!!!!!

什麼?示例代碼都弄成無限循環了,那還教個P!

不着急,這是很多新手寫while代碼時百分之90都會遇到的誤區,並沒有徹底理解continue的作用。

我在上面加粗了一段話,這段話非常重要:

當你執行continue的時候,要知道,它是直接回到了while,而直接無視了剩下的代碼,恰好剩下的代碼對循環極爲重要,

在上面的示例代碼中,對3進行continue處理後,它錯過了num+=1的代碼,直接回到了while,造成無限循環,一直停留在3。

正確的示例:

num=0
while num<5:
    print(num)
    if num==3:
        print("3剛好是我最喜歡的數字!")
        num+=1
        continue
    num+=1

輸出結果:

0
1
2
3
3剛好是我最喜歡的數字!
4

希望大家通過一錯一對的代碼示範加深對continue的理解。

 

④使用break退出循環

有了上面的continue教學之後,再來理解break就不難了:

break也可以說是特殊處理的手段,但是特殊處理之後,直接退出了while循環。

不多說,還是一樣的示例來理解:

num=0
while num<5:
    print(num)
    if num==3:
        print("晦氣,這是我最討厭的數字,我走了!")
        num+=1
        break
    num+=1

輸出結果:

0
1
2
3
晦氣,這是我最討厭的數字,我走了!

 

(2).while來處理列表和字典

①在列表之間移動元素

我們知道,對於布爾表達式來說,空列表,空元組,空集合等空值,都是False。

如果一個列表list_1含有元素,它的布爾值是True,那麼while list_1是不是就是while True,

那麼,如果這個列表突然變成了空列表,while list_1是不是變成了while False,循環就終止了?

從這個思路出發,我們有下列代碼實現:

print("公司給出了一批遊戲測試名單,要求你全部測試一遍。")
print("這些遊戲是穿越火線,QQ飛車,英雄聯盟,地下城與勇士,槍火遊俠。")
game_list=['穿越火線','QQ飛車','英雄聯盟','地下城與勇士','槍火遊俠']
finish_list=[]
while game_list:
    game=game_list.pop(0)
    print("現在你要測試的遊戲是:",game)
    state=input("你正在測試中……測試完畢時請按回車")
    print(game,"測試完畢,請進入下一個遊戲")
    game=game+"已測試完畢"
    finish_list.append(game)
print(finish_list)

輸出結果:
公司給出了一批遊戲測試名單,要求你全部測試一遍。
這些遊戲是穿越火線,QQ飛車,英雄聯盟,地下城與勇士,槍火遊俠。
現在你要測試的遊戲是: 穿越火線
你正在測試中……測試完畢時請按回車
穿越火線 測試完畢,請進入下一個遊戲
現在你要測試的遊戲是: QQ飛車
你正在測試中……測試完畢時請按回車
QQ飛車 測試完畢,請進入下一個遊戲
現在你要測試的遊戲是: 英雄聯盟
你正在測試中……測試完畢時請按回車
英雄聯盟 測試完畢,請進入下一個遊戲
現在你要測試的遊戲是: 地下城與勇士
你正在測試中……測試完畢時請按回車
地下城與勇士 測試完畢,請進入下一個遊戲
現在你要測試的遊戲是: 槍火遊俠
你正在測試中……測試完畢時請按回車
槍火遊俠 測試完畢,請進入下一個遊戲
['穿越火線已測試完畢', 'QQ飛車已測試完畢', '英雄聯盟已測試完畢', '地下城與勇士已測試完畢', '槍火遊俠已測試完畢']

②使用用戶輸入來填充字典

本次示例代碼結合了上期博客所講到的知識點,能夠起到複習鞏固的作用:

responses={}

#設置一個標誌,指出調查是否繼續
polling_active=True
while polling_active:
    #提示輸入被調查者的名字和回答
    name=input("\n你的名字是什麼?")
    response=input("你最喜歡的遊戲是什麼?")
    #將答卷存儲在字典中
    responses[name]=response

    #看看是否還能有人蔘與調查
    repeat=input("你願意另一個人來回答問題嗎?")
    if repeat =="no":
        polling_active=False
#調查結束,顯示結果
print
for name,response in responses.items():
    print(name+"最喜歡的遊戲是:"+response+".")

輸出結果(加粗的部分是鍵盤輸入的內容):

你的名字是什麼?master
你最喜歡的遊戲是什麼?穿越火線
你願意另一個人來回答問題嗎?yes

你的名字是什麼?paopao
你最喜歡的遊戲是什麼?QQ寵物
你願意另一個人來回答問題嗎?no

master最喜歡的遊戲是:穿越火線.
paopao最喜歡的遊戲是:QQ寵物.

 

 

本篇博客的內容就到這,佈置的作業也非常簡單:

編寫一個三種沒完沒了的循環,並寫出造成循環的原因,並學會終止無限循環的手段。

在往後的博客中,將會講到函數,類,對象等知識,當你看到這句話時,代表你有着決定入門python決心....

只是作者會在很久以後再更新了,因爲我也要去學習,當我徹底掌握函數和類等基礎知識的時候,我會再次歸來。

建議你們每過一段時間就複習以往所有博客,確保把這些基礎知識變成長期記憶。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章