Python:核心知識點整理大全14-筆記

目錄

?編輯

7.2.2 讓用戶選擇何時退出

parrot.py

7.2.3 使用標志

7.2.4 使用 break 退出循環

cities.py

7.2.5 在循環中使用 continue

counting.py

7.2.6 避免無限循環

counting.py

7.3 使用 while 循環來處理列表和字典

7.3.1 在列表之間移動元素

confirmed_users.py

往期快速傳送門👆(在文章最后):


7.2.2 讓用戶選擇何時退出

可使用while循環讓程序在用戶愿意時不斷地運行,如下面的程序parrot.py所示。我們在其中 定義了一個退出值,只要用戶輸入的不是這個值,程序就接著運行:

parrot.py
1 prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
2 message = ""
3 while message != 'quit':message = input(prompt)print(message)

在1處,我們定義了一條提示消息,告訴用戶他有兩個選擇:要么輸入一條消息,要么輸 入退出值(這里為'quit')。接下來,我們創建了一個變量——message(見2),用于存儲用戶 輸入的值。我們將變量message的初始值設置為空字符串"",讓Python首次執行while代碼行時有 可供檢查的東西。Python首次執行while語句時,需要將message的值與'quit'進行比較,但此時 用戶還沒有輸入。如果沒有可供比較的東西,Python將無法繼續運行程序。為解決這個問題, 我們必須給變量message指定一個初始值。雖然這個初始值只是一個空字符串,但符合要求,讓 Python能夠執行while循環所需的比較。只要message的值不是'quit',這個循環(見3)就會不 斷運行。

首次遇到這個循環時,message是一個空字符串,因此Python進入這個循環。執行到代碼行 message = input(prompt)時,Python顯示提示消息,并等待用戶輸入。不管用戶輸入是什么,都 將存儲到變量message中并打印出來;接下來,Python重新檢查while語句中的條件。只要用戶輸 入的不是單詞'quit',Python就會再次顯示提示消息并等待用戶輸入。等到用戶終于輸入'quit' 后,Python停止執行while循環,而整個程序也到此結束:

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello everyone!
Hello everyone!
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello again. 
Hello again.
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit
quit 

這個程序很好,唯一美中不足的是,它將單詞'quit'也作為一條消息打印了出來。為修復這 種問題,只需使用一個簡單的if測試:

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
message = ""
while message != 'quit':message = input(prompt)if message != 'quit':
print(message) 

現在,程序在顯示消息前將做簡單的檢查,僅在消息不是退出值時才打印它:

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello everyone!
Hello everyone!
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello again.
Hello again.
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit 

7.2.3 使用標志

在前一個示例中,我們讓程序在滿足指定條件時就執行特定的任務。但在更復雜的程序中, 很多不同的事件都會導致程序停止運行;在這種情況下,該怎么辦呢?

例如,在游戲中,多種事件都可能導致游戲結束,如玩家一艘飛船都沒有了或要保護的城市 都被摧毀了。導致程序結束的事件有很多時,如果在一條while語句中檢查所有這些條件,將既 復雜又困難。

在要求很多條件都滿足才繼續運行的程序中,可定義一個變量,用于判斷整個程序是否處于 活動狀態。這個變量被稱為標志,充當了程序的交通信號燈。你可讓程序在標志為True時繼續運 行,并在任何事件導致標志的值為False時讓程序停止運行。這樣,在while語句中就只需檢查一 個條件——標志的當前值是否為True,并將所有測試(是否發生了應將標志設置為False的事件) 都放在其他地方,從而讓程序變得更為整潔。

下面來在前一節的程序parrot.py中添加一個標志。我們把這個標志命名為active(可給它指 定任何名稱),它將用于判斷程序是否應繼續運行:

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
1 active = True
2 while active:message = input(prompt)
3 if message == 'quit':active = False
4 else:print(message)

