Hinweise zur Prüfung
Diese Prüfungsvorbereitung ist dazu da, dass Sie die Art der Fragestellungen abschätzen können.
- Stoffumfang: bis und mit “3 Turtleinvaders” im Kapitel “B Turtle-Invaders” auf Informatikgarten. Dort finden Sie auch die Lernziele.
- Ihre generellen Pythonkenntnisse werden ebenfalls vorausgesetzt.
- Sie werden diese Befehlsliste erhalten. (Python-Strukturen werden darauf nicht erklärt!)
- Sie finden hier eine technische Vorschau auf Exam.net, um den Programmiereditor zu versuchen.
Das Turtle-Fenster verstehen
Ein Turtlefenster sei 600px hoch und 800px breit. Das Turtle-Raumschiff wird anders als bei unserem Spiel mit folgendem Code positioniert:
window = turtle.Screen()
### ...weiterer Code...
LEFT = -window.window_width() / 2
RIGHT = window.window_width() / 2
TOP = window.window_height() / 2
BOTTOM = -window.window_height() / 2
GROUND = LEFT + 50
ship = turtle.Turtle()
ship.setposition(GROUND, 0)
### ...weiterer Code...
Beantworten Sie folgende Fragen zu GROUND.
- Was für einen Wert hat GROUND?
- Ist der Datentyp von GROUND in Python veränderbar (mutable)?
- Wo wird das Raumschiff ungefähr platziert? Zeichnen Sie die ungefähre Position ein.
Lösung
- -350
- Nein, es ist ein Integer, also ein unveränderbarer Datentyp.
- 👇
Was wird nach diesem Programm in diesem Fenster gezeichnet worden sein?
import turtle
zahlen = [-150,0,290]
invaderliste = []
for i in zahlen:
t = turtle.Turtle()
t.penup()
t.setposition(-400,i)
t.pendown()
invaderliste.append(t)
for i in range(40):
for invader in invaderliste:
invader.forward(10)
turtle.done()
Lösung
Unsere Steuerung verstehen
Hilfe! Ich wollte meine Steuerung gemäss einem Tutorial so verbessern, damit wenn ich Links oder Rechts drücke, am Anfang kein Ruckler entsteht, während dessen das Raumschiff stehen bleibt. Aber irgendwie funktioniert jetzt gar nichts mehr.
Helfen Sie mir bitte bei folgenden Problemen:
- Ein Fehler im Dateisystem hat mein Programm teilweise korrumpiert. Ich habe Ihnen drei Linien markiert, können Sie diese bitte wieder herstellen?
- Aber auch vor dem Dateifehler lief das Programm ganz und gar nicht. Mein Editor hat eine Linie markiert, das etwas nicht sein könne. Aber ich weiss nicht mehr welche Linie das war. Können Sie die Linie finden und korrigieren?
SHIP_STEP = 2
ship_direction = 0
def move_left():
global ship_direction
ship_direction = -1
def move_right():
global ship_direction
ship_direction = 1
def stop_moving():
global ship_direction
ship_direction = 0
window.onkeypress(move_left, "Left")
window.onkeypress(move_right, "Right")
S%V7qrubhhZeXx7fthyqxZC*@swsy7rHnB3Faf6 # 1
2G6%Lv4ym6%ezeH698TYnedloKRAhG%bB9*nz # 2
window.listen()
running = True
while running:
new_x = F^h!Wu9lyK2u&ulgpN%Jj$4*v$*65nLiPddQMim # 3
if LEFT > new_x > RIGHT:
ship.setx(new_x)
Lösung
Linie 1:
window.onkeyrelease(stop_moving, "Left")
Linie 2:window.onkeyrelease(stop_moving, "Right")
Linie 3:ship.xcor() + SHIP_STEP * ship_direction
Fehler auf Linie 25:
LEFT > new_x > RIGHT
ist ein unmöglicher Wahrheitstest.LEFT < new_x < RIGHT
wäre korrekt.
Gelernte Konzepte in Programmen verstehen
Schreiben Sie alle Ausgaben der print()-Befehle mit ”:” getrennt ins Antwortfeld. Ein Beispiel:
test = "X"
print("Anfang")
print(test)
print("Ende")
Die korrekte Antwort wäre Anfang:X:Ende
test = "Hallo"
print(test)
def aendern():
test = "Velo"
aendern()
print(test)
Lösung
Hallo:Hallo
test1 = 42
test2 = 12
def aendern():
global test1
test1 = 12
test2 = 35
print(test2)
aendern()
print(test1+test2)
Lösung
35:24
test = [2,5,7]
def aendern():
test.append(3)
test.append(1)
aendern()
for i in test:
print(i)
Lösung
2:5:7:1:3
print("Anfang")
for element in ["A","B","C"]:
print("X")
print("Ende")
Lösung
Anfang:X:X:X:Ende
A = "hallo"
B = "velo"
C = "test"
print("A")
for element in [A,"B","C"]:
print(element)
print("X")
Lösung
A:hallo:B:C:X
Programme schreiben (auf Exam.net, wo Sie Programme ausführen können (ohne Turtle))
Schreiben Sie ein Programm, das eine Liste mit 100 Zufallszahlen zwischen 1 und 50 erstellt. Dann druckt es alle Zahlen der Liste aus, die grösser als 5 aber kleiner als 15 sind.
Lösung
import random liste = [] for i in range(100): liste.append(random.randint(1,50)) for zahl in liste: if 5 < zahl < 15: print(zahl)
Nehmen Sie folgendes Programm als Ausgangslage. Erweitern Sie es so, dass alle 0.5 Sekunden die Funktion create_invader() ausgeführt wird.
Bitte beachten Sie: Auf Exam.net gibt es eine Zeitbegrenzung, wie lange Programme ausgeführt werden dürfen. Bitte belassen Sie alle Linien der Ausgangslage (insbesondere die Linien mit PROGRAMM_START) so, wie Sie sind.
import time
# Lassen Sie diese Konstante so, wie sie ist
CHEHABS_START = time.time()
# Rufen Sie diese Funktion alle 0.5 Sekunden auf
def create_invader():
print("Invader kommt!")
while True:
# Fügen Sie hier extra Code hinzu
# ...
# Lassen Sie diese Zeitbegrenzung so, wie sie ist, damit Exam.net das Programm akzeptiert
if time.time() - CHEHABS_START > 4.5:
break
Lösung
import time # Lassen Sie diese Konstante so, wie sie ist PROGRAMM_START = time.time() # Rufen Sie diese Funktion alle 0.5 Sekunden auf def create_invader(): print("Invader kommt!") start = time.time() while True: if time.time() - start > 0.5: create_invader() start = time.time() # Lassen Sie diese Zeitbegrenzung so, wie sie ist, damit Exam.net das Programm akzeptiert if time.time() - PROGRAMM_START > 4.5: break
Schreiben Sie ein Turtle-Programm, das 10 Invader-Turtle am oberen Bildrand auf einer zufälligen X-Koordinate platziert und sie gleichzeitig über den Bildschirm nach unten fahren lässt.
Lösung
import turtle import random window = turtle.Screen() window.tracer(0) # unnötiges Candy TOP = window.window_height() / 2 XMAX = window.window_width() / 2 invaderlist = [] for i in range(10): t = turtle.Turtle() t.penup() # unnötiges Candy t.setposition(random.randint(int(-XMAX), int(XMAX)), TOP) # ohne int() gäbe keinen Abzug t.right(90) t.pendown() # unnötiges Candy invaderlist.append(t) while True: for invader in invaderlist: invader.forward(1) window.update() # unnötiges Candy