Lernpfad:Einführung in den micro:bit/9: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Ngb (Diskussion | Beiträge) |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
{{Aufgabe:Start|Icon=MuEditor.png}} | {{Aufgabe:Start|Icon=MuEditor.png}} | ||
Übertrage das Programm unten in den {{ | Übertrage das Programm unten in den {{Thonny}} und überspiele es auf den {{micro:bit}}. | ||
Teste das Programm und erkläre seine Funktion. Notiere dir dazu '''Stichpunkte im Heft''' und ergänze neue Befehle in deiner '''Befehlsübersicht'''. | Teste das Programm und erkläre seine Funktion. Notiere dir dazu '''Stichpunkte im Heft''' und ergänze neue Befehle in deiner '''Befehlsübersicht'''. | ||
Zeile 27: | Zeile 27: | ||
x = 0 | x = 0 | ||
y = 0 | y = 0 | ||
display.clear() | |||
display.set_pixel(x, y, 6) | display.set_pixel(x, y, 6) | ||
Zeile 43: | Zeile 44: | ||
sleep(200) | sleep(200) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Info:Start}} | |||
=== Das Schlüsselwort <code>return</code> === | |||
In Zeile 13 siehst Du das neue Schlüsselwort <code>return</code> im Python-Code. Es kann am Ende einer Funktion vorkommen und bedeutet, dass die Funktion sofort beendet ist und der Wert, der hinter <code>return</code> steht als Ergebnis der Funktion "''zurückgegeben''" werden soll. | |||
Der ''zurückgegebene'' Wert wird beim Benutzen der Funktion (dem Aufruf) für die Funktion eingesetzt. Im folgenden Beispiel wird also das Ergebnis <code>5</code> ausgegeben, da die Funktion <code>verdoppeln</code> beim Aufruf <code>verdoppeln(2)</code> durch die ''Rückgabe'' <code>4</code> ersetzt wird und dann <code>+ 1</code> gerechnet wird. | |||
<syntaxhighlight lang="python" line="1"> | |||
def verdoppeln( zahl ): | |||
return zahl * 2 | |||
ergebnis = verdoppeln(2) + 1 | |||
print(ergebnis) | |||
</syntaxhighlight> | |||
Im Beispiel oben prüft die Funktion <code>check_coords</code>, ob die Parameter <code>x</code> und <code>y</code> korrekte Indizes für LEDs des {{micro:bit}} Displays sind (also zwischen <code>0</code> und <code>4</code> liegen). Ist ein Wert nicht in diesem Bereich, werden die Werte auf <code>0</code> oder <code>4</code> gesetzt. Es wird dann eine Liste mit angepassten <code>x</code> und <code>y</code> Werten ''zurückgegeben'', die auf jeden Fall korrekte Indizes darstellen. | |||
Die Variablen <code>x1</code> und <code>y1</code> werden in Zeile 28 dann auf die beiden Werte der Liste gesetzt, die von <code>check_coords</code> ''zurückgegeben'' wurde. | |||
{{Info:End}} | |||
{{Info:Start}} | |||
=== Das Schlüsselwort <code>break</code> === | |||
Manchmal ist es nötig, eine Schleife vorzeitig abzubrechen. Im Code oben gibt es etwa eine Endlosschleife, die niemals endet. Soll diese Schleife doch einmal beendet werden, kann das Schlüsselwort <code>break</code> benutzt werden. Es bricht genau die Schleife ab, in der es vorkommt. | |||
<syntaxhighlight lang="python" line="1"> | |||
i = 1 | |||
while True: | |||
print("Schleife läuft") | |||
i += 1 | |||
if i > 10: | |||
break # bricht die Schleife nach 10 Durchläufen ab | |||
print("Schleife beendet") | |||
</syntaxhighlight> | |||
{{Info:End}} | |||
{{Aufgabe:Start|Icon=MuEditor.png}} | |||
Erweitere das Programm nun zu einem kleinen Spiel. Das Ziel soll es sein, alle LEDs des Displays einzuschalten. Nimm dazu folgende Änderungen vor: | |||
# Anstatt die alte LED auszuschalten, setze ihren Wert auf <code>3</code>. | |||
# Implementiere eine Methode <code>check_display()</code>, die prüft, ob alle LEDs an sind und in diesem Fall <code>True</code> ''zurückgibt'', ansonsten <code>False</code>. | |||
# Nutze <code>check_display()</code>, um vor jedem <code>sleep()</code> das Display zu prüfen. | |||
# Falls das Display komplett an ist, schalte alle LEDs auf <code>6</code> und breche die Endlosschleife ab. | |||
{{Aufgabe:End}} | |||
=== Hilfreiche Befehle === | |||
{|{{prettytable}} | |||
|width="200px"| <syntaxhighlight lang="python"> | |||
for i in range(5): | |||
print(i) | |||
</syntaxhighlight> || Eine ''Zählschleife'', die ab dem Wert <code>0</code> die Variable <code>i<code> nacheinander auf insgesamt <code>5</code> Zahlen setzt (also <code>0, 1, 2, 3, 4</code>). In jedem Durchlauf der Schleife hat <code>i</code> also einen anderen Wert. | |||
|+ | |||
| <code>display.get_pixel(0, 3)</code> || Ermittelt den Helligkeitswert (<code>0</code> bis <code>9</code>) der LED am Index <code>(0, 3)</code> (also in Zeile 1, Reihe 4). | |||
|} | |||
{{Tipp:Start}} | |||
Du kannst eine LED des Displays mit den Funktionen <code>display.get_pixel(x, y)</code> abrufen und mit <code>display.set_pixel(x, y, value)</code> einschalten. <code>x</code> und <code>y</code> sind der Spalten- und Zeilenindex der LED zwischen <code>0</code> und <code>4</code>. <code>value</code> ist ein Helligkeitswert zwischen <code>0</code> und <code>9</code>. | |||
Du kannst alle LEDs prüfen oder schalten, indem Du zwei Zählschleifen benutzt. Der folgende Code reduziert die Helligkeit jeder LED um Eins: | |||
<syntaxhighlight lang="python" line="1"> | |||
# Schaltet alle LEDs auf die Helligkeit 3 | |||
for y in range(5): | |||
for x in range(5): | |||
helligkeit = display.get_pixel(x, y) | |||
display.set_pixel(x, y, helligkeit - 1) | |||
</syntaxhighlight> | |||
{{Tipp:End}} | |||
{{Lösung:Start}} | |||
<syntaxhighlight lang="python" line="1" highlight="15-21,24-28,45,48-50"> | |||
from microbit import * | |||
## Hilfsfunktion | |||
def check_coords(x, y): | |||
if x > 4: | |||
x = 4 | |||
elif x < 0: | |||
x = 0 | |||
if y > 4: | |||
y = 4 | |||
elif y < 0: | |||
y = 0 | |||
return (x, y) | |||
## Hilfsfunktion, um das Display zu prüfen | |||
def check_display(): | |||
for y in range(5): | |||
for x in range(5): | |||
if display.get_pixel(x, y) == 0: | |||
return False | |||
return True | |||
## Hilfsfunktion, um das Display einzuschalten | |||
def on(value=6): | |||
for y in range(5): | |||
for x in range(5): | |||
display.set_pixel(x, y, value) | |||
## Initialisierung | |||
sens = 350 # Mess-Sensitivität des Akzelerometer | |||
x = 0 | |||
y = 0 | |||
display.clear() | |||
display.set_pixel(x, y, 6) | |||
## Endlosschleife | |||
while True: | |||
x1 = x + int(accelerometer.get_x()/sens) | |||
y1 = y + int(accelerometer.get_y()/sens) | |||
x1, y1 = check_coords(x1, y1) | |||
if x1 != x or y1 != y: | |||
display.set_pixel(x, y, 3) | |||
display.set_pixel(x1, y1, 6) | |||
x, y = x1, y1 | |||
if check_display(): | |||
on() | |||
break | |||
sleep(200) | |||
</syntaxhighlight> | |||
{{Lösung:End}} |
Aktuelle Version vom 12. Dezember 2023, 16:16 Uhr
Übertrage das Programm unten in den Thonny und überspiele es auf den micro:bit.
Teste das Programm und erkläre seine Funktion. Notiere dir dazu Stichpunkte im Heft und ergänze neue Befehle in deiner Befehlsübersicht.
Tipp: Kippe den micro:bit doch mal leicht in eine Richtung.
from microbit import *
## Hilfsfunktion
def check_coords(x, y):
if x > 4:
x = 4
elif x < 0:
x = 0
if y > 4:
y = 4
elif y < 0:
y = 0
return (x, y)
## Initialisierung
sens = 350 # Mess-Sensitivität des Akzelerometer
x = 0
y = 0
display.clear()
display.set_pixel(x, y, 6)
## Endlosschleife
while True:
x1 = x + int(accelerometer.get_x()/sens)
y1 = y + int(accelerometer.get_y()/sens)
x1, y1 = check_coords(x1, y1)
if x1 != x or y1 != y:
display.set_pixel(x, y, 0)
display.set_pixel(x1, y1, 6)
x, y = x1, y1
sleep(200)
Das Schlüsselwort return
In Zeile 13 siehst Du das neue Schlüsselwort return
im Python-Code. Es kann am Ende einer Funktion vorkommen und bedeutet, dass die Funktion sofort beendet ist und der Wert, der hinter return
steht als Ergebnis der Funktion "zurückgegeben" werden soll.
Der zurückgegebene Wert wird beim Benutzen der Funktion (dem Aufruf) für die Funktion eingesetzt. Im folgenden Beispiel wird also das Ergebnis 5
ausgegeben, da die Funktion verdoppeln
beim Aufruf verdoppeln(2)
durch die Rückgabe 4
ersetzt wird und dann + 1
gerechnet wird.
def verdoppeln( zahl ):
return zahl * 2
ergebnis = verdoppeln(2) + 1
print(ergebnis)
Im Beispiel oben prüft die Funktion check_coords
, ob die Parameter x
und y
korrekte Indizes für LEDs des micro:bit Displays sind (also zwischen 0
und 4
liegen). Ist ein Wert nicht in diesem Bereich, werden die Werte auf 0
oder 4
gesetzt. Es wird dann eine Liste mit angepassten x
und y
Werten zurückgegeben, die auf jeden Fall korrekte Indizes darstellen.
Die Variablen x1
und y1
werden in Zeile 28 dann auf die beiden Werte der Liste gesetzt, die von check_coords
zurückgegeben wurde.
Das Schlüsselwort break
Manchmal ist es nötig, eine Schleife vorzeitig abzubrechen. Im Code oben gibt es etwa eine Endlosschleife, die niemals endet. Soll diese Schleife doch einmal beendet werden, kann das Schlüsselwort break
benutzt werden. Es bricht genau die Schleife ab, in der es vorkommt.
i = 1
while True:
print("Schleife läuft")
i += 1
if i > 10:
break # bricht die Schleife nach 10 Durchläufen ab
print("Schleife beendet")
Erweitere das Programm nun zu einem kleinen Spiel. Das Ziel soll es sein, alle LEDs des Displays einzuschalten. Nimm dazu folgende Änderungen vor:
- Anstatt die alte LED auszuschalten, setze ihren Wert auf
3
. - Implementiere eine Methode
check_display()
, die prüft, ob alle LEDs an sind und in diesem FallTrue
zurückgibt, ansonstenFalse
. - Nutze
check_display()
, um vor jedemsleep()
das Display zu prüfen. - Falls das Display komplett an ist, schalte alle LEDs auf
6
und breche die Endlosschleife ab.
Hilfreiche Befehle
for i in range(5):
print(i)
|
Eine Zählschleife, die ab dem Wert 0 die Variable i |
display.get_pixel(0, 3) |
Ermittelt den Helligkeitswert (0 bis 9 ) der LED am Index (0, 3) (also in Zeile 1, Reihe 4).
|
Du kannst eine LED des Displays mit den Funktionen display.get_pixel(x, y)
abrufen und mit display.set_pixel(x, y, value)
einschalten. x
und y
sind der Spalten- und Zeilenindex der LED zwischen 0
und 4
. value
ist ein Helligkeitswert zwischen 0
und 9
.
Du kannst alle LEDs prüfen oder schalten, indem Du zwei Zählschleifen benutzt. Der folgende Code reduziert die Helligkeit jeder LED um Eins:
# Schaltet alle LEDs auf die Helligkeit 3
for y in range(5):
for x in range(5):
helligkeit = display.get_pixel(x, y)
display.set_pixel(x, y, helligkeit - 1)
from microbit import *
## Hilfsfunktion
def check_coords(x, y):
if x > 4:
x = 4
elif x < 0:
x = 0
if y > 4:
y = 4
elif y < 0:
y = 0
return (x, y)
## Hilfsfunktion, um das Display zu prüfen
def check_display():
for y in range(5):
for x in range(5):
if display.get_pixel(x, y) == 0:
return False
return True
## Hilfsfunktion, um das Display einzuschalten
def on(value=6):
for y in range(5):
for x in range(5):
display.set_pixel(x, y, value)
## Initialisierung
sens = 350 # Mess-Sensitivität des Akzelerometer
x = 0
y = 0
display.clear()
display.set_pixel(x, y, 6)
## Endlosschleife
while True:
x1 = x + int(accelerometer.get_x()/sens)
y1 = y + int(accelerometer.get_y()/sens)
x1, y1 = check_coords(x1, y1)
if x1 != x or y1 != y:
display.set_pixel(x, y, 3)
display.set_pixel(x1, y1, 6)
x, y = x1, y1
if check_display():
on()
break
sleep(200)