在本篇博客中,你將學習如何讓程序不斷地運行,讓用戶能夠根據需要輸入信息,並在程序中使用這些信息。
爲此,你需要使用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決心....
只是作者會在很久以後再更新了,因爲我也要去學習,當我徹底掌握函數和類等基礎知識的時候,我會再次歸來。
建議你們每過一段時間就複習以往所有博客,確保把這些基礎知識變成長期記憶。