Dies ist eine alte Version des Dokuments!


Beispiel

Ein Beispiel zum Starten, hierbei ist zu bemerken, dass ein Beschleunigungssensor, um Neigungen und Bewegungen zu erfassen genutzt werden kann.

beschleunigung1.py
#beschleunigung 1
from microbit import *
 
#Akzelerometer (Beschleunigungssensor, um Gesten und Bewegungen zu erkennen)
 
while True:
    if accelerometer.was_gesture('left'):
        display.show(Image.CONFUSED)
        sleep(200)
    else:
        display.show(Image.HAPPY)

In diesem kurzen Programm wird durch eine Endlosschleife immer wieder über den Akzelerometer überprüft, ob dieser nach links geneigt wurde. Falls dies der Fall ist, wird ein „verwirrtes“ Emoji angezeigt. Durch das if, bzw. das wenn, kann eine Bedingung mit zwei oder mehr Ausgangsmöglichkeiten implementiert werden.

Dadurch verzweig sich das Programm in zwei oder mehrere Äste. Ein einzelner Programmteil wird nur dann ausgeführt, falls die Bedingung als True (wahr) gilt, ansonsten wird dieser Teil des Programms nicht ausgeführt.

Falls es nur ein if - else-Selektion ist, dann wird es nur eine Verzweigung des Programms in 2 Programmäste geben, falls es ein if - elif -…- else -Selektion ist, dann in 3 oder mehr Teile.

9. Programmieraufgabe

  1. Untersuchen Sie das untenstehende unvollständige Programm. Was genau passiert? Beschreiben Sie kurz.
  2. Erweitern Sie das Programm so, dass beim Drücken von Knopf B ein kurzer Ton erzeugt wird und das Display „Bitte Knopf A drücken“ anzeigt.
  3. Verändern Sie das Programm weiter, sodass wenn beide Knöpfe gleichzeitig gedrückt werden, ein Symbol Ihrer Wahl angezeigt wird und eine Folge von absteigenden Tönen erzeugt wird.
  4. Erweitern Sie das Programm weiter, dass wenn der Micro:bit mit dem Logo nach unten gehalten wird, die aktuelle Raumtemperatur gemessen wird und diese auf dem Display auch per scroll angezeigt wird, gefolgt von einer kleinen Pause von einer Sekunde.

beschleunigung2.py
while True:
    if button_a.was_pressed():
        display.scroll('A')
        sleep(400)
        display.clear()

10. Programmieraufgabe

  1. Zeichnen Sie das Aktivitätsdiagramm des unten beschriebenen Programms, diskutieren Sie zu zweit.
  2. Schreiben Sie das Programm, welches die beiden Pulse misst.
  3. Ergänzen Sie das Programm, sodass die Werte von einem Micro:bit zum anderen gesendet werden!

Programm:
Es soll den jeweiligen Pulsschlag pro Minute von zwei Personen nacheinander anzeigen, dazu soll eine while-Schleife verwendet werden.
Der Puls soll wie auf dem Foto abgebildet, https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Pulse_evaluation.JPG/330px-Pulse_evaluation.JPG am eigenen Handgelenk gefühlt werden.
Der Mico:bit wird auf den Tisch neben das Handgelenk gelegt und bei jedem Pulsschlag wird auf den Knopf A bzw. auf den Knopf B - für die zweite Person - gerückt.
Um die gleiche Zeitspanne (beispielsweise 15 Sekunden) als Messperiode zu haben, ist ein akustisches Start- und Stoppsignal (ein Beep) nötig.
Der jeweils gemessene Puls wird in einer Variablen gespeichert. Die beiden Nutzer sollen auch mit Texten und Symbolen durch die Messung geleitet werden.

Tipps:

  • Die Bedingung button_a.is_pressed()= True könnte für Person A für die Verzweigung nötig sein.
  • Die 2.Programmieraufgabe könnte helfen
  • Ein Zähler ist nötig.
  • Die gemessenen Pulsschläge sind mit einem geeigneten Faktor proportional auf eine Zeitspanne von 60 Sekunden zu rechnen.
  • Das Menü Radio hilft für Teilaufgabe C.
  • Um einen Zahlenwert einer Variable in ein Wort (string) umzuwandeln, kann str(Zahlenwert) verwendet werden.

