Dies ist eine alte Version des Dokuments!


countA.py
#Programm 1
from microbit import *
 
display.scroll('Press A') #Text wird angezeigt.
sleep(3000) #3000ms Zeit,in welcher der Benutzer den Knopf A einige Male drücken muss.
knopfdruck=button_a.get_presses() #Es wirdgezählt, wie oft der Knopf gedrückt wurde. 
display.scroll(knopfdruck) #Es wird die Anzahl Betätigungen angezeigt.

Durch dieses kleine Programm 1 wird gezählt, wie oft der Knopf A gedrückt in 3000ms gedrückt wird. Es wird neben der vordefinierten Methode display.scroll auch button_a.get_presses genutzt, jene gibt zurück, wie oft der Knopf a gedrückt wird.

:!: Das EVA-Prinzip ist hier klar erkennbar, die Eingabe ist das Drücken des Knopfes und die Ausgabe, das Anzeigen der Anzahl Knopfbetätigungen.
Das Programm ist sehr kurz und es fällt auf, dass es nur einen Durchlauf gibt. Durch ein erneutes Starten des Programms (die Stop- und Starttaste bei der Simulation oder dem Aus- und Einschalten des Micro:bits) kann ein weiteres Mal gezählt werden, wie oft A gedrückt wird. Das Programm kann natürlich auch wie folgt erweitert werden.

countB.py
#Programm 2
from microbit import *
 
display.scroll('Press A') #Erster Durchlauf
sleep(3000) 
knopfdruck=button_a.get_presses()
display.scroll(knopfdruck)
sleep(2000)
display.scroll('Repress A') #Zweiter Durchlauf
sleep(3000) 
knopfdruck=button_a.get_presses()
display.scroll(knopfdruck)
sleep(2000)
display.scroll('Repress A') #Dritter Durchlauf
sleep(3000) 
knopfdruck=button_a.get_presses()
display.scroll(knopfdruck)

Beim Programm oben wird die Programmzeilen dreimal wiederholen. Der Code-Block ist viel länger. Wie kann dieses Wiederholen besser programmiert werden, sodass das Programmieren effizient ist und das Programm ästhetisch und gut leserlich wirkt? Wie kann durch eine kleine Änderung im Programm erreicht werden, dass das Programm nicht dreimal hintereinander zählt, sondern zwanzigmal?

Neben den Variablen ist ein zweites wichtiges Programmierkonzept die Schleifen. Eine Schleife ist dann nötig, wenn ein Programmteil (Code-Block) sich mehrfach wiederholt. Durch das Verwenden einer Schleife muss die Programmzeile nicht immer wiederholt im Programm notiert werden. Somit ist dies genau das, was Programm 2 verbessern würde.

Es gibt grundsätzlich zwei Schleifentypen: Die while-Schleife und die for-Schleife. Wir beschränken uns im ersten Jahr auf die while-Schleife, da diese keine Listen benötigt. Listen und die for-Schleife wird im zweiten Jahr behandelt.

while-Schleife

Eine while-Schleife wird unter anderem dann verwendet, wenn:

  • …man nicht weiss, wie oft eine Wiederholung einiger Programmzeilen ausgeführt werden muss, man kennt somit die Anzahl der Wiederholungen nicht.
  • …. die Anzahl Wiederholungen bekannt ist und eine Zähl-Variable vorhanden ist.

Jede Schleife hat eine Bedingung (eine „Schleifenfrage“), die entweder wahr (True) oder falsch (False) ist. Die Wiederholungen werden nur so lange ausgeführt, wie die Bedingung erfüllt ist, bzw. die Schleifenfrage mit Ja - Wahr- True beantworte werden kann. Sobald die Bedingung nicht mehr erfüllt ist (false), dann wird das Programm nach der Schleife weiter abgearbeitet und die Wiederholungen werden abgebrochen.

Bei der Schleife wird der Body (die Programmzeile, die wiederholt wird) eingerückt, ansonsten erkennt Python dies nicht. Auch ist am Ende der while-Zeile unbedingt ein Doppelpunkt nötig, um anzuzeigen, dass nun die sich wiederholenden Programmzeilen folgen.

countC.py
#Programm 3
from microbit import *
 
zaehler=1 #ein Zähler ist nötig, um eine Bedingung, ein Stop-Kriterium zu definieren
while (zaehler<4):
    display.scroll('Press A') 
    sleep(3000) 
    knopfdruck=button_a.get_presses()
    display.scroll(knopfdruck)
    zaehler=zaehler+1 #Der Zähler muss um eins erhöht werden!

Hier ist ein Zähler nötig, denn dadurch kann die Anzahl Wiederholungen durch das Erhöhen in jedem Durchlauf (zaehler = zaehler+1)gezählt und somit auch festgelegt werden. Die while-Bedingung ist genau dreimal erfüllt.

Aufgabe 6
Für diese Aufgabe orientieren Sie sich am Programm Rechner 1 (wie Aufgabe 5). Schreiben Sie ein Programm mit folgenden Eigenschaften:

  • Der Variablenwert von a soll durch die Anzahl Bedienungen des Knopfs A bestimmbar sein. Dieser Wert soll per Scroll angezeigt werden.
  • Gleiches für den Variablenwert b.
  • Danach soll das Produkt der beiden Werte angezeigt werden.
from microbit import *
from math import *
 
#Variablen definieren und einen Wert zuweisen
a=3
b=5 
#Display.scroll dient zum Anzeigen 
display.scroll('a=')
display.scroll(a)
display.scroll('b=')
display.scroll(b)
display.scroll('sqrt(a**2+b**2')
display.scroll('c=')
display.scroll(sqrt(a**2+b**2))