我們將變量active設置成了True(見1),讓程序最初處于活動狀態。這樣做簡化了while語 句,因為不需要在其中做任何比較——相關的邏輯由程序的其他部分處理。只要變量active為 True,循環就將繼續運行(見2)。 在while循環中,我們在用戶輸入后使用一條if語句來檢查變量message的值。如果用戶輸入 的是'quit'(見3),我們就將變量active設置為False,這將導致while循環不再繼續執行。如果 用戶輸入的不是'quit'(見4),我們就將輸入作為一條消息打印出來。

這個程序的輸出與前一個示例相同。在前一個示例中,我們將條件測試直接放在了while語句 中,而在這個程序中,我們使用了一個標志來指出程序是否處于活動狀態,這樣如果要添加測試 (如elif語句)以檢查是否發生了其他導致active變為False的事件,將很容易。在復雜的程序中, 如很多事件都會導致程序停止運行的游戲中,標志很有用:在其中的任何一個事件導致活動標志 變成False時,主游戲循環將退出,此時可顯示一條游戲結束消息,并讓用戶選擇是否要重新玩。

7.2.4 使用 break 退出循環

要立即退出while循環,不再運行循環中余下的代碼,也不管條件測試的結果如何,可使用 break語句。break語句用于控制程序流程,可使用它來控制哪些代碼行將執行,哪些代碼行不執 行,從而讓程序按你的要求執行你要執行的代碼。 例如,來看一個讓用戶指出他到過哪些地方的程序。在這個程序中,我們可以在用戶輸入 'quit'后使用break語句立即退出while循環:

cities.py
prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.) "
1 while True:city = input(prompt)if city == 'quit':break 
else:print("I'd love to go to " + city.title() + "!") 

以while True打頭的循環(見?)將不斷運行,直到遇到break語句。這個程序中的循環不斷 輸入用戶到過的城市的名字,直到他輸入'quit'為止。用戶輸入'quit'后,將執行break語句,導 致Python退出循環:

Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) New York
I'd love to go to New York!
Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) San Francisco
I'd love to go to San Francisco!
Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) quit

注意 在任何Python循環中都可使用break語句。例如,可使用break語句來退出遍歷列表或字典 的for循環。


7.2.5 在循環中使用 continue

要返回到循環開頭,并根據條件測試結果決定是否繼續執行循環,可使用continue語句,它 不像break語句那樣不再執行余下的代碼并退出整個循環。例如,來看一個從1數到10,但只打印 其中偶數的循環:

counting.py
current_number = 0
while current_number < 10:
1 current_number += 1if current_number % 2 == 0:continueprint(current_number)

我們首先將current_number設置成了0,由于它小于10,Python進入while循環。進入循環后, 我們以步長1的方式往上數(見1),因此current_number為1。接下來,if語句檢查current_number 與2的求模運算結果。如果結果為0(意味著current_number可被2整除),就執行continue語句, 讓Python忽略余下的代碼,并返回到循環的開頭。如果當前的數字不能被2整除,就執行循環中 余下的代碼,Python將這個數字打印出來:

1
3
5
7
9 

7.2.6 避免無限循環

每個while循環都必須有停止運行的途徑,這樣才不會沒完沒了地執行下去。例如,下面的 循環從1數到5:

counting.py
x = 1
while x <= 5:print(x)x += 1 

但如果你像下面這樣不小心遺漏了代碼行x += 1,這個循環將沒完沒了地運行:

# 這個循環將沒完沒了地運行!
x = 1
while x <= 5:print(x) 

在這里,x的初始值為1,但根本不會變,因此條件測試x <= 5始終為True,導致while循環沒 完沒了地打印1,如下所示:

1
1
1
1
--snip--

每個程序員都會偶爾因不小心而編寫出無限循環,在循環的退出條件比較微妙時尤其如此。 如果程序陷入無限循環,可按Ctrl + C,也可關閉顯示程序輸出的終端窗口。