Lernfragen

  1. Wie kann erreicht werden, dass ein Teil eines Programms nur in bestimmten Fällen ausgeführt wird?
  2. Warum ist das Verzweigen (Entscheiden) des Programms überhaupt nötig?
  3. Worauf muss geachtet werden, wenn eine 'if'-Selektion verwendet wird?
  4. Welches sind die wichtigsten Erkenntnisse der Programmieraufgaben 1 bis 10? Notieren Sie dies kurz!

Schleifen sind sogenannte Wiederholungen von Code-Blöcken. Dabei geht es darum, einen Block von Befehlen mehrmals zu wiederholen. Es gibt dabei die sogenannten While-Schleifen, sowie die For-Schleifen.
Im folgenden Beispiel benützen Sie die While-Schleife, um einen Block von Code eigentlich „unendlich“ lange auszuführen.

Aufgabe 10: Schleifen, Selektion und Eingaben:
https://python.microbit.org/v/3|Hier gehts wieder zum Online-Editor

  • Im folgenden Code-Beispiel wird ein Stück Code auf dem Microbit sozusagen „unendlich“ lange immer wieder ausgeführt. Und zwar wird dabei immer ein „glückliches“ Gesicht für 2 Sekunden über das Display ausgegeben, danach ein „trauriges“ Gesicht und so weiter.
  • Kopieren Sie den folgenden Code und führen Sie diesen auf dem MicroBit aus!
  • Überlegen Sie sich, was die folgenden Code-Elemente bewirken:
    • „while True:“
    • sleep(2000)
    • Image.HAPPY & Image.SAD

Beachten Sie: „while True:“ beginnt eine sogenannte Schleife. Alles was nach diesem Code eingerückt (4 Abstände von der linken Seite entfernt) ist, wird sozusagen unendlich lange immer wieder ausgeführt.

# Microbit-Modul wird importiert
from microbit import *
 
# Wiederhole unendlich lange
while True:
    display.show(Image.HAPPY)
    sleep(2000)
    display.show(Image.SAD)
    sleep(2000)
  • Wir wollen nun dieses Programm etwas verändern und zwar dahingehend, dass wir über die zwei Knöpfe (buttons) die Ausgabe steuern können. Dazu brauchen wir innerhalb der while-Schleife (while True) eine Selektion, die testet, ob der Knopf a oder der Knopf b gedrückt wurde.
  • Falls a gedrückt wurde, soll ein glückliches Smiley erscheinen,
  • Falls b gedrückt wurde, soll ein trauriges Smiley erscheinen.

Dabei können wir über die Selektion if button_a.is_pressed(): herausfinden, ob der Knopf a gedrückt wurde. Das folgende Programm zeigt Ihnen den Anfang, erweitern Sie dieses entsprechend:

Beachten Sie, dass alle Befehle, die auf if button_a.is_pressed(): eingerückt folgt, nur dann geschieht, wenn der Knopf A gedrückt wurde.

# Microbit-Modul wird importiert
from microbit import *
 
# Wiederhole unendlich lange
while True:
    if button_a.is_pressed():
        ...
  • Programm auf dem eigenen Computer speichern: Sobald Sie mit Ihrem Programm zufrieden sind, speichern Sie dieses in Ihrem Informatik-Ordner. Hierfür klicken Sie neben dem Save-Button auf die drei Punkte und dann auf Save Python Script und geben einen sinnvollen Dateinamen ein (z.B. Aufgabe_10_Gefuehlomat). Die Date wird dann automatisch in Ihrem Downloadordner gespeichert. Bewegen Sie diese anschliessend in Ihren eigenen Informatikordner! So gespeicherte Dateien lassen sich im Editor immer wieder öffnen, indem Sie einfach auf den Open-Button klicken.
  • Überlegen Sie sich, welche „Eigenschaft“ von Algorithmen / Programmen bei diesem Algorithmus nun nicht eingehalten wird.
  • Wenn wir nun die Anzeige der Smileys nur noch über die Knöpfe steuern, sollten Sie den Befehl 'sleep(2000)' jeweils entfernen. Dieser hat hier keinen positiven Effekt mehr und verzögert nur die Interaktion mit dem Benütze / der Benützerin des Programmes.