Aufgabe 7
Verändern Sie das Programm 3 so, dass der Knopfdruckwert von Startwert 20 subtrahiert wird, bei jedem Durchlauf der Wiederholung dann von diesem Zwischenresultat weiter subtrahiert wird. Wenn durch diese Subtraktion 0 erreicht wird, soll ein Ton abgespielt.

Die Endlosschleife

Die while-Schleife kann auch als endlose Schleife genutzt werden. (Erinnern Sie sich bei Scratch: „wiederhole fortlaufend“) Um diese Endlosschleife zu programmieren, kann

 while (True=True): 

oder vereinfacht

 while True: 

genutzt werden. Diese Schleife wird während immer ausgeführt, solange das Programm ausgeführt wird. Es gibt somit keine Stopp-Bedingung. Diese spezielle Schleifenart wird oft verwendet, um eine Methode immer überprüfen zu lassen, ob ein Knopf gedrückt oder ein Sensor aktiviert wird oder ähnlich. Dies ist die grosse Stärke einer while-Schleife.

Aufgabe 8
Verändern Sie das Programm 3 so, dass es eine Endlosschleife enthält und nicht nach 3 Wiederholungen stoppt.

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

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

Aufgabe 10

  1. Lassen Sie den Micro:bit ein zufriedenes Smiley anzeigen. Hier hilft Ihnen das Menü Display.
  2. Verändern Sie Ihr kleines Programm so, dass zuerst das Smiley und danach ein anderes Symbol leuchtet, dabei sollten die LEDs nicht alle mit der selben Leuchtkraft leuchten und zwischen den beiden Elementen sollte es eine kurze Pause geben!
  3. Nutzen Sie nun eine while True Schleife, um immer zwischen dem Smiley und dem zweiten Symbol abzuwechseln, dabei sollte die Stärke der LED-Leuchtkraft des Smileys soll langsam zunehmen und dann löschen.

Lernfragen
  Beantworten Sie die drei Lernfragen ins OneNote - Cheatsheet :

  1. Was ist der Unterschied zwischen scroll und display?
  2. Was genau macht die Schleife while True?
  3. Warum sind Variablen nötig?
  4. Worauf muss geachtet werden, wenn eine sich endlich wiederholende while-Schleife programmiert werden soll.
  5. Was passiert, wenn auf das Einrücken in der while-Schleife verzichtet wird?

mögliche Lösungen

Aufgabe 6

 from microbit import *
from math import *
 
#Variablen definieren und einen Wert zuweisen
knopfdruck_a=0
knopfdruck_b=0
 
#Knopfdruck zählen
while True:
    #Knopf A
    display.scroll('Press A') #Erster Durchlauf
    sleep(3000) 
    knopfdruck_a=button_a.get_presses()
    display.scroll(knopfdruck_a)
    #Knopf B
    display.scroll('Press B') #Erster Durchlauf
    sleep(3000) 
    knopfdruck_b=button_b.get_presses()
    display.scroll(knopfdruck_b)
    #Produkt A*B
    display.scroll('a*b')
    display.scroll(knopfdruck_a*knopfdruck_b)

oder anstelle von einer endlosen Schleife auch möglich mit der Schleife und mehreren Durchläufen.

from microbit import *
from math import *
 
#Variablen definieren und einen Wert zuweisen
knopfdruck_a=0
knopfdruck_b=0
zaehler=0
 
#Knopfdruck zählen
while (zaehler<4):
    #Knopf A
    display.scroll('Press A') #Erster Durchlauf
    sleep(3000) 
    knopfdruck_a=button_a.get_presses()
    display.scroll(knopfdruck_a)
    #Knopf B
    display.scroll('Press B') #Erster Durchlauf
    sleep(3000) 
    knopfdruck_b=button_b.get_presses()
    display.scroll(knopfdruck_b)
    #Produkt A*B
    display.scroll('a*b')
    display.scroll(knopfdruck_a*knopfdruck_b)
    zaehler=zaehler+1

Aufgabe 7

from microbit import *
 
zaehler=20 #ein Zähler ist nötig, um eine Bedingung, ein Stop-Kriterium zu definieren
while (zaehler>0):
    display.scroll('Press A') 
    sleep(3000) 
    knopfdruck=button_a.get_presses()
    zaehler=zaehler-knopfdruck #hier wird vom aktuellen Wert der Knopfdruckwert abgezogen wird.
    display.scroll(zaehler)
 

Aufgabe 8

from microbit import *
 
zaehler=1 #ein Zähler ist nötig, um eine Bedingung, ein Stop-Kriterium zu definieren
while True:
    display.scroll('Press A') 
    sleep(3000) 
    knopfdruck=button_a.get_presses()
    display.scroll(knopfdruck)

Aufgabe 9

from microbit import *
 
zaehler=1 #ein Zähler ist nötig, um eine Bedingung, ein Stop-Kriterium zu definieren
while (zaehler<5):
    display.scroll(2*zaehler)
    zaehler=zaehler+1
display.scroll('stop')

Aufgabe 10

from microbit import *
 
 
 
while True:
    display.set_pixel(1,1,9)
    display.set_pixel(3,1,3)
    display.set_pixel(4,3,3)
    display.set_pixel(0,3,5)
    display.set_pixel(1,1,5)
    display.set_pixel(3,1,5)
    display.set_pixel(3,3,3)
    display.set_pixel(2,3,5)
    display.set_pixel(1,3,5)
    sleep(400)
    display.show(Image.HAPPY)
    sleep(400)
    display.clear()
  • gf1/programmieren4.1686739337.txt.gz
  • Zuletzt geändert: 2023/06/14 12:42
  • von marroc