欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python流程控制詳細(xì)介紹

 更新時間:2022年01月25日 12:39:19   作者:滌生手記大數(shù)據(jù)  
這篇文章主要介紹了python流程控制,文章主要根據(jù)python流程控制的相關(guān)資料展開全文內(nèi)容,具有一定的參考解釋,需要的小伙伴可以參考一下,希望對你有所幫助

前言:

經(jīng)過簡單的了解python基本語法和使用后,發(fā)現(xiàn)其都是一些順序執(zhí)行語句,也就是依次執(zhí)行,沒有任何的分支,循環(huán),也不會返回到以前的執(zhí)行語句-流程控制。在實際使用中,當(dāng)然不可避免使用到流程控制語句,但其都要由邏輯表達(dá)式進(jìn)行控制,因此先行介紹一下布爾邏輯。

1. 布爾邏輯

什么是布爾邏輯?

簡單來講,布爾邏輯就是操作真值。相比大多數(shù)編程語言一樣,Python也使用布爾邏輯來做決策判斷,使用True和False表示。一般經(jīng)常使用的有4個布爾邏輯運算符,not、and、or、==。在Python語言的使用中,幾乎所有判斷決策都可以使用這四個邏輯運算符表示。首先我們計算布爾邏輯可能產(chǎn)生的值,假設(shè)a,b兩個變量,那么對于它們來講就有四個非真即假的組合,如下表:F表示FALSE,T表示TRUE

a

b

a==b

a!=b

a and b

a or b

not b

F

F

T

F

F

F

T

F

T

F

T

F

T

T

T

F

F

T

F

T

F

T

T

T

F

T

T

F

通過代碼直觀感受下布爾邏輯計算的結(jié)果:

==(邏輯相等), 當(dāng) a 和 b 包含的真 值相同,即都為 True 或都為 False 時,表達(dá) 式 a==b 的結(jié)果才為 True

!= (邏輯不等)

有計算的地方,就會涉及到計算的優(yōu)先級,對于布爾運算的優(yōu)先級,規(guī)則如下

優(yōu)先級由高到低:

a==b、a != bnot a、a and ba or b

舉個例子: not True and False or True,執(zhí)行結(jié)果如下圖True??梢钥吹狡鋱?zhí)行順序為not True,在計算(not Ture) and False,最后是or,那么我們來簡化下,這個求值結(jié)果是不是就是計算 False and False or True 。這也算是優(yōu)化的一小步!當(dāng)然,我們根據(jù)上面的表在考慮一下:and的優(yōu)先級高于or,故而計算False and False 等價于 False。那么最后的表達(dá)式也就是計算 False or True。

所以,當(dāng)需要使用比較復(fù)雜的布爾邏輯表達(dá)式的時候,需要特別注意括號的使用!

  • 了解了布爾邏輯的規(guī)則,Python同其它語言一樣,使用了一定的方法,提高了布爾表達(dá)式的計算速度,這個方法被稱為:短路求值。
  • 有興趣的話可以自行深入了解下實現(xiàn)原理

運算規(guī)則

運算結(jié)果

a or b

如果 a 為 False,結(jié)果為 b,否則結(jié)果為 a

a and b

如果 a 為 False,結(jié)果為 a,否則結(jié)果為 b

這個邏輯表達(dá)式是Python使用者經(jīng)常用到的,直觀來講,以 True or Any 為例,不論這個Any為什么值,其表達(dá)式結(jié)果都是True。同理,False and Any 的結(jié)果為False。但切記,邏輯好用的同時也會對代碼產(chǎn)生可讀性不好的體驗感,可以用下面提到的if條件語句來實現(xiàn)運算規(guī)則體驗一下!

1.1 條件控制語句-if

if-條件控制語句,它的作用是使得代碼程序在執(zhí)行的時候按照一定的條件進(jìn)行決策改變。對于文本處理、腳本開發(fā)、網(wǎng)站開發(fā)、數(shù)據(jù)科學(xué)等各個方向的研究實現(xiàn),幾乎都會使用到if語句。

1.2 if/else 語句

假設(shè)有個簡單的小需求:開機需要用戶輸入用戶名和密碼,如果正確則讓其登錄,如果不正確告知密碼不正確。

if __name__ == "__main__":

    while True:
        scan_user = input('please input your name: ')
        scan_pass = input('please input your passwd: ')
        if scan_pass == 'if/else':
            print('Logging on now!')
        else:
            print('your passwd is incorrect!!')
        print('我不在if/else語句中!')


執(zhí)行結(jié)果:

可以看到,如果變量scan_pass指向的字符串為"if/else",就會顯示登錄成功,如果不是,變量為任何值都會提示密碼錯誤。