Sie sollen Ihre neuen Erkenntnisse aus dieser Aufgabe (unendliche Schleife, Selektion und Eingabe durch Buttons) in Ihrem Cheatsheet in OneNote kurz einfügen und erörtern!

Mögliche Musterlösung einblenden

Lösung:

# Microbit-Modul wird importiert
from microbit import *
 
# Wiederhole unendlich lange
while True:
    if button_a.is_pressed():
        display.show(Image.HAPPY)
    if button_b.is_pressed():
        display.show(Image.SAD)

Aufgabe 11: Einen Schrittezähler programmieren und testen
https://python.microbit.org/v/3|Hier gehts wieder zum Online-Editor
Ziel dieser Übung ist es mit Hilfe von Schleifen, Selektion, Eingaben und Variablen einen einfachen Schrittezähler mit dem Microbit zu programmieren und zu testen. Erstellen Sie folgendes Programm:

  • Einee Variable „schritte“ wird zunächst der Wert 0 zugewiesen
  • Danach soll sich für immer wiederholen:
    • Wenn der Microbit geschüttelt wurde, wird die Vartiable „schritte“ um 1 vergrössert
    • Wenn der Knopf a gedrückt wurde, sollen die Anzahl Schritte auf dem Display gezeigt werden
      • Verwenden Sie dafür die Funktion display.scroll anstatt display.show, da die Variable „schritte“ mehr als nur 1 Stelle annehmen kann
    • Wenn der Knopf b gedrückt wurde, soll der Schrittezähler wieder bei 0 beginnen zu zählen (er wird zurückgesetzt)

Tipp:
Um herauszufinden, ob ein Schritt gemacht wurde, können wir am einfachten testen, ob der Microbit geschüttelt wurde. Dies geschieht über die Eingabe accelerometer.was_gesture('shake'), die jedesmal True ergibt, wenn wir den Microbit durchschütteln. Sie können also mit if accelerometer.was_gesture('shake'): überprüfen, ob der Microbit geschüttelt wurde.
Damit das Programm nicht nur einmal durchläuft, sollten Sie hier wiederum eine „Endlosschleife“ wie in der vorherigen Aufgabe einbauen.

  • Testen Sie nun Ihr Programm:
    • Lösen Sie den Microbit vom USB-Kabel
    • Verbinden Sie das Batteriefach mit dem Microbit, so dass dieser weiterhin Strom hat und das Programm startet
    • Befestigen Sie den Microbit mit dem Batteriefach an Ihrem Schuh (an Fussgelenk). Seien Sie bitte vorsichtig
    • Gehen Sie einige Schritte und testen Sie, wie gut der Schrittezähler funktioniert. Verwenden Sie ebenfalls Treppen, um das Programm zu testen!
  • Sobald Sie fertig sind und Ihr Programm auch erfolgreich getestet haben, speichern Sie dieses wiederum als Datei (Aufgabe_11_Schrittezaehler) in Ihrem Informatik-Ordner!

Mögliche Musterlösung einblenden

Lösung:

from microbit import *
 
schritte=0
while True:
    if accelerometer.was_gesture('shake'):
        schritte = schritte+1
    if button_a.is_pressed():
        display.scroll(schritte)
    if button_b.is_pressed():
        schritte = 0
        display.scroll(schritte)

Aufgabe 12: Accelerometer-Richtung
https://python.microbit.org/v/3|Hier gehts wieder zum Online-Editor
Ziel dieser Übung ist es nochmals den Einsatz von Schleifen, Selektion, Eingaben und Variablen mit dem Microbit zu übern und zu testen. Erstellen Sie folgendes Programm:

  • Es soll sich für immer wiederholen:
    • Wenn der Miicrobit nach oben bewegt wird (accelerometer.was_gesture(„up“)), soll für eine Sekunde ein Pfeil nach oben (Nord) auf dem Microbit angezeigt werden.
    • Wenn sich der Microbit nach rechts bewegt, soll der Pfeil für genau 1 Sekunde in Richtung rechts (Ost) zeigen
    • Wenn sich der Microbit nach unten bewegt, soll der Pfeil für genau 1 Sekunde in Richtung rechts (Süd) zeigen
    • Wenn sich der Microbit nach links bewegt, soll der Pfeil für genau 1 Sekunde in Richtung rechts (West) zeigen

