MicroPython 的流程控制

MicroPython 是一種以Python 程式為底作為驅動Micro:bit 的程式語言,所以MicroPython 在許多程式語法上都延續著Python 的程式設計邏輯。同樣地,在流程控制方面的語法也都相同,已經具有基礎 Python 程式的人可以不用細讀這個單元。這單元主要會介紹利用AB 按鍵的按壓加上流程控制的基本應用。

第一個會接觸到的流程控制是while 指令。在一般的Python 程式中 for 迴圈與while 指令可以有技巧的互通,然而在Micro:bit 上,因為是驅動硬體的緣故,在通電的狀態下要持續呈現的程式內容,會讓while 指令比for 指令更常出現。例如:

from microbit import *


while True:
    display.scroll('Hello, World!')
    display.show(Image.HEART)
    sleep(2000)

這裡的while 指令,可以讓這個程式所做的兩件事情(一是用跑馬燈的方式顯示"Hello World!"字串,另一個是顯示愛心圖案兩秒鐘)不斷循環出現。

while 指令的用法是其後會加上一個判斷式,當這個判斷式成立時,python 會繼續執行在while 區塊下的程式,while 指令的結構如下。

while 判斷式:
   程式區塊

 

所謂的區塊,在python 中是用while 判斷式之後的”:” 符號以及下面文字的縮排來決定區塊的範圍。以上述程式為例,while 所對應的區塊就是 display.scroll() 到sleep()這三行。

判斷式通常是一個敘述的真偽,例如 2>5 是錯的,就是False。5>=3 是對的,所以結果是True。我們會在下一個章節介紹判斷式。

另外一個常用的流程控制的方法是 if elif else 敘述,其結構如下:

if 判斷式1:
   程式區塊1
elif 判斷式2:
   程式區塊2
.
.
elif 判斷式n:
   程式區塊n
else:
   程式區塊 

 

 

用口語的方式來解讀為,若判斷式1 成立,則執行程式區塊1 ,又若判斷式1不成立但判斷式2 成立,則執行區塊2 ,又若判斷式1,2 都不成立則執行區塊3,依此類推到判斷式n ,如果前項都不成立,則執行最後的程式區塊。

有時我們會只看到if 敘述單獨出現,有時只有if 敘述搭配else敘述,也有時會if elif else 同時出現。端看我們需要應用的場合來決定。一個簡單的Micro:bit 程式如下:

from microbit import *

while True:
   if button_a.is_pressed():
      display.show(Image.HAPPY)
   else:
      display.show(Image.SAD)
   sleep(500)

 

這裡我們用button_a.is_pressed() 來傳回判斷式的真偽,當A  按鍵被按壓時,傳回的值為真,所以會執行 display.show(Image.HAPPY),即顯示開心的圖案,否則顯示傷心的圖案。sleep(500)在if else的區塊之外,所以當決定了顯示哪一個圖像後,程式會延遲0.5秒鐘的時間。

For 迴圈是另外一種控制Python 流程的重要方法,其結構如下:

for 元素 in 有序物件:
   程式區塊

 

例如:

from microbit import *

ImageList = [Image.HAPPY, Image.SAD, Image.HEART]

for img in ImageList:
   display.show(img)
   sleep(1000) 

在程式的第三行我們先建立一個影像的串列,在Python 中串列是用[] 來設定,當我們把Image.HAPPY, Image.SAD 和 Image.HEART 放入中括號中並且取名為ImageList,ImageList 變成為一個有序的串列物件。利用for 迴圈,img 就會是依序把ImageList 串列中的元素給提出,接著就可以依序利用display.show() 顯示。