由此,我們來畫一個if/else的基本語句結(jié)構(gòu):

在Python的使用中,通常會將 : 用作 if 語句頭、循環(huán)頭和函數(shù)頭的結(jié)束標(biāo)記。并且,其中的代碼塊可以包含任意數(shù)量的Python語句和其它if語句。在Python編程中,同樣需要縮進(jìn)代碼塊,不過與其它語言為了美觀相比,Python必須使用縮進(jìn)來表示一段代碼塊的所屬。如上面那段示例的最后一行代碼,并不在else語句中。

1.3 if/elif 語句

if/elif 語句是if/else語句的擴充,很多邏輯的實現(xiàn)不會僅僅只包含兩個條件,它可能包含多個條件。比如某商場設(shè)定的一些優(yōu)惠條件:滿200打八折,滿400打六折,滿800超出400的部分打五折等等。

這樣的代碼實現(xiàn)如下:

if __name__ == "__main__":
    
    while True:
        consumer = int(input('請輸入您的消費金額:'))
        money = 0
        if 200 <= consumer < 400:
            money = consumer * 0.8
            print('您的消費金額是:' + str(money))
        elif 400 <= consumer < 800:
            money = consumer * 0.6
            print('您的消費金額是:' + str(money))
        elif consumer >= 800:
            money = 400 * 0.6 + (consumer - 400) * 0.5
            print('您的消費金額是:' + str(money))

當(dāng)輸入消費金額之后,程序進(jìn)入if/elif 語句,按照指定順序依次進(jìn)行判斷,首先對消費金額進(jìn)行大于200并小于400的判斷,然后計算出此次消費金額,跳出語句,以此類推。需要注意的是: elif 是 else if 的縮寫,編寫時可以隨意使用,但是每個代碼塊的縮進(jìn)必須相同。

if/else 語句還有一個比較簡單的寫法,是一種有人喜歡有人不喜歡的寫法。

通常如下:主要看response那一行代碼,這行代碼就等價于下面的if/else代碼塊。

if __name__ == "__main__":

    color = input('請問您最喜歡什么顏色?')
    response = 'blue' if color == 'red' else 'black'
    print(response)
if __name__ == "__main__":

    color = input('請問您最喜歡什么顏色?')
    if color == 'red':
        like = 'blue'
    else:
        like = 'black'


條件表達(dá)式通常比等價的 if/else 語句簡短,但并非總是與 if/else 語句一樣靈活和易于理解。一般而言,僅當(dāng)條件表達(dá)式可讓代碼更簡單時才會使用。

2 循環(huán)控制語句

上面的條件控制主要決策執(zhí)行哪一段代碼塊,在編寫代碼時也會涉及到重復(fù)的執(zhí)行某一段代碼,這時就會用到循環(huán)控制語句。在每種語言的使用中,通常會用到的就是for循環(huán)和while循環(huán)兩種循環(huán)控制語句。此處加個小說明:無論老師講課還是日常使用中,經(jīng)常會用到變量i,因為它是index的縮寫。當(dāng)開始使用循環(huán)語句的時候, 通常將 j 和 k 用作其他循環(huán)變量名。

2.1 循環(huán)控制之for

假設(shè)我們需要在屏幕上依次打印數(shù)字0~9,此時我們可以使用循環(huán)語句實現(xiàn),如下:for循環(huán)的第1行被稱為for循環(huán)頭。for 循環(huán)總是以關(guān)鍵字for打頭,接下來是循環(huán)變量(這里為 i),然后是關(guān)鍵字 in。關(guān)鍵字 in 后面通常(但并非總是)是 range(n) 和結(jié)束符號 : 。for 循環(huán)重復(fù)執(zhí)行循環(huán)體(循環(huán)頭后面的語句塊)n 次。

if __name__ == "__main__":

    for i in range(10):
        print(i)

每次執(zhí)行循環(huán)時,循環(huán)變量都被設(shè)置為下一個值。默認(rèn)情況下,初始值為 0,并逐步遞增到 n-1(而不是 n)。

如果要修改循環(huán)的初始值,可在 range 中添加初始值:

if __name__ == "__main__":

    for i in range(1,10):
        print(i)
    #或者給變量i+1   
 for i in range(10):
   print(i + 1) 

如果需要按照相反的順序打印,則可以按照以下兩個方法:

if __name__ == "__main__":

    for i in range(10, 0, -1):
        print(i)
        
    for i in range(10):
    print(10 - i) 

for循環(huán)當(dāng)然不止運用于循環(huán)打印,在實際編程中,根據(jù)不同的需要,其可以適用于任何類型的迭代中。例如,使用for循環(huán)讀取文本的行數(shù)據(jù)或者向文本中寫入數(shù)據(jù)等等。