Tipps:

  • Wenn Sie einen Pfeil anzeigen lassen wollen, können Sie den Befehl display.show() verwenden. In den Klammern müssen Sie das gewünschte „Bild“ angeben. Dazu können Sie Image. schreiben und sich anschauen, was Ihnen alles vorgeschlagen wird.
  • Um das Display nach 1 Sekunde zurückzusetzen, können Sie den Befehl display.clear() verwenden. Den Befehl zum Warten haben Sie ja bereits kennengelernt.
  • Testen Sie nun Ihr Programm:
  • Zeichnen Sie für diesen Algorithmus ein Flowchart-Diagramm auf Papier oder in OneNote mit den korrekten Diagrammelementen!

Sie sollen Ihre neuen Erkenntnisse aus dieser Aufgabe (z.B. das Zurücksetzen des Bildschirms) in Ihrem Cheatsheet in OneNote kurz einfügen und erörtern!

Mögliche Musterlösung einblenden

Lösung:

# Microbit-Modul wird importiert
from microbit import *
 
# Wiederhole unendlich lange
while True:
    if accelerometer.was_gesture("up"):
        display.show(Image.ARROW_N)
        sleep(1000)
        display.clear()
    if accelerometer.was_gesture("right"):
        display.show(Image.ARROW_E)
        sleep(1000)
        display.clear()
    if accelerometer.was_gesture("down"):
        display.show(Image.ARROW_S)
        sleep(1000)
        display.clear()
    if accelerometer.was_gesture("left"):
        display.show(Image.ARROW_W)
        sleep(1000)
        display.clear()

Sie haben sich vielleicht schon die Frage gestellt, ob es auch möglich ist, Schleifen endlich zu programmieren, sodass der Schleifenkörper nur eine endliche Anzahl von malen ausgeführt wird. Das ist grundsätzlich über zwei Wege in Python möglich:

  1. Zum Einen kann man über den Schlüsselbegriff break das sofortige Beenden einer Schleife an einer bestimmten Position im Programm bewirken
  2. Zum Anderen kann man im Schleifenkopf nach dem while eine sogenannte Schleifen-Bedingung einsetzen, die bei jedem Schleifendurchgang überprüft wird, und jedes mal entscheidet, ob der Schleifnkörper nochmals ausgeführt werden soll oder nicht

Hierzu studieren wir einmal das folgende kleine Programm. Kopieren Sie dieses in den Editor und laufen Sie es auf dem Microbit laufen. Ihnen fällt vielleicht auf, dass es sich um eine Art Metronom handelt, das 120 mal Pro Minute einen Ton ausgibt.
Über den Befehl music.set_tempo(bpm=anzahl) wird das Tempo der „Musik“ auf den Wert der Varialble anzahlBPM, also auf 120 gesetzt. Danach wird die Note „C“ abgespielt für einen Viertel Takt gespielt, danach für 3 Viertel des Taktes pausiert.
Falls man nun das Programm beenden möchte, muss man die Knöpfe A und B gleichzeitig gedrückt halten. Das and in der Selektion überprüft, ob beide Knöpfe gedrückt wurden. Was soll in dieser Situation nun geschehen? Die Schleife soll beendet werden, sodass das Programm stoppt. Hier kommt der Schlüsselbegriff break zum Zuge. Dieser führt dazu, dass die Schleife unmittelbar unterbrochen wird.

# Imports go at the top
from microbit import *
import music

# define variable anzahlBPM
anzahlBPM = 120

# Code in a 'while True:' loop repeats forever
while True:
    music.set_tempo(bpm=anzahlBPM)
    music.play(['C4:1', 'r:3'])
    if button_a.is_pressed() and button_b.is_pressed():
        break

