pbaumgarten.com

Microbit Lesson 4: Compound conditionals

Video

Conditional operators

We can combine the two previous ideas of conditionally executing code and storing values in variables. We can ask Python to inspect the value of a variable and use that to determine whether to execute an “if statement” or “while loop”.

While we’re at it, let’s also discover how to use the accelerometer. The following will continually read the x,y,z axis values from the accelerometer and store them into 3 variables: x, y, and z.

We can query those values to determine which way the microbit is angled.

from microbit import *

while not button_a.was_pressed():
    x,y,z = accelerometer.get_values()
    if x > 50:
        display.show(Image.ARROW_E)
    elif x < -50:
        display.show(Image.ARROW_W)
    else:
        display.show(".")
display.scroll("bye!")

Tilt tell

We can combine multiple if statements to use this trick to include the x and y axis.

from microbit import *
x,y,z = accelerometer.get_values()
while not button_a.was_pressed():
    if x < -200: # Tilted left
        if y < -200:
            display.show(Image.ARROW_NW)
        elif y > 200:
            display.show(Image.ARROW_SW)
        else:
            display.show(Image.ARROW_W)
    elif x > 200: # Tilted right
        if y < -200:
            display.show(Image.ARROW_NE)
        elif y > 200:
            display.show(Image.ARROW_SE)
        else:
            display.show(Image.ARROW_E)
    else: # Neutral x-axis tilt
        if y < -200:
            display.show(Image.ARROW_N)
        elif y > 200:
            display.show(Image.ARROW_S)
        else:
            display.show(Image.HAPPY)
    x,y,z = accelerometer.get_values()
display.scroll("Bye!")

Conditional execution operators

When posing a question for an if statement or while loop, the following examples illustrate the different comparison operations available.

a = 10
b = 10
while True:
    if button_a.was_pressed():
        a = a + 1
    if button_b.was_pressed():
        a = a - 1
    if a > b:
        display.scroll("a is larger")
    if a == b:
        display.scroll("values are same")
    if a < b:
        display.scroll("a is smaller")

Rolling marble style game

Here is a more complicated example. Note that by the use of or in the if statement we can set multiple conditions in one go.

from microbit import *
row = 2
column = 2
keep_playing = True
score = 0
while keep_playing:
    x,y,z = accelerometer.get_values()
    if x < -100:
        column = column - 1
    if x > 100:
        column = column + 1
    if y < -100:
        row = row - 1
    if y > 100:
        row = row + 1
    if row > 4 or row < 0 or column > 4 or column < 0:
        keep_playing = False
    else:
        display.clear()
        display.set_pixel(column, row, 9)
        score = score + 1
    sleep(200)
display.scroll("Game over")
display.scroll(score)

Activity

Make your own personalised modifications to the marble game.

For instance, can you create an easy mode / hard mode option?