2.2 循環(huán)控制之while

對于while循環(huán),在本人的使用中,對比for,感受到for循環(huán)更容易使用,但其卻沒有while循環(huán)的靈活性。同樣,我們循環(huán)打印一些數(shù)字:

if __name__ == "__main__":

    i = 0
    while i < 10:
        print(i)
        i = i + 1


該代碼與for循環(huán)的執(zhí)行結(jié)果是一樣的,但是直觀來看,while循環(huán)的代碼塊要稍微復(fù)雜一些。while 循環(huán)本身以關(guān)鍵字 while 打頭,這 一行被稱為 while 循環(huán)頭,而它后面縮進(jìn)的代碼被稱為 while 循環(huán)體。以這個例子我們畫一個while循環(huán)的執(zhí)行流程圖,

如下:

可以總結(jié)一下, while 循環(huán)的控制流程:

1.Python 檢查循環(huán)條件為 True 還是 False(就是之前所闡述的布爾表達(dá)式),

  • 如 果為 True,就執(zhí)行循環(huán)體;
  • 如果為 False,就跳過循環(huán)體(即跳出循環(huán))并執(zhí)行后面的語句。

2. 在條件為 True 并執(zhí)行循環(huán)體后,Python 再次檢查條件。只要循環(huán)條件為 True,Python 就不斷執(zhí)行循環(huán)體,直到跳出。

示例程序的第 1 行為 i = 0,在循環(huán)語境下,i=0被稱為初始化語句。與 for 循環(huán)那樣自動初始化循環(huán)變量不同,由編程者負(fù)責(zé)給 while 循環(huán)使用的變量指定初始值。而循環(huán)體的最后一行為 i = i + 1,隨著循環(huán)的進(jìn)行,i 的值不斷遞增,確保循環(huán)終將終止。在 while 循環(huán)中,這一行被稱為遞增語句,在本例中作用是讓循環(huán)變量進(jìn)行遞增。

這樣看來,for循環(huán)不需要編程者去定義初始化語句和遞增語句,但是在開發(fā)中,使用者通常會發(fā)現(xiàn)這些語句一旦不注意則會導(dǎo)致bug出現(xiàn),這也是為什么說while循環(huán)要比for循環(huán)更加靈活。

while循環(huán)在使用測試時,通常還有一個特性便是無線循環(huán)執(zhí)行,實現(xiàn)只需要一行代碼while true,只要使用,那么其循環(huán)體便會持續(xù)執(zhí)行下去。在實際生產(chǎn)中,最好使用for循環(huán)來代替這種用法!后續(xù)也會闡述一些跳出循環(huán)的語句來避免。

3 for vs while

使用三個簡單的小例子來看下for循環(huán)和while循環(huán)是如何解決相同的問題,同時體會一下二者的不同,這可以讓我們更好的應(yīng)用在實際的編程中去。

3.1 對輸入的數(shù)字求和

本案例輸入一些數(shù)字,然后求出這些數(shù)字的總和。

for循環(huán)實現(xiàn):

if __name__ == "__main__":

    num = int(input('需要計算多少個數(shù)字:'))
    sum = 0
    for i in range(num):
        n = input('輸入第' + str(i + 1) + '個數(shù)字:')
        sum = sum + int(n)
    print('輸入的數(shù)字總和為:' + str(sum))


while循環(huán)實現(xiàn):

    num = int(input('需要計算多少個數(shù)字:'))
    sum = 0
    i = 1
    while i <= num:
        n = input('輸入第' + str(i + 1) + '個數(shù)字:')
        sum = sum + int(n)
        i = i + 1
    print('輸入的數(shù)字總和為:' + str(sum))


二者實現(xiàn)的結(jié)果如下:

案例中的程序都是將輸入的數(shù)字固定在整數(shù),如果用戶輸入的是浮點數(shù),調(diào)用 int(s) 時將會報錯。當(dāng)然,要支持用戶輸入浮點數(shù)很容易, 只需將int(s)改為float(s)即可。

3.2 未知個數(shù)字的求和

這個案例需要注意,上面的案例無論使用for循環(huán)或者while循環(huán)都可以實現(xiàn)需求,但是這個案例可以體驗一下for循環(huán)無法處理,但是while循環(huán)適用的情況。需求:假設(shè)輸入一系列數(shù)字,同樣計算總和,但是并不知道會輸入多少個數(shù)字,并且在輸入結(jié)束時,我們以done為標(biāo)識。

if __name__ == "__main__":

    num = input('輸入完成標(biāo)識(or "done"):')
    sum = 0
    while num != 'done':
        i = int(num)
        sum = sum + i
        num = input('輸入完成標(biāo)識(or "done"):')
    print('輸入的數(shù)字總和為:' + str(sum))