要避免編寫無限循環,務必對每個while循環進行測試,確保它按預期那樣結束。如果你希 望程序在用戶輸入特定值時結束,可運行程序并輸入這樣的值;如果在這種情況下程序沒有結束, 請檢查程序處理這個值的方式,確認程序至少有一個這樣的地方能讓循環條件為False或讓break 語句得以執行。


注意 有些編輯器(如Sublime Text)內嵌了輸出窗口,這可能導致難以結束無限循環,因此不 得不關閉編輯器來結束無限循環。


7.3 使用 while 循環來處理列表和字典

到目前為止,我們每次都只處理了一項用戶信息:獲取用戶的輸入,再將輸入打印出來或作 出應答;循環再次運行時,我們獲悉另一個輸入值并作出響應。然而,要記錄大量的用戶和信息, 需要在while循環中使用列表和字典。

for循環是一種遍歷列表的有效方式,但在for循環中不應修改列表,否則將導致Python難以 跟蹤其中的元素。要在遍歷列表的同時對其進行修改,可使用while循環。通過將while循環同列 表和字典結合起來使用,可收集、存儲并組織大量輸入,供以后查看和顯示。

7.3.1 在列表之間移動元素

假設有一個列表,其中包含新注冊但還未驗證的網站用戶;驗證這些用戶后,如何將他們移 到另一個已驗證用戶列表中呢?一種辦法是使用一個while循環,在驗證用戶的同時將其從未驗 證用戶列表中提取出來,再將其加入到另一個已驗證用戶列表中。代碼可能類似于下面這樣:

confirmed_users.py
# 首先,創建一個待驗證用戶列表
# 和一個用于存儲已驗證用戶的空列表
1 unconfirmed_users = ['alice', 'brian', 'candace']
confirmed_users = []
# 驗證每個用戶,直到沒有未驗證用戶為止
# 將每個經過驗證的列表都移到已驗證用戶列表中
2 while unconfirmed_users:
3 current_user = unconfirmed_users.pop()print("Verifying user: " + current_user.title())
4 confirmed_users.append(current_user)
# 顯示所有已驗證的用戶
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:print(confirmed_user.title()) 

我們首先創建了一個未驗證用戶列表(見1),其中包含用戶Alice、Brian和Candace,還創 建了一個空列表,用于存儲已驗證的用戶。2處的while循環將不斷地運行,直到列表 unconfirmed_users變成空的。在這個循環中,3處的函數pop()以每次一個的方式從列表 unconfirmed_users末尾刪除未驗證的用戶。由于Candace位于列表unconfirmed_users末尾,因此 其名字將首先被刪除、存儲到變量current_user中并加入到列表confirmed_users中(見4)。接 下來是Brian,然后是Alice。

為模擬用戶驗證過程,我們打印一條驗證消息并將用戶加入到已驗證用戶列表中。未驗證用 戶列表越來越短,而已驗證用戶列表越來越長。未驗證用戶列表為空后結束循環,再打印已驗證 用戶列表: Verifyi

Verifying user: Candace
Verifying user: Brian
Verifying user: Alice
The following users have been confirmed:
Candace
Brian
Alice 

Python:核心知識點整理大全12-筆記-CSDN博客

往期快速傳送門👆(在文章最后):

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215271.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字圖像處理(實踐篇)二十二 使用opencv進行人臉、眼睛、嘴的檢測

目錄 1 xml文件 2 涉及的函數 3 實踐 使用opencv進行人臉、眼睛、嘴的檢測。 1 xml文件 方法① 下載 地址&#xff1a;https://github.com/opencv/opencv/tree/master/data/haarcascades 點擊haarcascade_frontalface_default.xml文件 對著Raw右鍵&#xff0c;選擇“鏈接…

【JVM從入門到實戰】(二)字節碼文件的組成

