2017年6月27日 星期二

Python ê 基礎 - 流程控制 while

佇前一篇 Python ê 基礎 - 流程控制 if 中央, 咱的這的一咧數字,毋是 2, 嘛毋是 3 的倍數:

#!/usr/bin/python3
x = int(input("input an integer:"))

if x % 2 == 0:
    pass
elif x % 3 == 0:
    pass
else:
    print("This is NOT multiple of 2 or 3")


運行--起來,一擺干焦會使檢查一个數字,下一咧就愛重來。咱若有真濟數字欲處理,有夠麻煩。敢有法度予伊運行起來了後,就遐一直等咱問咧? 這時,咱共這的例小改一咧:

#!/usr/bin/python3
while True:
    x = int(input("input an integer:"))

    if x % 2 == 0:
        pass
    elif x % 3 == 0:
        pass
    else:
        print("This is NOT multiple of 2 or 3")

咱運行一咧:

$ python3 judge-non2-3.py 
input an integer:3
input an integer:8
input an integer:443
This is NOT multiple of 2 or 3
。。。

會當連相紲輸入,你揤 ENTER 了後,伊隨閣問你下一咧數字是啥物? 程式袂煞鼓,伊會永遠問--落去。你若想欲煞戲,揤 Ctrl-C,用強--ê才跳會--離。

這就是 while 的作用: 仝款的 code,予伊跳--轉來,閣走一

這種效果,就敢若程式佇遐箍輪。所以,嘛有人號做 while  (while loop)。啥物時陣跳--出來? 就看 while 後彼咧判斷式是毋是真个(True),變做假个 (False)

True 伊本身是保留字,嘛是出奇仔簡單的判斷式。伊永遠是真个,袂改變,就表示 while 內的 code,永遠佇遐輪迴,不得超生。若是想欲愛伊有機會跳--出來,你就愛寫會變化的判斷式,比如講:

#!/usr/bin/python3
i = 0
while i < 5:
    x = int(input("input an integer:"))

    if x % 2 == 0:
        pass
    elif x % 3 == 0:
        pass
    else:
        print("This is NOT multiple of 2 or 3")
    i = i + 1


按呢判斷式 i < 5,i uì 0 開始,一輾加 1。佇咧 i 比 5 較細的時,i < 5 算出來攏是 True。等到 i 作 5,i < 5 做 False,就自動跳--出 while loop。若是無窮無盡的箍輾,干焦會使靠 Ctrl-C 這種共--的方式跳--出來。


另外一種方式,是用 break共 while loop 拍予破,咱看下跤這的例:

#!/usr/bin/python3
i = 0
while True:
    x = int(input("input an integer:"))

    if x % 2 == 0:
        pass
    elif x % 3 == 0:
        pass
    else:
        print("This is NOT multiple of 2 or 3")
    
    if i > 5:
        break

    i = i + 1

伊的效果佮頂一个仝款,毋過,伊是用 if > 5 來拍破 while break 嘛是一咧關鍵字,伊的作用就是用來拍破箍輾。


閣有一款變化,是佮 while loop 縮予短,莫行到 while 的尾溜,這愛用保留字 continue。請看這的例:

#!/usr/bin/python3
i = 0
while i < 5:
    x = int(input("input an integer:"))

    if x % 2 == 0:
        continue
    if x % 3 == 0:
        continue

    print("This is NOT multiple of 2 or 3")
    i = i + 1

伊是佮頂个一模一樣的效果,毋過運用 continue 來躘--過後壁的程式。所以,若是 2 抑是 3 的倍數,就隨跳轉去 while 起頭遐重來,袂閣運行下跤的 print(),咱嘛免共 print() 囥佇 if-statement 內囉。


while-statements 是uì while 𤆬頭彼逝開始,一直到尾溜。因為後壁的逐逝攏向正手--入來一咧 TAB。


若較斟酌看,你會發現 if-else-statement 裡的 pass 抑是 print()毋但勼一个 TAB,in 勼兩的 TAB。這表示 pass/print() 是踮佇 while-statement 裡的 if-statement 裡。

遮其實予咱一咧寫程式的觀念,是真重要的觀念: 程式是有層次个。咱佇寫程式的時陣,寫每一 code,都愛真清楚伊是佇佗一。寫程式干焦佇起樓仔厝,每一棧攏愛清清楚楚,樓仔才會,才會

就親像露西亞(Russia)尪仔開外口的尪仔,內底是較細的尪仔,一閣一。咱會使一咧 statement 內底包 statement,無限制包幾棧,只要你家己會記--得,莫亂--去。



沒有留言:

佇 Linux 來看GPX 檔案

最近定定有戶外活動。使用𤆬路機 (GPS) 來記錄行過的路線。普通我記錄路線,攏是用手機仔抑是專門个𤆬路機,罕得用電腦來看。 毋過,"仙人拍鼓有時錯,跤步踏差啥人無"。有一擺我無細膩,袂記得共一擺活動的路線收煞起來,閣直接開始記錄下一擺的活動,按呢共幾落...