試想一下,我們不知道會輸入多少個數(shù)字,而是直到輸入標(biāo)識字符才會計算求和。這個代碼塊預(yù)先并不知道循環(huán)體執(zhí)行多少次。

注意代碼中的一些地方:

  • 1. 在循環(huán)體內(nèi),語句的排列順序至關(guān)重要。如果循環(huán)條件為 True,就說明 num 不是 'done',所以假定它是一個整數(shù)。 因此,我們可以將它轉(zhuǎn)換為整數(shù),將其與總和相加。
  • 2. 必須在兩個地方調(diào)用 input:循環(huán)前面及循環(huán)體內(nèi),因為循環(huán)條件判斷輸入是數(shù)字還是 'done'。
  • 3. 不再需要計數(shù)器變量 i。在上一個計算總和的示例中,i 用于記錄輸入了多少個數(shù)字。在日常使用中,程序包含的變量越少,越容易理解、調(diào)試和擴展。

3.3 階乘計算

最后在體驗一把二者都可以使用的情況:計算數(shù)字的階乘,即1*2*3*4*...*n;

if __name__ == "__main__":

    num = int(input('輸入一個大于0的整數(shù): '))
    k = 1;
    for i in range(2,num+1):
        k = k * i
    print(str(num) + '的階乘值:' + str(k))

    num = int(input('輸入一個大于0的整數(shù): '))
    k = 1;
    i = 2;
    while i<=num:
        k = k * i;
        i = i + 1
    print(str(num) + '的階乘值:' + str(k))

 

由于python對整數(shù)的最大取值沒有限制,所以可以使用python來計算很大的階乘值。

到此這篇關(guān)于python流程控制的文章就介紹到這了,更多相關(guān)python流程控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python ndarray數(shù)組對象特點及實例分享

    python ndarray數(shù)組對象特點及實例分享

    在本篇文章里小編給大家分享的是一篇關(guān)于python ndarray數(shù)組對象特點及實例相關(guān)內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2021-10-10
  • 如何使用Python獲取昨天的日期

    如何使用Python獲取昨天的日期

    Python 是一種高級語言,可用于數(shù)據(jù)科學(xué)和機器學(xué)習(xí),以使用 Python 的數(shù)據(jù)結(jié)構(gòu)訓(xùn)練 AI,它用于編寫各種應(yīng)用程序,從 Web 和桌面到操作系統(tǒng)級程序,這篇文章主要介紹了在 Python 中獲取昨天的日期,需要的朋友可以參考下
    2023-05-05
  • Python多線程中比time.sleep更好用的暫停方式

    Python多線程中比time.sleep更好用的暫停方式

    這篇文章主要介紹了Python多線程中比time.sleep更好用的暫停方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python實現(xiàn)域名系統(tǒng)(DNS)正向查詢的方法

    python實現(xiàn)域名系統(tǒng)(DNS)正向查詢的方法

    這篇文章主要介紹了python實現(xiàn)域名系統(tǒng)(DNS)正向查詢的方法,結(jié)合實例形式分析了Python使用socket模塊下getaddrinfo方法進(jìn)行域名查詢的具體技巧,需要的朋友可以參考下
    2016-04-04
  • Python使用pip安裝報錯:is not a supported wheel on this platform的解決方法

    Python使用pip安裝報錯:is not a supported wheel on this platform的解決

    這篇文章主要介紹了Python使用pip安裝報錯:is not a supported wheel on this platform的解決方法,結(jié)合實例形式分析了在安裝版本正確的情況下pip安裝報錯的原因與相應(yīng)的解決方法,需要的朋友可以參考下
    2018-01-01
  • 解決pytorch-yolov3 train 報錯的問題

    解決pytorch-yolov3 train 報錯的問題

    今天小編就為大家分享一篇解決pytorch-yolov3 train 報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 淺談keras中自定義二分類任務(wù)評價指標(biāo)metrics的方法以及代碼

    淺談keras中自定義二分類任務(wù)評價指標(biāo)metrics的方法以及代碼

    這篇文章主要介紹了淺談keras中自定義二分類任務(wù)評價指標(biāo)metrics的方法以及代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • PyCharm刷新項目(文件)目錄的實現(xiàn)

    PyCharm刷新項目(文件)目錄的實現(xiàn)

    今天小編就為大家分享一篇PyCharm刷新項目(文件)目錄的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 由淺入深講解python中的yield與generator

    由淺入深講解python中的yield與generator

    這篇文章主要由淺入深講解了python中yield與generator的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • Python之字符串的遍歷的4種方式

    Python之字符串的遍歷的4種方式

    這篇文章主要介紹了Python之字符串的遍歷的4種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論