Aufgabe 13: Ein Metronom programmieren mit variablen BPM
Studieren Sie oben das Unterkapitel „Schleifen beenden mit break“! Kopieren Sie das obige Programm in den Editor. Sie sollen dieses nun so erweitern, dass man mit dem Knopfdruck auf B das Tempo anzahlBPM um 10 Beats erhöhen kann und mit dem Knopfdruck auf A das Tempo um 10 Beats verringern kann. Weiterhin soll man über A und B gleichzeitig das Programm beenden können!
Tipp: Über den Reset-Button auf der Rückseite des Microbit kann man das Programm immer wieder von vorne starten lassen.
Speichern Sie das Programm anschliessend wieder in Ihrem Informatik-Ordner auf Ihrem Computer als Datei!

Sie sollen Ihre neuen Erkenntnisse aus dieser Aufgabe (Schleifen beenden durch break, mehrere Bedingungen Testen mit and) in Ihrem Cheatsheet in OneNote kurz einfügen und erklären!

Es ist möglich, eine while-Schleife nur genau solange ausführen zu lassen, wie eine bestimmte Bedingung eintrifft. Hierfür kann (ähnlcih wie nach dem if in der Selektion) nach dem Begriff while eine Bedingung zum Ausführen des Schleifenkopfes angegeben werden. Diese Bedingung wird vor jedem Ausführen des Schleifenkörpers immer wieder erneut überprüft und entschieden, ob sich die Schleife weiterdreht oder beendet wird. Hierzu ein kleines Beispiel:

# Import
from microbit import *

# Variable i wird auf 0 gesetzt
i=0
# solange i kleiner als 10 ist
while i<10:
    display.show(i)
    sleep(500)
    i=i+1 # ganz wichtig: innerhalb des Schleifenkörpers muss i erhöht werden

display.scroll("Programm Ende")

Aufgabe 14:
Ein Programm wurde geschrieben und sieht bei der Ausführung wie folgt aus:

  • Schreiben Sie dieses Programm, dabei sollte eine while-Schleife verwendet werden.

Tipp: Wenn Sie wollen, dass die While-Schleife nicht unendlich lange läuft, sondern nur, solange eine bestimmte Variable, z.B. k kleiner als ein bestimmter Wert ist, können Sie das while True: durch while Bedingung : ersetzen. Natürlich müssen Sie hierfür die Variable k vor der Schleife definieren und ihr einen Wert zuweisen. Damit dann die Schleife nur endlich mal ausgeführt wird, muss der Wert dieser im Schleifenkörper entsprechend verändert werden.

Sie sollen Ihre neuen Erkenntnisse aus dieser Aufgabe (Schleifen mit Bedingung) in Ihrem Cheatsheet in OneNote kurz einfügen und erklären!

Lernziele für dieses Unterkapitel

Die folgenden Lernziele dienen der Prüfungsvorbereitung und beziehen sich nur auf das aktuelle Unterkapitel

  • Ich kann in meinen eigenen Worten erklären, was ein Algorithmus ist, kann Beispiele aus dem Alltag nennen und erklären
  • Ich kann anhand eines einfachen Algorithmus die wichtigsten Eigenschaften von diesem erklären (z.B: Kockrezept oder Faltanleitung):
    • Eindeutigkeit
    • Ausführbarkeit
    • Terminierung
    • Determiniertheit
    • Determinismus
  • Ich verstehe das Prinzip des sequenziellen Ausführens eines Programmes (Algorithmus für den Computer), kann dies erklären
  • Ich kann ein Aktivitätsdiagramm (Flowchart) zu einem Algorithmus erfolgreich lesen und verstehe die Schritte
  • Ich kann ein Aktivitätsdiagramm zu einem einfachen Ablauf (z.B. ein Koch/Backrezept oder eines einfachen Programmes) erstellen
  • Ich kann das Prinzip von EVA (Eingabe, Verarbeitung und Ausgabe) bei Programmen erläutern
  • Ich kann in Python Werte und Texte im Display des Microbits ausgeben
  • Ich kann in einem Programm Variablen definieren, einsetzen und ausgeben mit dem Microbit
  • Ich weiss, wie gültige Variablen genannt werden müssen
  • Ich kenne die folgenden Operatoren und weiss, wie ich sie mit Python einsetzen kann:
    • Addition
    • Subtraktion
    • Multiplikation
    • Division
    • Exponentiation (Hoch rechnen)
    • Wurzel
  • Ich kann die vorgestellten Python-Module (microbit und math) in einem Programm importieren und erläutern wofür diese notwendig sind
  • Ich kann den Import-Befehl von Modulen in einem Python-Programm erläutern
  • Ich kann in Python eine Endlosschleife einsetzen (programmieren)
  • Ich kann in Python eine einfache Selektion (if …) einsetzen
  • Ich kann in die Knöpfe (Eingaben) des Microbits in einer Selektion überprüfen (wurde ein Knopf a oder b gedrückt?)
  • Ich kann in Python endliche Schleifen programmieren, die nur eine bestimmte Anzahl mal ausgeführt werden, um dann irgendwann zu stoppen
  • Ich kann Schleifen-Bedingungen einsetzen, um das Ausführen einer Schleife zu kontrollieren
  • Ich kann den Schlüsselbegriff break in Schleifen einsetzen, um diese an einem bestimmten Punkt zu beenden