一、Java虛擬機的組成 二、字節碼文件的組成 字節碼文件的組成 – 應用場景 字節碼文件的組成部分-Magic魔數 什么是魔數&#xff1f; Java字節碼文件中的魔數 文件是無法通過文件擴展名來確定文件類型的&#xff0c;文件擴展名可以隨意修改&#xff0c;不影響文件的內容。…

機器學習筆記 - 隨機樣本共識(RANSAC) 算法

一、什么是 RANSAC? RANSAC(隨機樣本共識)是一種用于機器學習和計算機視覺的算法,隨機樣本共識(RANSAC)是一種迭代方法,用于根據包含異常值的數據集估計數學模型。RANSAC 算法的工作原理是識別數據集中的異常值,并使用不包含異常值的數據來估計所需的模型。 …

在Go中定義結構體

引言 圍繞具體細節構建抽象是編程語言可以提供給開發人員的最好工具。結構體允許Go開發人員描述Go程序運行的世界。結構體允許我們討論Address,而不是描述Street、 City或PostalCode的字符串。它們是我們努力告訴未來開發人員(包括我們自己)哪些數據對我們的Go程序是重要的,…

UE引擎 LandscapeGrass 實現機制分析(UE5.2)

前言 隨著電腦和手機硬件性能越來越高&#xff0c;游戲越來越追求大世界&#xff0c;而大世界非常核心的一環是植被&#xff0c;目前UE5引擎提供給植被生成的主流兩種方式為 手刷植被和LandscapeGrass(WeightMap程序化植被)。當然UE5.3推出新一代PCGFramework 節點程序化生成框…

MyBatis:緩存

MyBatis 緩存一級緩存二級緩存注 緩存 緩存&#xff0c;是數據交換的緩沖區&#xff08;臨時保存數據的地方&#xff09;。即將數據&#xff08;數據一般為頻繁查詢且不易改變&#xff09;保存在計算機內存中&#xff0c;下次讀取數據時直接從內存中獲取&#xff0c;以避免頻繁…

OpenAI接口調用示例

最近為公司做了一個ChatGPT工具&#xff0c;這里展示一下OpenAI接口的調用 前提條件 訪問OpenAI官網&#xff08;國內需要翻墻&#xff09;的賬號&#xff0c;需要sk 地址&#xff1a;https://platform.openai.com 依賴 使用開源工具調用OpenAI接口&#xff0c;依賴如下&am…

js中箭頭函數簡單介紹

1.箭頭函數是 ES6 中新增的一種函數定義方式&#xff0c; 簡單舉例為 var nameA function(a){return a} 可以用箭頭函數簡化為 var nameA a >a; 返回的是你輸入的值 比如 nameA(5) 返回的就是5 nameA(2) 返回的就是2 以上兩個表達的含義是一樣的。nameA為名字 2.…

Vue3封裝一個輪播圖組件

