課程:B站大學
記錄python學習,直到學會基本的爬蟲,使用python搭建接口自動化測試就算學會了,在進階webui自動化,app自動化
分支語句那些事兒
- 循環的類型
- 循環的作用
- 循環的構成要素
- while 循環
- while 循環實戰
- 循環語句 for-in
- 實踐是檢驗真理的唯一標準
循環的類型
- 重復一定次數的循環,稱為計次循環。 比如跑步五公里,每公里就是一個計次單位。
- 直到條件不滿足時才停止重復執行的循環,稱為條件循環。 比如直到跑不動為止,這沒有具體的跑量,結束跑步的條件是跑不動了。
Python 提供了兩種類型的循環可以應對不同的使用場景。
for-in 循環: 計次循環
while 循環: 條件循環
循環的作用
- 提高代碼復用性,減少代碼冗余
- 遍歷序列(字符串,元組,列表,字典等)
循環的構成要素
- 初始化語句: 一條或多條語句,用于完成一些初始化工作。初始在循環開始之前執行。
- 循環條件: 一般是一個布爾表達式,這個表達式能決定是否執行循環體
- 循環體: 這個部分是循環的主體,如果循環條件允許,這個代碼塊將被重復執行。
- 迭代語句: 這個部分在每次執行循環體結束后,對循環條件求值之前執行,通常用于控制循環條件中的變量向趨近于結束條件改變。
while 循環
在日常的生活中有時候循環的次數通常不會在剛開始就知道,而是滿足條件之后就停止循環。
如有一路公交車不是固定時間間隔發車,而是在人數滿足多少個之后就發車,一直到晚上的11點準時收工,那么沒有到11點的話就會一直重復,直到條件不滿足時才結束的循環,稱為條件循環。
只要條件為真,這種循環會一直持續下去,通常指的是 while 循環。
while 循環的語法
while 條件表達式: 循環體
當條件表達式的返回值為真時,則執行循環體中的語句,執行完畢后,重新判斷條件表達 式的返回值,直到表達式返回的結果為假時,退出循環。
while 循環實戰
實戰1: 求 1~10 之間所有整數的乘積。
# 保存結果的變量
result = 1
# 循環控制變量
n = 2
# 開始循環
while n <= 10:# 計算乘積result *= n# 改變循環變量向結束條件趨近n += 1# 輸出結果
print("1~10的乘積為:", result)
實戰2: 輸入密碼,直到密碼輸入正確,輸出 登錄成功。
password = "password" # 設置正確的密碼
input_password = ""while input_password != password:input_password = input("請輸入密碼: ")print("密碼正確,登錄成功!")
實戰3:在行酒令中,有一個數 7 小游戲,游戲參與者依次報數,但需要跳過所有包含 7 或 7 的整數倍的數字,編寫程序找出 1~100 范圍內所有符合該條件的數字,方便在游戲中跳過。
# 循環變量實始化
n = 1
# 循環條件
while n<=100:# 數字對7求模為0,則表示該數字是7的倍數# 將數字轉換為字符串類型,使用成員運算符判斷字符7是否在字符串中,檢查包含關系if n % 7 == 0 or "7" in str(n):# 輸出滿足條件的數字print(n)# 改變循環變量趨近于結束條件n += 1
小tips:表中保存若干個數字,計算數字的和,最小值,最大值,平均數
def func1():n_sum = 0n_max = Nonen_min = Nonedata = [23456, 234, 23, 423, 423, 423, 423, 412, 3235, 346, 47, 5687, 678, 7, 453623, 4523, 565, 786, 9789, 567,34634, 234]# for n in data:i = 0l = len(data)#打斷點查看執行邏輯while i < l:n = data[i]n_sum += nif n_max == None or n_max < n:n_max = nif n_min == None or n_min > n:n_min = ni += 1avg = n_sum / lprint(n_sum)print(n_max)print(n_min)print(avg)
思路:
首先,代碼定義了一個名為func1()的函數,用于計算數字的和、最小值、最大值和平均數。
在函數內部,定義了變量n_sum,初始值為0,用于保存數字的和;定義了變量n_max和n_min,初始值均為None,分別用于保存最大值和最小值。
創建了一個列表data,其中保存了待處理的數字數據。
使用while循環遍歷列表data中的每個元素。循環使用了索引i來訪問列表中的每個數字。
在循環內部,首先獲取當前數字n,然后執行以下操作: 將當前數字n累加到變量n_sum中,即n_sum += n。 判斷當前數字n是否為最大值: 如果n_max為None,表示當前數字是第一個數字,將n_max更新為當前數字n。 否則,判斷當前數字n是否大于n_max,如果是,則將n_max更新為當前數字n。 判斷當前數字n是否為最小值: 如果n_min為None,表示當前數字是第一個數字,將n_min更新為當前數字n。 否則,判斷當前數字n是否小于n_min,如果是,則將n_min更新為當前數字n。 更新索引i,即i += 1。
循環結束后,得到了數字的和、最大值和最小值。
接下來,計算平均數avg,即將數字的和n_sum除以列表data的長度。
通過print()函數分別打印輸出數字的和、最大值、最小值和平均數。
小tips:編寫一個 Python 程序,輸入一個整數,計算該整數的二進制表示形式
def func5():result = ""data = int(input("Num:"))# 除二取余法while data != 0:tmp = data % 2data = data // 2result = str(tmp) + resultprint(result)
代碼思路:
首先,我們初始化一個空字符串 result,用于存儲最終的二進制表示形式。
然后,使用 input 函數獲取用戶輸入的整數,并通過 int 函數將其轉換為整數類型,賦值給變量 data。
接下來,使用 while 循環進行二進制轉換。在每次循環中,我們通過 data % 2 取余操作得到當前位置的二進制值,并將其存儲在臨時變量 tmp 中。然后,使用 data // 2 進行整除操作得到下一個位置的二進制值。最后,通過 result = str(tmp) + result 將當前位置的二進制值轉換為字符串,并添加到結果字符串 result 的前面。
當整數 data 為 0 時,循環終止,表示二進制轉換完成。最后,我們使用 print(result) 將最終的二進制表示形式打印輸出到控制臺。
循環語句 for-in
一種專門處理字符串,元組,列表,字典等可迭代的序列類型數據的增強型 for 循環 for-in。
for-in 循環語法
for 迭代變量 in 對象:循環體
for-in
循環會將可迭代對象中的元素依次取出,保存到迭代變量中。
每取出一個變量,便執行一次循環體,在循環體中可以通過引用迭代變量,使用取出的數據。
遍歷可迭代對象
使用for-in循環處理可迭代對象,可以使操作過程變的極其簡單。
遍歷字符串
for-in
循環會將字符串中的每個字符依次取出,放入迭代變量中。
格式:
for 變量 in 字符串:pass
示例: 輸出前面示例中每個字符對應的ASCII碼值。
s = "Hello Hogworts!"
for c in s:print(f"字符【 {c} 】的ASCII碼為:【 {ord(c)} 】")
遍歷元組
for-in 循環會將元組中的每個元素依次取出,放入迭代變量中。
格式:
for 變量 in 元組:pass
示例: 輸出元組中每個數字的立方值
t = (1,2,3,4,5)
for n in t:print(f"數字【 {n} 】的立方值為:【 {n**3} 】")
遍歷列表
for-in 循環會將列表中的每個元素依次取出,放入迭代變量中。
格式:
for 變量 in 列表:pass
示例: 將列表中所有的請求方式轉換為大寫輸出
requestMethods = ["get", "post", "put", "delete", "patch", "header", "options", 'trace']
for method in requestMethods:print(f"請求方式【 {method} 】轉換為大寫后:【 {method.upper()} 】")
遍歷字典
字典是一個比較特殊的數據類型,由 key-value 組成,在使用 for-in 遍歷字典時,默認遍歷的是字典的所有 key 。
如果需要遍歷字典中的 value 或以 key-value 形式遍歷,需要配合使用字典中對應的方法實現。
字典的默認遍歷
for-in 循環在字典中依次取出每個元素的 key,放入迭代變量中。
格式:
for 變量 in 字典:pass
示例:
requestMethods = {"get": "用于獲取服務器上的資源,通過在URL中傳遞參數來發送請求。","post": "用于向服務器提交數據,一般用于創建新的資源或進行修改操作。","put": "用于更新服務器上的資源,一般用于修改已存在的資源的全部內容。","delete": "用于刪除服務器上的資源。"}
for method in requestMethods:print(method)
遍歷字典中的所有 key
使用字典的 keys() 方法配合 for-in 循環可以遍歷字典的所有 key,但一般不會這么操作。
格式:
for 變量 in 字典.keys():pass
示例:
requestMethods = {"get": "用于獲取服務器上的資源,通過在URL中傳遞參數來發送請求。","post": "用于向服務器提交數據,一般用于創建新的資源或進行修改操作。","put": "用于更新服務器上的資源,一般用于修改已存在的資源的全部內容。","delete": "用于刪除服務器上的資源。"}
for method in requestMethods.keys():print(method)
遍歷字典中的所有 value
使用字典的 values() 方法配合 for-in 循環可以遍歷字典的所有 value。需要注意的是,雖然可以取值,但對字典而言,這種操作也很少使用。
格式:
for 變量 in 字典.values():pass
示例:
requestMethods = {"get": "用于獲取服務器上的資源,通過在URL中傳遞參數來發送請求。","post": "用于向服務器提交數據,一般用于創建新的資源或進行修改操作。","put": "用于更新服務器上的資源,一般用于修改已存在的資源的全部內容。","delete": "用于刪除服務器上的資源。"}
for method in requestMethods.values():print(method)
遍歷字典中的所有 key-value
字典中的一個完成的元素是以 key-value 形式體現的,如果要遍歷字典中的所有元素,可以使用字典的 items() 方法配合 for-in 循環可以遍歷字典的所有 key-vakue。
items() 方法取出的字典元素會以元組形式保存到迭代變量中,適當的場景下,可以使用解包操作,直接將元素中的 key-value 保存到對應的變量中。
格式:
for 變量 in 字典.items():pass# 或for 變量1, 變量2 in 字典.items():pass
示例:
r
equestMethods = {"get": "用于獲取服務器上的資源,通過在URL中傳遞參數來發送請求。","post": "用于向服務器提交數據,一般用于創建新的資源或進行修改操作。","put": "用于更新服務器上的資源,一般用于修改已存在的資源的全部內容。","delete": "用于刪除服務器上的資源。"}
for item in requestMethods.items():print(f"請求方式【 {item[0]} 】的作用為:【 {item[1]} 】")
配合解包操作,更簡單的實現
requestMethods = {"get": "用于獲取服務器上的資源,通過在URL中傳遞參數來發送請求。","post": "用于向服務器提交數據,一般用于創建新的資源或進行修改操作。","put": "用于更新服務器上的資源,一般用于修改已存在的資源的全部內容。","delete": "用于刪除服務器上的資源。"}
for key, value in requestMethods.items():print(f"請求方式【 {key} 】的作用為:【 {value} 】")
小tips:編寫一個Python程序,來計算給定文本中每個單詞出現的次數。
text = """
Python is a popular programming language. It is widely used for web development, data science, and more.
Python has a simple and readable syntax, which makes it great for beginners.
"""
words = text.lower().split() # 將文本轉換為小寫并分割為單詞
word_count = {} # 用于存儲單詞和出現次數的字典for word in words:word = word.strip(".,!?") # 去除單詞中的標點符號if word in word_count:word_count[word] += 1else:word_count[word] = 1# 輸出詞頻統計結果
for word, count in word_count.items():print(f"{word}: {count}")
小tips:
打印圖案
正方形:
for i in range(5):for j in range(5):print("*", end=" ")print()
代碼思路:
外部循環 for i in range(5): 運行 5 次,總共有5行。
內部循環 for j in range(5): 也運行 5 次,每行輸出5個星號。
print(“*”, end=" “) - 在內層循環中,使用 print() 函數輸出一個星號,同時指定 end=” " 參數,將每個星號之間的分隔符設置為兩個空格,以保持圖案的對齊。
print() 換行。
等腰三角形:
for i in range(5, 0, -1):for j in range(5 - i):print(" ", end=" ")for j in range(2 * i - 1):print("*", end=" ")print()