Übungsaufgaben

Die folgenden Übungsaufgaben dienen der Vertiefung und Erweiterung Ihrer bisher erlernten Kentnissen und Fähigkeiten in der Programmierung mit Python und dem BBC:Microbit.

Aufgabe 15:
a) Erstellen Sie ein Programm, das die Summe aller Zahlen von 1 bis 100 berechnet und ausgibt. Dazu sollen Sie zwei Variablen i und summe und eine Schleife einsetzen! Der Code beginnt dabei wie folgt:

from microbit import *
i = 0
summe = 0

Speichern Sie Ihr Programm anschliessend!

Mögliche Musterlösung einblenden

Lösung:

from microbit import *
i = 0
summe = 0
 
while i<=100:
    summe = summe+i
    i = i+1
 
display.scroll("Die Summe 1 bis 100: ")
display.scroll(summe)

b) Erstellen Sie ein weiteres Programm, das nicht die Summe sondern das Produkt der ersten 10 Zahlen (1 bis 10) berechnet und ausgibt. Dazu sollen Sie zwei Variablen i und produkt und eine Schleife einsetzen!
Speichern Sie Ihr Programm anschliessend!

Mögliche Musterlösung einblenden

Lösung:

from microbit import *
i = 1
produkt = 1
 
while i<=10:
    produkt = produkt*i
    i = i+1
 
display.scroll("Das Produkt 1 bis 10: ")
display.scroll(produkt)

c) Freiwillig (knifflig): Erstellen Sie ein Programm, das die zehnte https://de.wikipedia.org/wiki/Fibonacci-Folge|Fibonacci-Zahl berechnet und ausgibt. Berechnen Sie anschliessend das Programm!

Mögliche Musterlösung einblenden

Lösung:

from microbit import *
f0 = 1
f1 = 1
fn = 2
i=3
# wir beginnen bei 3, weil die ersten 2 Zahlen schon da sind (1,1, ...)
while i<=10:
    fn=f0+f1
    f0=f1
    f1=fn
    i=i+1
display.scroll("Fibonacci 10 ist ")
display.scroll(fn)

Aufgabe 16
  Beantworten Sie die drei Lernfragen:

  1. Welche Ausgabemöglichkeiten haben wir beim Microbit bisher kennengelernt?
  2. Was ist der Unterschied zwischen display.scroll und display.show? Wann würden Sie was einsetzen?
  3. Was genau macht die Schleife while True:?
  4. Was macht die Schleife while i<100:?
  5. Wofür sind Variablen nützlich? Was ist der Unterschied zwischen dislpay.scroll(„a“) und dislpay.scroll(a)?
  6. Worauf muss geachtet werden, wenn eine sich endlich wiederholende while-Schleife programmiert werden soll.
  7. Wie lässt sich eine Schleife stoppen?
  8. Was passiert, wenn auf das Einrücken in der while-Schleife verzichtet wird?
  9. Welche Eingabemöglichkeiten haben wir bisher kennengelernt?

</hidden>

  • gf1/programmieren5.1684746335.txt.gz
  • Zuletzt geändert: 2023/05/22 11:05
  • von marroc