先看效果 編寫組件代碼 CarouselChart.vue <template><div classimg-box><el-button clickpreviousImages v-ifprops.showBtn>←</el-button><div classimg><div styledisplay: flex;gap: 20px idmove><imgclassimg-item v-for(item…

centos7部署docker

文章目錄 &#xff08;1&#xff09;安裝前準備&#xff08;2&#xff09;卸載舊版Docker&#xff08;3&#xff09;安裝docker&#xff08;4&#xff09;配置鏡像加速 &#xff08;1&#xff09;安裝前準備 在開始安裝之前&#xff0c;首先需要檢查內核版本。使用 uname -r 命…

nodejs微信小程序+python+PHP個性化服裝搭配系統APP-計算機畢業設計推薦 android

目 錄 摘 要 I ABSTRACT II 目 錄 II 第1章 緒論 1 1.1背景及意義 1 1.2 國內外研究概況 1 1.3 研究的內容 1 第2章 相關技術 3 2.1 nodejs簡介 4 2.2 express框架介紹 6 2.4 MySQL數據庫 4 第3章 系統分析 5 3.1 需求分析 5 3.2 系統可行性分析 5 3.2.1技術可行性&#xff1a;…

redis(設置密碼)配置文件詳細

1.設置賬號密碼端口 config set requirepass 123456 設置密碼為123456 config get requirepass 查看賬號密碼 auth 123456 登入的時候輸入這個確定賬號密碼 1. 首先連接到Redis服務器: redis-cli 2. 然后使用CONFIG SET命令設置requirepass參數并指定密碼: CONFIG SET requi…

【PyTorch】現代卷積神經網絡

文章目錄 1. 理論介紹1.1. 深度卷積神經網絡&#xff08;AlexNet&#xff09;1.1.1. 概述1.1.2. 模型設計 1.2. 使用塊的網絡&#xff08;VGG&#xff09;1.3. 網絡中的網絡&#xff08;NiN&#xff09;1.4. 含并行連結的網絡&#xff08;GoogLeNet&#xff09; 2. 實例解析2.1…

家具制造ERP軟件包含哪些功能?家具制造業ERP系統哪個好

不同的家具有不同的用料、品質、制造工時、營銷渠道等&#xff0c;而有些家具制造企業采用傳統的管理方式在處理物料BOM、生產實際成本核算、庫存盤點、供應商選擇、班組計件核對、生產領用以及物料追溯等方面存在不少提升空間。 與此同時也有很多的皮具制造企業借助ERP軟件優…

Linux16 ftp文件服務區、vsftpd文件系統服務安裝、lftp客戶端安裝、NFS遠程共享存儲

目錄 一、FTP基礎ftp主動模式ftp被動模式 二、vsftpd配置共享目錄編輯配置文件使用windows 訪問 三、客戶端安裝 &#xff08;lftp&#xff09;匿名用戶的一些操作&#xff08;lftp {ip}&#xff09;ftp配置本地用戶登錄配置本地用戶ftp配置文件 lftp操作 NFS遠程共享存儲安裝n…

新的側通道攻擊可泄露處理器的 Root 密碼

阿姆斯特丹自由大學的一組科學家開發了一種名為 SLAM&#xff08;Spectre Linear Address Masking&#xff09;的側信道攻擊。 該攻擊利用旨在提高新型Intel、AMD 和 Arm 處理器安全性的硬件功能&#xff0c;從內核內存中提取根密碼哈希。 重現 SLAM 攻擊所需的代碼和所有數據…

dockerfile:創建鏡像的方式,船艦自定義的鏡像

dockerfile&#xff1a;創建鏡像的方式&#xff0c;船艦自定義的鏡像 包括配置文件&#xff0c;掛載點&#xff0c;對外暴露的端口&#xff0c;設置環境變量 docker創建鏡像的方式 1、基于已有鏡像進行創建。 根據官方提供的鏡像源&#xff0c;創建鏡像&#xff0c;然后拉起…

IP與以太網的轉發操作

TCP模塊在執行連接、收發、斷開等各階段操作時&#xff0c;都需要委托IP模塊將數據封裝成包發送給通信對象。 網絡中有路由器和集線器兩種不同的轉發設備&#xff0c;它們在傳輸網絡包時有著各自的分工。 (1)路由器根據目標地址判斷下一個路由器的位置 (2)集線器在子網中將網…

docker的鏡像創建 dockerfile

dockerfile Dokcer鏡像的創建 創建鏡像有三種方法&#xff0c;分別為【基于已有鏡像創建】、【基于本地模板創建】以及【基于Dockerfile創建】。 &#xff08;1&#xff09;首先啟動一個鏡像&#xff0c;在容器里做修改 docker run -itd --name web centos:7 /bin/bash …

k8s pod日志寫入ELK的具體實現

shigen堅持更新文章的博客寫手&#xff0c;擅長Java、python、vue、shell等編程語言和各種應用程序、腳本的開發。記錄成長&#xff0c;分享認知&#xff0c;留住感動。 在上一部分&#xff0c;shigen講到了k8spod的日志寫入ELK的三種技術方案&#xff0c;并在最后展示了一下我…