摘要:基礎之控制結構學習目標代碼塊與縮進條件語句語句語句的嵌套斷言循環循環循環中斷循環控制語句綜合嵌套列表解析式基礎相關鏈接學習目標是簡潔易學面向對象的編程語言。
Python
是簡潔、易學、面向對象的編程語言。它不僅擁有強大的原生數據類型,也提供了簡單易用的控制語句。在《Python基礎教程》的系列博文中,我們已經介紹了 Python
中的內置原生數據類型,并且也了解了程序如何利用輸入、輸出語句與用戶進行交互。本節的主要目標是介紹 Python
的控制語句,為接下來的學習奠定基礎,本文會完整的介紹學習數據結構和算法所需的 Python
基礎知識及基本思想,并給出相應的實戰示例及解釋。
Python
條件語句與循環語句Python
條件語句與循環語句的復雜嵌套以及列表解析式代碼塊是一組語句,Python
中用于定義代碼塊的語法對于所有控制結構來說是相同的,可用于滿足條件時執行代碼( if 語句),也可用于代碼多次執行(循環)等。代碼塊是通過縮進代碼(可以使用空格或制表符)來創建的。在Python中,使用冒號 (:
) 指出接下來是一個代碼塊,在同一個代碼塊中,各行代碼的縮進量(一般每級縮進 4
個空格)必須相同:
if condition is True: print("this is a block") print("another line of this block")print("escaped the previous block")
在指定函數體和類體時,代碼塊的原則同樣適用。
以上示例語句都是逐條執行的,但實際應用中讓程序選擇執行特定的語句塊是必備的。這時布爾類型就派上用場了。
用作布爾表達式時,標準值 False
和 None
、數值 0、空序列(如空字符串、空元組和空字典等)都被視為假,而其他值均被視為真。這意味著任何 Python
值都可解釋為真值,但 True
和 False
為標準真值。在 C 語言中,標準真值為 0 (表示假)和 1 (表示真)。實際上,True
和 False
是 0 和 1 的別名,其作用是完全相同的:
>>> bool("")False>>> bool([0])True>>> bool("Hello world")True>>> True == 1True>>> True + 23
程序運行時,Python
會在需要時自動將任意值轉換為布爾值,而無需顯式地進行轉換:
# test_bool.pystring_test = "Hello world"if string_test: print("Automatic conversion ")
以上腳本執行結果如下,表明 Python
執行了自動轉換:
Automatic conversion
需要注意的是,雖然值轉換為真值后可能相等,例如 bool({}) == bool([]) == False
,但本身它們并不相等,即 {} != []
:
>>> bool({}) == bool([])True>>> {} == []False
條件語句(也稱 if 語句)能夠有條件地執行代碼,如果條件( if 和冒號之間的表達式)為真,就執行后續代碼塊;如果條件為假,就不執行:
if flag == True: flag = Falseprint(flag)
上示 if 語句也稱單路分支結構,如果 flag
為 True
,則將其變為 False
,再打印 flag
值。還有另一種條件結構稱為二元分支(也稱 if...else
語句):
answer = input("Please enter your answer: ")if answer == "A": print("Right!")else: print("Error!")
在上述例子中,Python
會檢查用戶輸入答案,如果輸入為 A,則打印 “Right!
”,否則,會執行else 分支打印 “Error!
”。
要檢查多個條件,可使用 elif
,elif
是 else if
的縮寫,可以將其理解為包含條件的 else
子句:
num = int(input("Please enter a number: ")) if num > 0: print("The number is positive") elif num < 0: print("The number is negative") else: print("The number is zero")
需要注意的是,在使用 elif
時,最后的 else
是必需的,它用來在所有分支條件都不滿足的情況下提供默認分支。
上述三種條件結構可以用以下流程圖表示:
綜上,我們可以總結出 Python 中,條件語句的最一般形式:
if first_condition: first_blockelif second_condition: second_blockelif third_condition: third_blockelse: fourth_block
每個條件都是一個布爾表達式,每個代碼塊包含一個或多個滿足條件時要執行的語句。如果第一個條件為真,則執行第一個代碼塊,而不會評估其他條件。如果第一個條件失敗,則繼續判斷第二個條件,以此類推。if 語句可以包括任意數量的 elif 子句 (也可以為 0 個),最后一個 else 子句是可選的。
條件結構支持嵌套,即在 if 語句中調用任意數量的 if 語句:
if alcohol < 20: print("Does not constitute drinking behavior!")else: if alcohol > 80: print("Already meet drinking and driving standards!") else: print("Has reached the standard for drunk driving!")
上述程序所表達的邏輯可以用流程圖表示:
為了讓程序在錯誤條件出現時立即中止,Python
還提供了類似 if 語句的關鍵字:assert
,使用此關鍵字可以要求某些條件必須得到滿足。assert
語句類似檢查點,當我們知道程序的執行必須滿足特定條件,才能正確地運行時,使用assert
語句可以及時終止程序運行,類似網站注冊時郵箱格式正確性的檢查:
>>> mail_1 = "test123456789@gmail.com">>> assert mail_1.endswith(".com")>>> mail_2 = "test123456789@gmail.con">>> assert mail_2.endswith(".com")Traceback (most recent call last): File "" , line 1, in <module>AssertionError
為了說明程序終止的原因,可以在 assert
語句后添加說明字符串:
>>> assert mail_2.endswith(".com")," Email must end with .com "Traceback (most recent call last): File "" , line 1, in <module>AssertionError: Email must end with .com
我們已經學習了如何在條件為真(或假)時執行代碼塊,但如何重復操作代碼塊多次呢?例如,打印 1—100 內的所有的偶數。我們當然可以寫出 50 行 print
語句,但如果是這樣,我們就不需要 Python
了。
Python
提供了兩種不同的循環結構。while
循環允許對布爾條件進行重復測試,直到條件不能得到滿足。for
循環提供了遍歷序列的迭代(例如字符串的字符、列表的元素或給定范圍內的數字等)。
while
語句會在給定條件為真時重復執行代碼塊。例如,在下面的示例中,變量 number
被初始化為 0
,并且在 while
循環中,它每迭代一次就遞增 1
,每次執行循環體前,首先進行條件判斷,因此直到 number
等于 5
時結束循環:
number = 0while number < 5: print("A total of {} time(s)".format(number)) number += 1
程序運行結果如下:
A total of 0 time(s)A total of 1 time(s)A total of 2 time(s)A total of 3 time(s)A total of 4 time(s)
while
語句可用于在條件為真時反復執行代碼塊,但有時候我們可能需要為序列中每個元素執行代碼塊。
為了介紹 for
循環,我們首先要了解可迭代對象,可迭代對象是可使用 for
循環進行遍歷的對象,對于現階段,我們可以只需將可迭代對象視為序列即可。
for
語句可以用于遍歷一個序列中的每個元素:
fruits = ["apple", "orange", "banana", "lemon"]for fruit in fruits: print(fruit)
for
語句將列表 fruits
中的每一個值依次賦給變量 fruit
。然后,代碼塊就會被執行。for
語句的常見用法是在一定的值范圍內進行有限次數的迭代。
我們已經在介紹數據類型 list
時,簡單的介紹過內置函數 range
用于創建范圍,range
語法類似于切片,包含起始位置,但不包含結束位置。實際上,如果只提供了一個位置,將把這個位置視為結束位置,而起始位置為 0。同時也可以為 range
函數提供步長參數,在范圍內每隔若個元素提取一個元素:
for i in range(0, 10, 2): print("The square of {} equals {}".format(i, i**2))
程序的輸出結果如下:
The square of 0 equals 0The square of 2 equals 4The square of 4 equals 16The square of 6 equals 36The square of 8 equals 64
使用 for
循環還可以遍歷字典,默認情況下,是遍歷字典的鍵,如果需要遍歷所有的值或鍵-值對,就需要用到字典的 values
和 items
方法了:
fruits = {"apple": 5.0, "orange": 3.5, "banana": 4.0}for k in fruits: print(k, "corresponds to", fruits[k])
上示代碼等價于:
fruits = {"apple": 5.0, "orange": 3.5, "banana": 4.0}for k, v in fruits.items(): print(k, "corresponds to", v)
通常,循環會不斷地執行代碼塊,直到條件為假或迭代完序列中的所有元素。但有時,我們可能需要開始新迭代(跳到下一次迭代開頭,并不結束循環)或直接結束循環。
? break
要結束循環,可使用 break
,假設要找到最大的三位水仙花數(每個位上的數字的 3 次冪之和等于它本身的三位數),可以從 999 開始向下迭代,找到一個水仙花數后,無需繼續迭代,直接跳出循環:
for i in range(999, 99, -1): b = i % 10 t = (i // 10) % 10 h = i // 100 if b ** 3 + t ** 3 + h ** 3 == i: print(i) break
運行此程序,將在打印 407 后結束,在上述示例中,可以看到通過將 range
的步長設置為負數,讓 range
反向迭代。
常規的 while
循環會在循環開頭時進行判斷用來結束循環,但有時我們想要循環在循環體中結束,這時就需要用到 while True/break
語法了,使用 while True
可以使循環永不結束,然后在循環體內使用 if
語句,當 if
語句的條件得到滿足時調用 break
結束循環,例如在登陸界面中,只有用戶輸入了正確的用戶名才能進行下一步操作:
users = ["root", "admin", "user_1"]while True: user = input("Please enter your name: ") if user in users: break print("User does not exist!")print("The user name is correct!")
? continue
當指定語句 continue
時,它結束當前迭代,并跳到下一次迭代開頭。這基本上意味著跳過循環體中余下的語句,但不結束循環,例如計算所有水仙花數,如果使用語句 continue
,則可以寫為:
for i in range(100, 1000): b = i % 10 t = (i // 10) % 10 h = i // 100 if b ** 3 + t ** 3 + h ** 3 != i: continue print(i)
程序輸出結果如下:
153370371407
控制語句可以進行復雜的綜合嵌套,可以通過打印九九乘法表來綜合使用控制語句:
for i in range(1, 10): for j in range(1, 10): if i > j: print("{} * {} = {}".format(i, j, i*j), end = "/t") elif i == j: print("{} * {} = {}".format(i, j, i*j)) else: continue
列表推導是利用列表創建新列表的方式,列表推導的工作原理類似于 for
循環:
>>> [i**2 for i in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
在列表推導中也可以進行嵌套,例如添加更多的 for
循環和 if
語句:
>>> [[i, j] for i in range(10) for j in range(10) if i % 3 == 0 and j % 4 == 0][[0, 0], [0, 4], [0, 8], [3, 0], [3, 4], [3, 8], [6, 0], [6, 4], [6, 8], [9, 0], [9, 4], [9, 8]]
等價于:
new_list = []for i in range(10): for j in range(1): if i % 3 == 0 and j % 4 == 0: new_list.append([i, j])
除了列表推導式外,還可以使用花括號來執行字典推導:
>>> print({i: i**3 for i in range(10)}){0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125089.html
摘要:協議學習常見請求方法學習和學習接口的基本概念接口文檔認識接口測試用例編寫接口測試工具使用軟件測試自動化進階性能測試性能測試的技術要求很高,不僅僅要對性能測試的指標測試分類測試設計有很深刻的理解。 ...
摘要:本文重點掌握異步編程的相關概念了解期物的概念意義和使用方法了解中的阻塞型函數釋放的特點。一異步編程相關概念阻塞程序未得到所需計算資源時被掛起的狀態。 導語:本文章記錄了本人在學習Python基礎之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握異步編程的相關概念;2、了解期物future的概念、意義和使用方法;3、了解Python...
摘要:基礎之輸入輸出與高階賦值學習目標輸入輸出與注釋獲取用戶輸入格式化輸出基本方法格式化函數注釋高階賦值語句賦值運算符并行賦值序列解包鏈式賦值學習目標是簡潔易學面向對象的編程語言。 ...
摘要:下載器下載器負責獲取頁面數據并提供給引擎,而后提供給。下載器中間件下載器中間件是在引擎及下載器之間的特定鉤子,處理傳遞給引擎的。一旦頁面下載完畢,下載器生成一個該頁面的,并將其通過下載中間件返回方向發送給引擎。 作者:xiaoyu微信公眾號:Python數據科學知乎:Python數據分析師 在爬蟲的路上,學習scrapy是一個必不可少的環節。也許有好多朋友此時此刻也正在接觸并學習sc...
閱讀 3407·2021-11-25 09:43
閱讀 2294·2021-09-06 15:02
閱讀 3538·2021-08-18 10:21
閱讀 3340·2019-08-30 15:55
閱讀 2342·2019-08-29 17:06
閱讀 3534·2019-08-29 16:59
閱讀 962·2019-08-29 13:47
閱讀 2756·2019-08-26 13:24