Textuelle Programmierung
In Klasse 5/6 hast du Programme aus bunten Blöcken zusammengesetzt. Jetzt schreibst du dieselben Ideen als Text: Jede Zeile ist eine genaue Anweisung, und der Computer führt sie genau so aus, ohne zu raten, was du eigentlich meintest. Am Ende kannst du zum Beispiel einen Notenrechner oder einen Pfandautomaten programmieren und Fehler darin gezielt finden.
Variablen, Datentypen, Ein- und Ausgabe
Das Gleichheitszeichen heißt in Python nicht „ist gleich“, sondern „speichere rechts berechneten Wert in der Variablen links“. Deshalb ist punkte = punkte + 1 kein Widerspruch: Erst wird rechts gerechnet, dann wird gespeichert.
Wähle den Datentyp passend zur Aufgabe: Eine Anzahl Brötchen ist ein int, ein Preis wie 0,65 € ein float, ein Name ein str, die Antwort auf „Ist Pfand enthalten?“ ein bool.
Erkläre, was eine Variable ist, mit dem Vergleich einer beschrifteten Kiste, und beschreibe, was jede Zeile macht: puntos = 0, puntos = puntos + 1, print(puntos).…
Erkläre, was eine Variable ist, mit dem Vergleich einer beschrifteten Kiste, und beschreibe, was jede Zeile macht: puntos = 0, puntos = puntos + 1, print(puntos). Welcher Wert erscheint auf dem Bildschirm, und warum ist es kein Fehler, zu einer Variable etwas zu addieren, die „schon einen Wert hatte“?
Ordne diese Werte nach ihrem Datentyp (ganze Zahl, Dezimalzahl, Text oder Boolean) und gib für jeden Typ ein Anwendungsbeispiel in einem Programm für einen Laden an: 13,…
Ordne diese Werte nach ihrem Datentyp (ganze Zahl, Dezimalzahl, Text oder Boolean) und gib für jeden Typ ein Anwendungsbeispiel in einem Programm für einen Laden an: 13, 3,75, "Anna", True.
Erkläre, was die Befehle input() und print() in Python machen, welcher Unterschied zwischen ihnen besteht, und schreibe ein Programm aus zwei Zeilen, das nach deinem…
Erkläre, was die Befehle input() und print() in Python machen, welcher Unterschied zwischen ihnen besteht, und schreibe ein Programm aus zwei Zeilen, das nach deinem Namen fragt und dich damit begrüßt.
Sage die Ausgabe dieses Programms voraus, ohne es auszuführen, indem du den Wert der Variablen Zeile für Zeile verfolgst: a = 4, b = 3, a = a + b, b = a - b, print(a),…
Sage die Ausgabe dieses Programms voraus, ohne es auszuführen, indem du den Wert der Variablen Zeile für Zeile verfolgst: a = 4, b = 3, a = a + b, b = a - b, print(a), print(b). Schreibe die vollständige Ablaufverfolgung auf (welchen Wert jede Variable nach jeder Zeile hat) und nicht nur das Ergebnis.
Schreibe ein Programm aus drei Zeilen, das nach dem Namen und dem Alter einer Person fragt und mit beiden einen vollständigen Satz ausgibt (zum Beispiel „Mei ist 14…
Schreibe ein Programm aus drei Zeilen, das nach dem Namen und dem Alter einer Person fragt und mit beiden einen vollständigen Satz ausgibt (zum Beispiel „Mei ist 14 Jahre alt“). Erkläre, welchen Datentyp input() immer zurückgibt und wozu int() beim Abfragen des Alters dient.
Verzweigungen: `if`, `elif`, `else`
Dasselbe Programm lässt sich auf drei Arten darstellen. Alltagsbeispiel: Wenn es regnet, nehme ich den Regenschirm, sonst die Sonnenbrille.
Als Pseudocode (Zuweisung mit ←):
lies alter ein
wenn alter >= 12:
gib "Du darfst" aus
sonst:
gib "Noch nicht" aus
Im Struktogramm steht die Bedingung oben in einem Dreieck, darunter nebeneinander der Ja- und der Nein-Block. PAP, Struktogramm, Pseudocode und Python beschreiben denselben Algorithmus: Du solltest zwischen ihnen übersetzen können.
Die Abbildung zeigt einen Programmablaufplan und daneben das Programm, das dasselbe macht, aber mit verdeckter Bedingung. Schreibe die fehlende Bedingung in die if-Zeile…
Die Abbildung zeigt einen Programmablaufplan und daneben das Programm, das dasselbe macht, aber mit verdeckter Bedingung.
Schreibe die fehlende Bedingung in die if-Zeile (sie muss die Variable edad mit $12$ vergleichen), erkläre, was int(input("Alter: ")) macht, und warum die Zeilen innerhalb von if und else nach rechts eingerückt sind.
Erkläre, was eine Verzweigung ist, anhand eines Beispiels aus deinem Alltag (wenn es regnet, nehme ich den Regenschirm; sonst die Sonnenbrille), und schreibe sie in drei…
Erkläre, was eine Verzweigung ist, anhand eines Beispiels aus deinem Alltag (wenn es regnet, nehme ich den Regenschirm; sonst die Sonnenbrille), und schreibe sie in drei Zeilen Pseudocode: Bedingung, was passiert, wenn sie erfüllt ist, und was passiert, wenn nicht.
Schreibe ein Programm, das nach einer Zahl fragt und sagt, ob sie positiv, negativ oder null ist. Gib an, welche Struktur du verwendest (eine Verzweigung mit zwei oder…
Schreibe ein Programm, das nach einer Zahl fragt und sagt, ob sie positiv, negativ oder null ist. Gib an, welche Struktur du verwendest (eine Verzweigung mit zwei oder drei Zweigen), welche Vergleiche du machst, und teste es gedanklich mit den Werten $7$, $-3$ und $0$.
Ein Programm wandelt die Zahlennote in eine Bewertung um: weniger als $5$ ist „durchgefallen“, von $5$ bis $6{,}9$ ist „bestanden“ und ab $7$ ist „gut“. Schreibe es mit…
Ein Programm wandelt die Zahlennote in eine Bewertung um: weniger als $5$ ist „durchgefallen“, von $5$ bis $6{,}9$ ist „bestanden“ und ab $7$ ist „gut“. Schreibe es mit if, elif und else, erkläre, warum die Reihenfolge der Bedingungen wichtig ist und was passieren würde, wenn die erste Bedingung nota > 5 wäre.
Ein Laden wendet folgende Regelung an: Einkäufe unter $30\ \text{€}$ zahlen $4{,}50\ \text{€}$ Versand; Einkäufe zwischen $30\ \text{€}$ und $50\ \text{€}$ haben…
Ein Laden wendet folgende Regelung an: Einkäufe unter $30\ \text{€}$ zahlen $4{,}50\ \text{€}$ Versand; Einkäufe zwischen $30\ \text{€}$ und $50\ \text{€}$ haben kostenlosen Versand; Einkäufe über $50\ \text{€}$ haben kostenlosen Versand und $10\ \%$ Rabatt auf den Einkaufspreis.
Ein Schüler hat diesen Code programmiert:
precio = float(input("Einkaufssumme: "))
if precio > 50:
total = precio * 0.90
if precio >= 30:
total = precio
else:
total = precio + 4.50
print("Zu zahlen:", total)
- a) Führe die Ablaufverfolgung mit einem Einkauf von $60{,}00\ \text{€}$ durch. Welchen Endpreis gibt das Programm aus? Begründe, warum dieser Logikfehler beim Aneinanderreihen der Verzweigungen entsteht.
- b) Schreibe das Programm korrekt neu, indem du eine verschachtelte Verzweigung oder
elifverwendest, und baue eine Überprüfung ein, die warnt, wenn ein negativer Preis oder null eingegeben wird.
Schleifen: `for` und `while`
Beispiele: Zehn Runden um den Schulhof laufen ist eine Zählschleife. Rudern, bis man das Ufer erreicht hat, ist eine bedingte Schleife.
Schreibtischtest
Mit einer Tabelle verfolgst du die Werte der Variablen Zeile für Zeile.
Terminierung
Eine Handlungsvorschrift muss endlich beschrieben, eindeutig sein und terminieren, also nach endlich vielen Schritten aufhören. Bei while musst du immer prüfen: Verändert etwas im Schleifenkörper die Bedingung in Richtung „falsch“? Wenn nicht, entsteht eine Endlosschleife.
Erkläre den Unterschied zwischen einer for-Schleife (eine bekannte Anzahl von Malen wiederholen) und einer while-Schleife (wiederholen, solange eine Bedingung erfüllt…
Erkläre den Unterschied zwischen einer for-Schleife (eine bekannte Anzahl von Malen wiederholen) und einer while-Schleife (wiederholen, solange eine Bedingung erfüllt ist), und gib für jede ein Alltagsbeispiel an: zehn Runden um den Schulhof laufen im Vergleich dazu, so lange weiterzurudern, bis man das Ufer erreicht.
Schreibe eine for-Schleife, die das Einmaleins der $3$ (von $3 \cdot 1$ bis $3 \cdot 10$) ausgibt, gib an, wie oft der Schleifenkörper durchlaufen wird, und erkläre, was…
Schreibe eine for-Schleife, die das Einmaleins der $3$ (von $3 \cdot 1$ bis $3 \cdot 10$) ausgibt, gib an, wie oft der Schleifenkörper durchlaufen wird, und erkläre, was du ändern würdest, um das Einmaleins der $7$ auszugeben, ohne das ganze Programm neu zu schreiben.
Lies dieses Programm und erkläre, was es macht: n = 5, while n > 0:, print(n), n = n - 1, und am Ende print("Fertig!"). Schreibe die vollständige Ausgabe auf dem…
Lies dieses Programm und erkläre, was es macht: n = 5, while n > 0:, print(n), n = n - 1, und am Ende print("Fertig!"). Schreibe die vollständige Ausgabe auf dem Bildschirm auf und überlege, was passieren würde, wenn wir die Zeile n = n - 1 vergessen.
Ein Mitschüler schreibt ein Programm, das so lange nach Passwörtern fragt, bis das richtige eingegeben wird: clave = "", while clave != "sol":, und darin nur…
Ein Mitschüler schreibt ein Programm, das so lange nach Passwörtern fragt, bis das richtige eingegeben wird: clave = "", while clave != "sol":, und darin nur print("falsch"). Erkläre, warum das Programm nie endet, welche Zeile in der Schleife fehlt (das Passwort erneut abfragen) und die allgemeine Regel für while-Schleifen: Etwas muss die Bedingung ändern können.
Um die Qualifizierten eines Robotikwettbewerbs auszuwählen, werden fünf Punktzahlen eingelesen (von $0$ bis $10$). Ein Mitschüler hat diesen Code vorgeschlagen, um zu…
Um die Qualifizierten eines Robotikwettbewerbs auszuwählen, werden fünf Punktzahlen eingelesen (von $0$ bis $10$). Ein Mitschüler hat diesen Code vorgeschlagen, um zu zählen, wie viele gleich $5{,}0$ oder größer sind:
aprobados = 0
for i in range(5):
nota = float(input("Note eingeben: "))
if nota >= 5:
aprobados = aprobados + 1
else:
aprobados = 0
print("Bestanden insgesamt:", aprobados)
- a) Sage voraus, was auf dem Bildschirm ausgegeben wird, wenn der Benutzer nacheinander die Noten $6{,}0$, $8{,}0$, $4{,}0$, $9{,}0$ und $7{,}0$ eingibt. Begründe, warum das Endergebnis nicht das erwartete ist, indem du den Logikfehler in der Verzweigungsstruktur findest.
- b) Korrigiere den Code und ändere ihn so, dass fehlerhafte Noten (kleiner als $0$ oder größer als $10$) nicht mitgezählt werden, und gib eine eigene Warnmeldung aus, ohne den Zähler zu erhöhen oder zurückzusetzen.
Beim Spiel „Eine geheime Zahl von $1$ bis $100$ erraten“ behauptet dein Mitschüler: „Mit einer Schleife mit fester Versuchszahl kann man unmöglich garantieren, dass der…
Beim Spiel „Eine geheime Zahl von $1$ bis $100$ erraten“ behauptet dein Mitschüler: „Mit einer Schleife mit fester Versuchszahl kann man unmöglich garantieren, dass der Benutzer die Zahl errät; wir müssen immer eine Endlos-while-Schleife verwenden, bis er richtig rät.“
- a) Widerlege seine Behauptung: Begründe mathematisch, warum $7$ Versuche ausreichen, um mit voller Sicherheit jede Zahl zwischen $1$ und $100$ zu erraten, wenn eine binäre Suche als Strategie verwendet wird (immer nach der Mitte fragen).
- b) Entwirf das Spiel in Python oder Pseudocode mit einer Grenze von $7$ Leben. Das Programm muss sowohl anhalten, wenn der Benutzer vor dem Aufbrauchen der Versuche richtig rät, als auch, wenn er keine Leben mehr hat, und dabei unterschiedliche Abschlussmeldungen ausgeben. Begründe die logische Abbruchbedingung, die du gewählt hast.
Funktionen
Erkläre, was eine Funktion in einem Programm ist und welchen Vorteil es hat, def saludar(): einmal zu schreiben und sie dann oft aufrufen zu können, statt dieselben…
Erkläre, was eine Funktion in einem Programm ist und welchen Vorteil es hat, def saludar(): einmal zu schreiben und sie dann oft aufrufen zu können, statt dieselben Zeilen immer wieder zu kopieren.
Analysiere diese Funktion: def area_cuadrado(lado): und darin return lado * lado. Erkläre, was der Parameter ist, was der Rückgabewert ist und was jeder Aufruf auf dem…
Analysiere diese Funktion: def area_cuadrado(lado): und darin return lado * lado. Erkläre, was der Parameter ist, was der Rückgabewert ist und was jeder Aufruf auf dem Bildschirm ausgeben würde: print(area_cuadrado(5)), print(area_cuadrado(2.5)).
Ein Team entwickelt die Software für eine Registrierkasse mithilfe von Funktionen: a) Beim Ausführen dieses Codes erzeugt Python den Fehler: TypeError: unsupported…
Ein Team entwickelt die Software für eine Registrierkasse mithilfe von Funktionen:
def calcular_iva(precio):
total = precio * 1.21
pass # Der Programmierer hat vergessen, die letzte Zeile dieser Funktion hinzuzufügen
def aplicar_descuento(total, rebaja):
resultado = total - rebaja
return resultado
precio_base = 100.0
precio_con_iva = calcular_iva(precio_base)
precio_final = aplicar_descuento(precio_con_iva, 10.0)
print("Endpreis:", precio_final)
- a) Beim Ausführen dieses Codes erzeugt Python den Fehler:
TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'. Deute die Meldung und erkläre genau, wie der WertNonedurch die Variablen des Programms wandert. - b) Ein Mitschüler behauptet: „Zur Behebung genügt es, die Zeile der ersten Funktion in
print(precio * 1.21)zu ändern.“ Widerlege seine Behauptung, indem du den funktionalen Unterschied zwischen der Ausgabe eines Werts auf dem Bildschirm und der Rückgabe eines Werts an den Hauptaufruf erklärst. - c) Korrigiere den Code und füge eine Funktion
es_valido(precio)hinzu, die einen booleschen Wert (TrueoderFalse) zurückgibt, um zu prüfen, dass der Grundbetrag nicht negativ ist, bevor er verarbeitet wird.
Fehler finden und gezielt testen
Die Syntax einer Programmiersprache legt fest, wie ein Programm aufgeschrieben werden muss. Die Semantik legt fest, was es bedeutet und bewirkt. Ein Programm kann syntaktisch richtig und trotzdem inhaltlich falsch sein.
Gezielt testen
Teste ein Programm nicht nur mit einem Beispiel. Lege Testfälle mit erwartetem Ergebnis fest und vergleiche. Wähle auch Randfälle: bei „ab 5 bestanden“ also $4{,}9$, $5$ und $5{,}1$; bei Zahlen $-3$, $0$ und $7$. Bei Schleifen testest du auch den Fall, dass sie gar nicht oder genau einmal durchlaufen wird.
Dieses Programm enthält drei typische Fehler: nombre = input("Dein Name: ), if nombre = "Fatima", print("Hallo"). Finde jeden Fehler (ein nicht geschlossenes…
Dieses Programm enthält drei typische Fehler: nombre = input("Dein Name: ), if nombre = "Fatima", print("Hallo"). Finde jeden Fehler (ein nicht geschlossenes Anführungszeichen, ein =, das == sein müsste, und erkläre den Unterschied), schreibe das korrigierte Programm neu und gib an, welche Fehlermeldung der Computer jeweils ausgeben würde.
Betrachte das folgende Programm, dessen Ziel es ist, den Benutzer nach seinem Alter zu fragen und zu bestimmen, ob er alt genug zum Wählen ist (ab $18$ vollendeten…
Betrachte das folgende Programm, dessen Ziel es ist, den Benutzer nach seinem Alter zu fragen und zu bestimmen, ob er alt genug zum Wählen ist (ab $18$ vollendeten Lebensjahren):
if edad >= "18":
print("Du darfst wählen")
edad = input("Sag mir dein Alter: ")
else:
print("Du darfst nicht wählen")
- a) Wenn du versuchst, das Programm so auszuführen, in welcher Zeile bleibt der Python-Interpreter stehen, und warum kommt er nicht dazu, die
input-Zeile auszuführen? - b) Bestimme und klassifiziere alle vorhandenen Fehler und unterscheide dabei zwischen Syntaxfehlern (die das Übersetzen/Interpretieren verhindern) und Typ- oder Logikfehlern zur Laufzeit.
- c) Schreibe den korrigierten Code neu und baue eine Überprüfung ein, die verhindert, dass das Programm abstürzt, wenn der Benutzer sein Alter als Text eingibt (zum Beispiel „achtzehn“).
Um eine Kreuzung an einer Schule zu regeln, wird dieser Algorithmus in Pseudocode für eine Ampel mit Fußgängertaster vorgeschlagen: a) Erkenne einen schwerwiegenden…
Um eine Kreuzung an einer Schule zu regeln, wird dieser Algorithmus in Pseudocode für eine Ampel mit Fußgängertaster vorgeschlagen:
solange wahr:
gruen_autos = AN, rot_fussgaenger = AN
wenn taster_betaetigt == 1:
warten(5)
gruen_autos = AUS, gelb_autos = AN
warten(3)
gelb_autos = AUS, rot_autos = AN
rot_fussgaenger = AUS, gruen_fussgaenger = AN
warten(10)
gruen_fussgaenger = AUS, rot_fussgaenger = AN
- a) Erkenne einen schwerwiegenden Mangel der Verkehrssicherheit beim Übergang zurück: Was geschieht, wenn das Grün der Fußgänger ausgeschaltet wird, unmittelbar mit dem fließenden Verkehr im nächsten Durchlauf der Schleife?
- b) Entwirf eine Verbesserung des Algorithmus (in Pseudocode oder strukturiertem Text), die diesen Mangel behebt und zudem den Zusammenbruch des Verkehrs verhindert: Wenn Fußgänger wiederholt den Taster drücken, muss die Ampel zwischen den Zyklen immer mindestens $20$ Sekunden ununterbrochenes Grün für die Autos garantieren.
Entwirf den Algorithmus für ein Aufladeterminal mit Bezahlfunktion für die Schulmensa unter Beachtung folgender technischer Anforderungen: Die Karte beginnt mit einem…
Entwirf den Algorithmus für ein Aufladeterminal mit Bezahlfunktion für die Schulmensa unter Beachtung folgender technischer Anforderungen:
-
Die Karte beginnt mit einem Anfangsguthaben von $20{,}00\ \text{€}$, und jedes Menü kostet $4{,}50\ \text{€}$.
-
In einer Schleife fragt das Programm, wie viele Menüs am Tag verzehrt werden sollen.
-
Wenn das verfügbare Guthaben nicht ausreicht, um die gewünschte Anzahl zu bezahlen, wird der Vorgang abgebrochen, der fehlende Betrag angezeigt und das Guthaben nicht verändert.
-
Wenn genug Guthaben vorhanden ist, wird der Betrag abgebucht und geprüft, ob das Restguthaben unter $5{,}00\ \text{€}$ liegt; in diesem Fall wird die Meldung „Guthaben niedrig: Bitte bald aufladen“ angezeigt.
-
Das Programm muss automatisch enden, wenn das Restguthaben kleiner als der Preis eines einzelnen Menüs ($4{,}50\ \text{€}$) ist.
-
Begründe, welche Art von Schleife du verwendet hast, und erkläre, wie du verhinderst, dass ein Benutzer eine negative Anzahl von Menüs eingibt, um sein Guthaben künstlich zu erhöhen.
Ein Bewertungssystem, das Punkte von $0$ bis $10$ vergibt (höher ist besser), berechnet die Endnote mit folgenden Gewichtungen: Klassenarbeit ($20\ \%$), Werkstattpraxis…
Ein Bewertungssystem, das Punkte von $0$ bis $10$ vergibt (höher ist besser), berechnet die Endnote mit folgenden Gewichtungen: Klassenarbeit ($20\ \%$), Werkstattpraxis ($30\ \%$) und theoretische Prüfung ($50\ \%$). Die Lehrkraft hat die Formel so programmiert:
arbeit = float(input("Note Arbeit: "))
werkstatt = float(input("Note Werkstatt: "))
pruefung = float(input("Note Prüfung: "))
endnote = arbeit * 0.20 + werkstatt * 0.30 + pruefung * 0.50 / 3
if endnote > 5:
print("Bestanden")
else:
print("Nicht bestanden")
- a) Sage voraus, welches Ergebnis das Programm anzeigt, wenn der Schüler in allen drei Bereichen $10{,}0$ Punkte erhält. Erkläre anhand der Operatorenrangfolge, warum in
endnoteein falscher Zahlenwert gespeichert wird. - b) Begründe, warum dieser Fehler ein Logikfehler und kein Syntaxfehler ist, und erläutere, warum Logikfehler in Programmen der Technik oder Steuerungstechnik ein viel größeres Risiko darstellen als Syntaxfehler.
- c) Finde einen zweiten Logikfehler in der Bedingung des
ifim Hinblick auf das Bewertungskriterium dieses Systems (bestanden ab $5{,}0$ Punkten) und schreibe die endgültige, korrigierte Version des Programms.
Projektaufgabe zum Thema. Als angehender Datenanalyst sollst du ein Python-Programm erstellen, das die Temperaturbelastung in deiner Umgebung analysiert, und effiziente…
Projektaufgabe zum Thema. Als angehender Datenanalyst sollst du ein Python-Programm erstellen, das die Temperaturbelastung in deiner Umgebung analysiert, und effiziente Verhaltensweisen vorschlagen.
-
Datenerhebung: Rufe die offizielle Website des Deutschen Wetterdienstes auf und notiere die Höchsttemperatur in deiner Gemeinde an den letzten $5$ aufeinanderfolgenden Tagen.
-
Textuelle Programmierung: Schreibe in einem kostenlosen Online-Editor wie Trinket.io ein Python-Skript, das diese $5$ Werte in einer Liste speichert. Programmiere mit einer
for-Schleife undif-else-Verzweigungen die automatische Berechnung der Durchschnittstemperatur ($\bar{x}$) und die Bestimmung des heißesten Tages. -
Bericht und Vorschlag: Erstelle ein kurzes Dokument mit dem kommentierten Quellcode, einem Screenshot der Ausgabe in der Konsole und einem begründeten Vorschlag mit zwei Maßnahmen zur Raumklimatisierung für den Fall, dass der Durchschnitt über $21{,}5$ °C liegt.
Bewertet wird:
-
syntaktische Korrektheit des Codes (Umgang mit Listen, Schleifen und Verzweigungen).
-
Genauigkeit beim Übernehmen der realen Wetterdaten und Richtigkeit der Berechnung.
-
Verständlichkeit der Kommentare im Programm und technische Umsetzbarkeit des Energievorschlags.
Vorhin hast du gelesen, dass der Computer nichts errät: Wenn ein Programm falsch rechnet, hast du es ihm falsch beschrieben. Mit Schreibtischtest und Testfällen findest du genau diese Stellen.