Python裡的建築藍圖:了解演算法的基礎結構
今天又要來聊聊Python這個超酷的程式語言。大家或許都知道,學會寫Python就像學會了一種魔法,這魔法可以讓電腦按照我們心裡的想法去做事。但是,大家要知道魔法有它的規則,不是隨便亂下咒語就行的。所以,我們要一起來探索,如何寫Python才能讓寫出來的程式既強大又好用。
首先,我們要知道程式是怎麼運作的。就像做菜一樣,有步驟要遵守,不能亂來。在程式世界裡,有三種超重要的基本結構:分別是「依序進行」、「條件分支」與「反覆循環」。你可以在大多數的程式語言中找到這三個基本結構。
在Python中也有這些結構囉?那麼,我們要怎麼寫才能符合呢?別擔心,接下來我們會一一解析,並且提供一些簡單的例子讓大家更容易理解。不管您是不是第一次接觸程式,我相信,看完這一篇,一定能讓您掌握這些魔法的訣竅!
那就讓我們開始這段旅程吧!我們會從最基本的依序進行結構開始講起。
結構化程式設計的基本結構
首先,要知道的是,編寫程式就像是在建造一座房子,需要一個完整的藍圖和明確的結構。而程式的運作方式可以被歸納成三大類:依序進行、條件分支、反覆循環。這三種就像是建造大樓時的鋼筋、水泥和磚塊,每種都很重要。而Edsger Wybe Dijkstra在1965年提出的結構化程式設計(Structured programming)的三種結構正是:「順序結構」、「選擇結構」和「迴圈結構」。這分法正符合我們目前所撰寫的程式運作方式:
- 依序進行:對應「順序結構」;
- 條件分支:對應「選擇結構」;
- 反覆循環:對應於「迴圈結構」。
結構化程式設計主要強調的是程式的易讀性,認為任何程式都可以有這三種基本結構架構出來。希望藉此設計方式來改善電腦程式的清晰度、品質,且避免寫出義大利麵條式的程式碼,進而減少開發時間。
究竟這三種結構具體指的是什麼?我們就分別來看看:
依序進行的「順序結構」
想像有一條直線,程式碼會像跑道上的運動員一樣,從起點一直跑到終點,不會偏離軌道,我們稱這種結構為「順序結構」(Sequence structure)。
簡單來說,就是程式會按照我們寫的順序,一步接著一步執行,中間沒有岔路或彎道。
比如說,當我們需要依序完成幾件事情時,就會用到這個結構。在程式裡,這就好比我們寫了A、B、C三個步驟,程式會先完成A,再來是B,最後才是C,就像接力賽跑一樣,一棒接一棒順利地完成。
接著我們用一個例子來說明,假如有下面的三行簡單的程式碼:
print("執行A程序")
print("執行B程序")
print("執行C程序")
這時,Python會先執行第一行,也就是印出「執行A程序」,接著是第二行的「執行B程序」,最後是第三行的「執行C程序」。這就是所謂的「順序結構」,它讓程式的流程清晰易懂,就像是在讀一本書,從頭到尾一字不漏。
條件分支的「選擇結構」
「選擇結構」(Selection structure)會依照條件是否成立,來決定執行的動作。就像是路口的指示牌,會告訴程式根據不同的條件,走不同的道路。這種結構讓程式可以根據某些特定的條件,決定要執行哪一段程式碼。
想像你站在一個路口,如果今天是晴天,你就選擇去公園;如果下雨,你就去圖書館。在Python裡,我們也可以透過幾種不同的「選擇結構」來實現這樣的決定。
單一選擇 if~
這個結構就像是一條單行道。當判斷式成立時,就會走這條路,執行相對應的程式區塊。
if 條件式:
程式區塊
雙重選擇 if~else
這就像是路口的兩條路。如果條件成立,就走一條路;如果不成立,就走另一條路。
if 條件式:
條件成立時執行的程式區塊
else:
條件不成立時執行的程式區塊
假設有程式碼可以分為A、B兩個程序。條件分支是指當條件符合的時候,就處理A程序,反之就處理B程序。
例如,我們有一個驗證密碼的程式,如果輸入的密碼正確,就執行一組操作;如果錯誤,就執行另一組操作。
setted_password = 'a123456'
if input_password == setted_password:
print("您的密碼正確,請繼續")
# ...do A程序
else:
print("密碼錯誤")
# ...do B程序
多重選擇 if~elif~else
這就像是一個多岔路口。根據不同的條件,你可以選擇不同的路去走。
if 條件式1:
條件1成立時執行程式區塊1
elif 條件式2:
條件2成立時執行程式區塊2
elif 條件式3:
條件3成立時執行程式區塊3
else:
所有條件都不成立時執行程式區塊4
當第一個條件成立時可以執行 if
下的程式區塊,不然就看第二個條件是否成立,成立時就執行該 elif
下的程式區塊,以此類推。當所有條件都不成立時就執行 else
下的程式區塊。其中,elif
沒有個數的限制,可以依照自己的需求而定。
巢狀if
這就像是在一個大路口裡,還有更細小的分岔。當需要在已有的判斷條件中加入更多層次的判斷時,我們就會使用巢狀if。
在Python程式中,「選擇結構」不僅讓我們的程式更加靈活,也讓程式能夠針對不同情況做出最合適的反應。因此,學習掌握「選擇結構」是非常重要的。
反覆循環的「迴圈結構」
「迴圈結構」(Loop structure)在條件成立時,會反覆執行動作。就像是一個運動場的跑道。當我們需要重複做同一件事情好幾次時,就會用到這個結構。這種結構讓我們的程式可以在某些條件滿足時,不斷地重複某些動作,直到條件不再成立或達到某個指定次數為止。又可以分為「前測迴路」與「後測迴路」兩種。
前測迴路: WHILE-DO
前測迴路的特點是,在執行迴圈內容之前,會先檢查條件是否成立。當條件滿足時執行回圈,即先判斷後執行。其迴圈執行的次數最少是0次,最多是無限多次。
後測迴路:DO-WHILE
後測迴路則是先執行迴圈內的動作,然後再檢查條件。從程式的入口處直接執行回圈,在回圈終點處進行條件判斷,此時若條件不滿足,就重新返回入口處繼續執行回圈,直到條件滿足的時候,再退出回圈到達程式的出口處。這意味著迴圈內的動作至少會被執行一次。
下面是Python中最常見的迴圈結構:
for 迴圈
for迴圈是Python中最常見的迴圈之一,特別適合用在需要遍歷序列(如list串列或字串)的場合。這種迴圈會依序從序列中取出元素,並將這些元素賦值給我們指定的變數。
for 變數 in 序列:
迴圈內的程式區塊
while迴圈
while迴圈則是在條件成立的情況下反覆執行某些操作。它適用於那些我們不確定需要執行多少次迴圈的情況。
while 條件式:
迴圈內的程式區塊
回圈結束的控制
想要讓迴圈結束,可以是透過自然的方式,也就是條件不再成立時迴圈自動結束;也可以透過刻意的介入使之不規則的結束,比如我們用一些特殊的指令來強制結束迴圈。例如break
與continue
。
break
「break」可以用來立即中斷迴圈,不再繼續執行迴圈內的其他動作。舉例來說:
for i in range(10):
if i == 5:
break
print(i)
由於使用了break,上面這段程式會在數字到達5時,立即中斷for迴圈。
continue
「continue」則是用來跳過當前迴圈的剩餘部分,直接進行下一次迴圈的判斷。舉例來說:
for i in range(10):
if i % 2 == 0:
continue
print(i)
以上面這段程式來說,由於變數 i
被2整除的話,程式就會它會跳過目前迴圈的剩餘部分,回到 for i in range(10):
直接進行下一次迴圈的判斷。因此,使用的結果會跳過所有偶數,只印出奇數。
if i % 2 == 0:
continue
掌握了這些迴圈結構,你就可以在Python的程式設計中自如地處理重複性的工作,並且可以讓你的程式更加有效率和清晰。
結論
經過以上的探索,我們現在知道,在Python程式語言的世界中,都可以透過結構化程式中「順序結構」、「選擇結構」和「迴圈結構」這三種基本的方式來建構您的演算法。這就像是用樂高積木來建造一座城堡,每個不同的積木都有其獨特的位置和功能。
這也讓我們理解到使用結構化程式設計的各種好處。首先,每個程式區塊都相互獨立,就像是在建造房屋時,每個房間都是獨立的。這樣做的好處是,當我們在設計某一個部分時,不需要太擔心其他部分,讓我們可以把一個大問題拆解成許多小問題,逐一解決。
再者,這種設計方式讓我們更容易擴充現有的系統或者建立新系統。讓我們可以像拼搭積木一樣,利用現有的程式區塊來逐步擴充我們的「程式城堡」。
此外,因為有了結構,讓我們目標明確,思路清晰,所以在開發過程中,可以更有系統地規劃和控制整個開發流程。這對於大型專案的管理來說尤其重要。
總之,Python程式語言提供了一個結構化且靈活的平台,熟悉了這三種結構,就相當於掌握了Python程式的骨架。無論是開始一個新的專案或者是改進現有的系統,都不要忘了利用這些基本的程式結構,它可幫助我們用更有效率、更清晰、有條理的方式來解決問題。最後,希望這篇文章能夠幫助大家在Python程式設計的學習過程中邁出堅實的一步。讓我們一起在Python的世界裡,建造出屬於自己的程式大樓。