Ozocard¶
Probefragen zum lernen:¶
Was sind Kontrollstrukturen?¶
Was steuert eine Selektion?¶
Welche anderen Bezeichnungen für eine Selektion sind gebräuchlich?¶
Was hat es mit dem doppelten Gleichheitszeichen auf sich?¶
Was ist der Unterschied zwischen x = 12 und x == 12?¶
Was ist ein vergleichender, was ein zunemender Operator?¶
¶
Tastendruck 2.1(Dok)¶
# Für dieses Programm benötigen wir eine Endlosschleife
# Wir haben das bisher mit while(True) o.ä. umgesetzt
# Auf der Oxocard gibt es s.g. Ereignisprozeduren, welche vom Compiler
# erkannt und automatisch als Endlosschleife ausgeführt werden
# Eine davon ist onDraw()
def onDraw(): # wird als Endlosschleife ausgeführt!
clear() # Wozu? Weglassen?
if getButton() == 0: # Bedingung trifft zu, wenn kein Button gedrückt wird
fill(0,0,0)
else:
drawCircle(120,120,80)
fill(255,0,0)
update()
Float
+----------------------+
| onDraw() |
+----------------------+
|
v
+----------------------+
| clear() (Clear |
| the screen) |
+----------------------+
|
v
+----------------------------+
| getButton() == 0 ? |
| (Is any button pressed?) |
+----------------------------+
/ |
Yes No
+-----------+ | |
| fill(0,0,0) | | |
| (Set color | | |
| to black) | | |
+-----------+ v |
+-----------------+
| fill(255,0,0) |
| (Set color to |
| red) |
+-----------------+
|
v
+------------------+
| drawCircle(120, |
| 120, 80) |
| (Draw a circle) |
+------------------+
|
v
+------------------+
| update() (Update |
| the screen) |
+------------------+
Digitaluhr¶
ohne Sekunden:
const X = 50
const Y = 50
const COLOR = 0
def onDraw():
clear()
strokeHSV(0,255,255)
if getMinute() > 10:
drawText(X, Y, getHour() + ":" + getMinute()) # Text lässt sich durch ➕ mit Funktionswerten kombinieren
else:
drawText(X, Y, getHour() + ":" + "0" + getMinute())
update()
delay(1000)
mit Sekunden:
const X = 50
const Y = 50
const COLOR = 0
def onDraw():
clear()
strokeHSV(0,255,255)
if getMinute() > 10:
drawText(X, Y, getHour() + ":" + getMinute() + ":")# Text lässt sich durch ➕ mit Funktionswerten kombinieren
else:
drawText(X, Y, getHour() + ":" + "0" + getMinute() + ":")
if getSecond() > 9:
drawText(X, Y, getHour() + ":" + getMinute() + ":" + getSecond())
else:
drawText(X, Y, getHour() + ":" + getMinute() + ":" + "0" + getSecond())
update()
delay(1000)
if/elif/else¶
def onDraw():
clear()
if getButton() == 1:
drawCircle (120,120,20)
fill(255,255,255)
elif getButton() == 2:
drawCircle(120,50,20)
fill(255,255,255)
elif getButton() == 4:
drawCircle(120,200,20)
fill(255,255,255)
elif getButton() == 3:
drawCircle(200,120,20)
fill(255,255,255)
elif getButton() == 5:
drawCircle(40,120,20)
fill(255,255,255)
else:
textFont(FONT_ROBOTO_16)
text = "Bitte Taste drücken"
breite = textWidth(text) # Welcher Wert wird berechnet? Wozu?
drawText(50,50,text) # Text auf x-Achse zentrieren
update()
2.4 Punktwolkenkunst¶
mitteldrittel ausgefüllt:
stroke(200, 200, 200)
fill(255,255,255)
for i in 1500:
x = random(80,160)
y = random(0,240)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
update()
schweizer flagge:
stroke(200, 200, 200)
fill(255,0,0)
for i in 1500:
x = random(0,80)
y = random(0,80)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
for i in 1500:
x = random(160,80)
y = random(0,80)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
for i in 1500:
x = random(0,80)
y = random(160,240)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
for i in 1500:
x = random(160,80)
y = random(160,240)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
stroke(200,200,200)
fill(255,255,255)
for i in 1500:
x = random(80,160)
y = random(0,240)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
for i in 1500:
x = random(0,80)
y = random(80,160)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
for i in 1500:
x = random(160,240)
y = random(80,160)
r = random(1,5)
# if-Bedingung
drawCircle(x, y, r)
update()
2.5 Openair Eintritt¶
Programmablauf:
Programm:
const Ticket = true # true .. false
const Reservation = true # true .. false
const Alter = 24 # 6 .. 100
const Promille = 0.47 # 0.0 .. 1.0
def onDraw():
textFont(FONT_ROBOTO_BOLD_24)
if Ticket or Reservation:
if Alter > 16 and Promille <= 0.5:
fill(0, 255, 0)
drawText(10, 10, "Eintritt gewährt")
elif Alter >= 14 and Promille == 0:
fill(255, 0, 0)
drawText(10, 10, "Eintritt gewährt")
elif Alter >= 15 and Promille == 0:
fill(255, 0, 0)
drawText(10, 10, "Eintritt gewährt")
elif Alter >= 16 and Promille == 0:
fill(255, 0, 0)
drawText(10, 10, "Eintritt gewährt")
else:
fill(255, 0, 0)
drawText(10, 10, "Eintritt verweigert")
else:
fill(0,255,0)
drawText(10,10,"Eintritt verweigert")
update()
Einlass ja/nein und warum?¶
const Ticket = true # true .. false
const Reservation = true # true .. false
const Alter = 36 # 6 .. 100
const Promille = 0.68 # 0.0 .. 1.0
def onDraw():
textFont(FONT_ROBOTO_BOLD_24)
# Überprüfen, ob ein Ticket oder eine Reservierung vorhanden ist
if Ticket and Reservation:
# Überprüfen des Alters und des Promillewerts
if Alter > 16 and Promille <= 0.5:
fill(0, 255, 0) # Grün für "Eintritt gewährt"
drawText(10, 10, "Eintritt gewährt")
drawCircle(120,200,30)
fill(0, 255, 0)
elif Alter >= 14 and Promille == 0:
fill(0, 255, 0) # Grün für "Eintritt gewährt"
drawText(10, 10, "Eintritt gewährt")
drawCircle(120,200,30)
fill(0, 255, 0)
elif Alter >= 15 and Promille == 0:
fill(0, 255, 0) # Grün für "Eintritt gewährt"
drawText(10, 10, "Eintritt gewährt")
drawCircle(120,200,30)
fill(0, 255, 0)
elif Alter >= 16 and Promille == 0:
fill(0, 255, 0) # Grün für "Eintritt gewährt"
drawText(10, 10, "Eintritt gewährt")
drawCircle(120,200,30)
fill(0, 255, 0)
else:
fill(255, 0, 0) # Rot für "Eintritt verweigert"
if Alter < 14:
if getButton() == 1:
drawText(10, 10, "Eintritt verweigert")
drawText(10, 80, "Alter zu niedrig (< 14)")
elif getButton():
clear()
drawCircle(120,200,30)
fill(255, 0, 0)
elif Promille > 0.5:
if getButton() == 1:
drawText(10, 10, "Eintritt verweigert")
drawText(10, 80, "Promillewert zu hoch\n (> 0.5)")
elif getButton() == 0:
clear()
drawCircle(120,200,30)
fill(255, 0, 0)
else:
if getButton() == 1:
drawText(10, 10, "Eintritt verweigert")
drawText(10,50, "Alter oder Promille \n nicht gültig")
elif getButton() == 0:
clear()
drawCircle(120,200,30)
fill(255, 0, 0)
else:
fill(255, 0, 0) # Rot für "Eintritt verweigert"
if not Ticket and not Reservation:
if getButton() == 1:
drawText(10, 10, "Eintritt verweigert")
drawText(10, 50, "Weder noch vorhanden")
elif getButton() == 0:
clear()
drawCircle(120,200,30)
fill(255, 0, 0)
elif Ticket == false:
if getButton() == 1:
drawText(10, 10, "Eintritt verweigert")
drawText(10, 50, "Kein Ticket!")
if getButton() == 0:
clear()
drawCircle(120,200,30)
fill(255, 0, 0)
elif Reservation == false:
if getButton() == 1:
drawText(10, 10, "Eintritt verweigert")
drawText(10, 50, "Keine Reservation")
if getButton() == 0:
clear()
drawCircle(120,200,30)
fill(255, 0, 0)
update()
drawCircle(120,200,30)
fill(255, 0, 0)
update()
g
g
g
3 Schleifen¶
Kreise immer
Hochzählen¶
Kreislabor¶
normale Kreise:
push()
background(0,0,0)
translate(120,120)
for i in 12:
rotate(PI/6)
drawCircle(80,0,10)
update()
pop()
kreise die grösser und weniger sind:
kreise die kleiner werden:
kreise die kleiner werden mit weniger abstand:
Warum while statt for?¶
Was ist der grundlegende Unterschied zwischen den beiden Kontrollstrukturen?¶
while-Schleife: Wird verwendet, wenn die Wiederholung von einer Bedingung abhängt. Man weiß im Voraus nicht immer, wie oft sie ausgeführt wird.for-Schleife: Wird verwendet, um eine festgelegte Anzahl von Iterationen durchzuführen, oft über eine Sammlung von Elementen oder einen bekannten Bereich.
Die Wahl der Schleife hängt also davon ab, ob die Anzahl der Iterationen festgelegt ist (for) oder von einer Bedingung abhängt (while).
Warum sollte man überhaupt eine while- statt einer for-Schleife nutzen?¶
Man verwendet eine while-Schleife in Situationen, in denen die Schleife auf dynamische oder unvorhersehbare Bedingungen reagiert, während die for-Schleife besser geeignet ist, wenn die Anzahl der Iterationen vorhersehbar oder festgelegt ist. Die while-Schleife bietet daher mehr Flexibilität für Schleifen, die auf externe Faktoren oder nicht feste Bedingungen basieren.
beispiel für eine while - Schleife:
¶
Raster¶
v.1.0
const kreise_anzahl_x = 10 # 2 .. 10
const kreise_anzahl_y = 10 # 2 .. 10
abstand_x = 240/kreise_anzahl_x
abstand_y = 240/kreise_anzahl_y
j = abstand_y/2
while j <= 240:
i = abstand_x/2
while i <= 240
drawCircle(i, j, 5)
i += abstand_x
j += abstand_y
update()
Das Programm zeichnet ein Raster aus Kreisen auf einer 240x240 großen Fläche, wobei die Anzahl der Kreise in der X- und Y-Richtung durch kreise_anzahl_x und kreise_anzahl_y festgelegt wird (hier 10x10). Die Kreise werden gleichmäßig verteilt, indem der Abstand zwischen ihnen berechnet wird.
Beispiel:¶
-
Abstände:
-
abstand_x = 240 / 10 = 24 -
abstand_y = 240 / 10 = 24 -
Die Kreise werden in einer Schleife platziert, z.B. beginnt der erste Kreis bei
(12, 12)und hat einen Radius von 5. Weitere Kreise folgen in regelmäßigen Abständen.
v2.0
const kreise_anzahl_x = 10 # 2 .. 10
const kreise_anzahl_y = 10 # 2 .. 10
abstand_x = 240/kreise_anzahl_x
abstand_y = 240/kreise_anzahl_y
j = abstand_y/2
while j <= 240:
i = abstand_x/2
while i <= 240
drawCircle(i, j, 5)
i += abstand_x
j += abstand_y
update()
while true:
if getButton() == 1 and kreise_anzahl_x == kreise_anzahl_y
drawLine(0, 0, 240, 240)
drawLine(0, 240, 240 ,0)
update()
es zeichnet nach eingabe zweier variablen kreise auf dem bildschirm der ozocard
bei der while-true schleife wird bei eingabe der oberen taste ein x auf dem bildschirm gezeichnet:
-ende

