Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:blc:informatik:glf20:programmieren:listen2 [2020/11/18 11:28] mirco.triner |
lehrkraefte:blc:informatik:glf20:programmieren:listen2 [2020/11/20 08:53] (current) mirco.triner |
||
---|---|---|---|
Line 3: | Line 3: | ||
<WRAP info> | <WRAP info> | ||
===Mehrdimensionale Listen=== | ===Mehrdimensionale Listen=== | ||
- | Eine Liste ist ein sehr flexibler Datentyp. | + | Eine Liste ist ein sehr flexibler Datentyp. |
< | < | ||
liste = [[1, | liste = [[1, | ||
</ | </ | ||
- | Bei einer mehrdimensionalen Liste kann ähnlich wie einer Eindimensionalen ein spezifisches Element, oder Elementbereich ausgegeben werden. | + | Bei einer mehrdimensionalen Liste kann ähnlich wie bei einer Eindimensionalen ein spezifisches Element, oder Elementbereich ausgegeben werden. |
< | < | ||
print(liste[0][1]) | print(liste[0][1]) | ||
Line 39: | Line 39: | ||
< | < | ||
- | & | + | & |
Line 62: | Line 62: | ||
<WRAP todo> | <WRAP todo> | ||
===Kopfrechen-Trainer=== | ===Kopfrechen-Trainer=== | ||
- | Erstellen Sie ein Programm, welches den Benutzer nach einfachen Rechnungen fragt. | + | Erstellen Sie ein Programm, welches den Benutzer nach einfachen Rechnungen fragt. Verwendet werden soll die Addition und die Subtraktion. |
Speichern Sie dabei die Fragen und Antworten in einer Liste. Wählen Sie eine Abbruchbedingung (Beispielsweise Eingabe von ' | Speichern Sie dabei die Fragen und Antworten in einer Liste. Wählen Sie eine Abbruchbedingung (Beispielsweise Eingabe von ' | ||
+ | </ | ||
- | * Überlegen Sie sich, wo Probleme | + | <WRAP todo> |
+ | Erweitern Sie Ihr Programm, indem die eingegebenen Fragen und Antworten ausgewertet werden. Geben Sie folgendes aus: | ||
+ | |||
+ | * | ||
+ | |||
+ | * Anzahl richtig beantworteter Fragen | ||
+ | |||
+ | * Prozentzahl der richtigen Antworten | ||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | Erweitern Sie das Programm mit den Funktionen der Multiplikation und der Division. | ||
</ | </ | ||
Line 84: | Line 96: | ||
- | <WRAP info> | + | ===== Lösungsvorschläge ===== |
- | In Python wird eine Liste wie folgt einer Variable zugeordnet: | + | <hidden Lösungvorschläge> |
< | < | ||
- | schulklasse = [' | + | #Versuchen Sie die Ausgabe so zu ändern, dass die Liste wie eine Matrix |
- | </ | + | from random import * |
- | Wenn nun ein Element aus der Liste auf der Konsole | + | |
- | < | + | |
- | print(schulklasse[0]) | + | |
- | </ | + | |
- | </ | + | |
- | <WRAP todo> | + | liste = [] |
- | Nehmen Sie untenstehendes Programm und Ergänzen Sie, damit Mia auf der Konsole ausgegeben wird. | + | for i in range(5): |
- | < | + | |
- | schulklasse | + | for j in range(3): |
- | print( | + | |
- | </ | + | |
- | </ | + | |
- | <WRAP info> | + | #print(liste) |
- | Es ist auch möglich einen gewissen Bereich einer Liste auszugeben, dies wird mithilfe des : gemacht. | + | |
- | < | + | |
- | print(schulklasse[0: | + | |
- | </ | + | |
- | </ | + | |
- | <WRAP todo> | + | for i in range(5): |
- | Damit nicht jedes Element einzeln ausgegeben werden muss, können wir hier auch Schleifen | + | print(liste[i]) |
- | Kopieren, testen und verstehen Sie folgenden zwei Codeblöcke: | + | |
- | < | + | |
- | schulklasse = [' | + | |
- | for student in schulklasse: | + | |
- | print(student) | + | |
</ | </ | ||
< | < | ||
- | schulklasse = [' | + | #Aufgabe 2a |
- | counter = 0 | + | #Einfache Rechnungen mit + und - |
- | while counter < len(schulklasse): | + | from random import * |
- | print(schulklasse[counter]) | + | |
- | counter | + | |
- | </ | + | |
- | </ | + | |
- | <WRAP todo> | + | liste = [] |
- | Ergänzen Sie die Liste der Schülerinnen und Schüler um fünf Namen. Schreiben Sie nun ein Programm, welches jeden zweiten Namen aus der Liste ausgibt. | + | |
- | </ | + | |
- | === Funktionen | + | while True: |
- | <WRAP info> | + | listeElement |
- | Append: | + | funktion |
- | Diese Methode dient dazu ein neues Objekt auf den Stapel zu legen. Je nach Sichtweise wird das Objekt | + | if funktion |
- | < | + | zahl1 = randint(1, |
- | schulklasse | + | zahl2 = randint(1, |
- | schulklasse.append(' | + | |
- | </ | + | if eingabe == ' |
- | <hidden Tipp> | + | |
- | Wenn die Liste nach dem Hinzufügen auf der Konsole ausgegeben werden möchte, muss ab Schluss noch ein print-Statement eingefügt werden. | + | else: |
- | < | + | listeElement.append(zahl1) |
- | print(schulklasse) | + | listeElement.append("+") |
- | </ | + | listeElement.append(zahl2) |
- | </ | + | |
+ | | ||
+ | zahl1 = randint(1,100) | ||
+ | zahl2 = randint(1,100) | ||
+ | eingabe = input(" | ||
+ | if eingabe == 'q': | ||
+ | | ||
+ | else: | ||
+ | listeElement.append(zahl1) | ||
+ | | ||
+ | listeElement.append(zahl2) | ||
+ | | ||
+ | | ||
- | </ | + | print(liste) |
- | <WRAP info> | ||
- | Pop: | ||
- | Gibt das i-te Element aus der Liste zurück und entfernt es anschliessend. Wird der Funktion Pop kein Index mitgegeben, wird das letzte Element entfernt. | ||
- | < | ||
- | schulklasse = [' | ||
- | schulklasse.pop(2) | ||
- | schulklasse.pop() | ||
</ | </ | ||
- | </ | ||
- | |||
- | <WRAP info> | ||
- | Remove: Ein Element kann auch direkt, ohne den Index, gelöscht werden. Dies ist mithilfe der Methode remove möglich. | ||
< | < | ||
- | schulklasse = [' | + | #Aufgabe 2b |
- | schulklasse.remove(' | + | #Auswertung zu + und - (dieser Code läuft nicht ohne die Berechnung aus Aufgabe 2a) |
- | </ | + | |
- | </ | + | |
+ | anzahlRichtigerAntworten = 0 | ||
- | <WRAP info> | + | for element in liste: |
- | Index: Mit der Methode index kann man die Position eines Elements innerhalb einer Liste ermitteln. | + | if element[1] == " |
- | Dabei kann zusätzlich zum Element auch noch ein Suchfenster mit Start und Ende mitgegeben werden, diese Angaben sind aber optional. | + | |
- | < | + | if resultat == element[3]: |
- | schulklasse | + | |
- | schulklasse.index(' | + | else: |
+ | resultat = element[0] - element[2] | ||
+ | if resultat == element[3]: | ||
+ | anzahlRichtigerAntworten += 1 | ||
+ | |||
+ | print(len(liste)) | ||
+ | print(anzahlRichtigerAntworten) | ||
+ | print(anzahlRichtigerAntworten/ | ||
</ | </ | ||
- | <hidden Tipp> | ||
- | Damit der Index von Max auf der Konsole ausgegeben wird, benötigt das Skript noch ein print-Statement. | ||
< | < | ||
- | print(schulklasse.index(' | + | #Aufgabe 2c |
- | </code> | + | #Einfache Rechnungen mit +, -, * & / |
- | </ | + | #Mögliche Probleme: |
- | </ | + | #-Benutzer kann bei Divisionen nur eine gewisse Anzahl stellen eingeben |
+ | #-einfache Rechnungen bedarfen bei der Multiplikation an kleineren Zahlen | ||
+ | from random import * | ||
+ | liste = [] | ||
- | + | while True: | |
- | <WRAP todo> | + | |
- | - Legen Sie eine Liste mit Namen "zahlen" | + | |
- | - Geben Sie das siebte Element der Liste aus. | + | if funktion == 1: |
- | - Geben Sie die Elemente zwei bis acht als Liste aus. | + | zahl1 = randint(1, |
- | - Geben Sie die Elemente zwei bis acht als einzelne Elemente aus | + | zahl2 = randint(1, |
- | - Fügen Sie die Zahlen 15, 23 und 95 zur Liste hinzu. | + | eingabe = input("%d + %d"% (zahl1, zahl2)) |
- | - Löschen Sie das dritte Element aus der Liste. | + | if eingabe == ' |
- | - Löschen Sie die Zahl 23 aus der Liste. | + | break |
- | </ | + | else: |
- | + | | |
- | ===== Geldautomat ===== | + | |
- | Ziel ist es ein Programm zu schreiben, das beliebige Beträge | + | |
- | + | | |
- | Die grundlegende Idee ist, immer die grösstmögliche Note so oft wie möglich auszuzahlen und sich dann um den Rest zu kümmern. | + | elif funktion |
- | <WRAP todo> | + | zahl1 = randint(1, |
- | Testen und Verstehen Sie folgenden Code: | + | zahl2 = randint(1, |
- | <code python> | + | eingabe |
- | betrag | + | if eingabe |
- | + | | |
- | if betrag>=200: | + | else: |
- | | + | listeElement.append(zahl1) |
- | print(" | + | listeElement.append(" |
- | | + | |
+ | | ||
+ | elif funktion == 3: | ||
+ | zahl1 = randint(1, | ||
+ | | ||
+ | eingabe | ||
+ | if eingabe | ||
+ | break | ||
+ | else: | ||
+ | listeElement.append(zahl1) | ||
+ | listeElement.append(" | ||
+ | listeElement.append(zahl2) | ||
+ | listeElement.append(eingabe) | ||
+ | | ||
+ | zahl1 = randint(1,10) | ||
+ | zahl2 = randint(1, | ||
+ | eingabe = input(" | ||
+ | if eingabe | ||
+ | break | ||
+ | else: | ||
+ | listeElement.append(zahl1) | ||
+ | listeElement.append("/" | ||
+ | listeElement.append(zahl2) | ||
+ | listeElement.append(eingabe) | ||
+ | liste.append(listeElement) | ||
| | ||
- | if betrag> | ||
- | anzahl = int(betrag/ | ||
- | print(" | ||
- | betrag -= 100*anzahl | ||
- | | ||
- | if betrag> | ||
- | anzahl = int(betrag/ | ||
- | print(" | ||
- | betrag -= 50*anzahl | ||
- | | ||
- | if betrag> | ||
- | anzahl = int(betrag/ | ||
- | print(" | ||
- | betrag -= 20*anzahl | ||
- | | ||
- | if betrag> | ||
- | anzahl = int(betrag/ | ||
- | print(" | ||
- | betrag -= 10*anzahl | ||
- | | ||
- | if betrag> | ||
- | print(" | ||
- | | ||
- | </ | ||
- | Was ins Auge sticht sind die wiederholten Code-Abschnitte. Das sollte wenn möglich vermieden werden, aus verschiedenen Gründen: | ||
- | * Mühsam zu tippen. | ||
- | * Anfälligkeit für Tippfehler (nur ein Fall funktioniert nicht, was schwerer feststellbar ist) | ||
- | * Unübersichtlichkeit | ||
- | Darum soll der Code wie folgt neu geschrieben werden: | ||
- | <code python> | ||
- | betrag = 480 # oder | ||
- | noten = [200, | ||
- | for note in noten: | ||
- | # | ||
- | # TODO: Nur noch ein einziges if... | ||
- | # | ||
- | if betrag> | ||
- | print(" | ||
- | </ | ||
- | Erweitern Sie den Code nun so, dass auch Münzen ausbezahlt werden. | ||
- | </ | ||
- | <WRAP todo> | + | anzahlRichtigerAntworten = 0 |
- | Schreiben Sie ein Programm, welches den Benutzer nach Zahlen fragt und diese dann in einer Liste speichert. Wenn der Benutzer anstelle einer Zahl den Buchstaben q eintippt, soll die gesamte Liste ausgegeben werden. | + | |
- | </ | + | |
- | <WRAP todo> | + | for element in liste: |
- | Ergänzen Sie das Programm der vorherigen Aufgabe indem Sie die Liste aufsteigend sortieren. Überlegen Sie sich zuerst wie die Sortierung gemacht werden soll, indem Sie dem Ablauf auf ein Papier zeichnen. Starten Sie anschliessend mit dem Programmieren. | + | if element[1] == " |
- | </ | + | |
- | + | if resultat == element[3]: | |
- | ===== Lösungsvorschläge | + | |
- | <hidden Lösungvorschläge> | + | elif element[1] |
- | < | + | resultat |
- | #Ergänzen Sie die Liste der Schülerinnen und Schüler um fünf Namen. | + | if resultat |
- | + | anzahlRichtigerAntworten += 1 | |
- | schulklasse | + | elif element[1] |
- | + | | |
- | + | if resultat | |
- | #Schreiben Sie nun ein Programm, welches jeden zweiten Namen aus der Liste ausgibt. | + | |
- | # | + | else: |
- | + | | |
- | for student in range(0, | + | |
- | | + | if resultat == element[3]: |
- | + | | |
- | + | ||
- | #Option 2: While-Schleife | + | print(len(liste)) |
- | + | print(anzahlRichtigerAntworten) | |
- | counter | + | print(anzahlRichtigerAntworten/ |
- | while counter < len(schulklasse): | + | |
- | print(schulklasse[counter]) | + | |
- | | + | |
</ | </ | ||
- | |||
< | < | ||
- | #Legen Sie eine Liste mit Namen “zahlen” an, die mindestens 10 Elemente enthält. | + | #Aufgabe 2d |
- | zahlen = [3, | + | #Einfache Rechnungen |
+ | from random import * | ||
+ | import time | ||
+ | from datetime import datetime | ||
- | #Geben Sie das siebte Element der Liste aus. | ||
- | print(zahlen[6]) | ||
- | |||
- | |||
- | #Geben Sie die Elemente zwei bis acht als Liste aus. | ||
- | print(zahlen[1: | ||
- | |||
- | |||
- | #Geben Sie die Elemente zwei bis acht als einzelne Elemente aus | ||
- | #Option 1: | ||
- | counter = 1 | ||
- | while counter < 7: | ||
- | print(zahlen[counter]) | ||
- | counter += 1 | ||
- | |||
- | #Option 2: | ||
- | for zahl in range(1,7): | ||
- | print(zahlen[zahl]) | ||
- | |||
- | |||
- | #Fügen Sie die Zahlen 15, 23 und 95 zur Liste hinzu. | ||
- | zahlen.append(15) | ||
- | zahlen.append(23) | ||
- | zahlen.append(95) | ||
- | |||
- | |||
- | #Löschen Sie das dritte Element aus der Liste. | ||
- | zahlen.pop(2) | ||
- | |||
- | |||
- | #Löschen Sie die Zahl 23 aus der Liste. | ||
- | zahlen.remove(23) | ||
- | </ | ||
- | < | ||
- | betrag = 480 # oder | ||
- | noten = [200, | ||
- | for note in noten: | ||
- | if betrag> | ||
- | anzahl = int(betrag/ | ||
- | print(" | ||
- | betrag -= note*anzahl | ||
- | | ||
- | if betrag> | ||
- | print(" | ||
- | |||
- | </ | ||
- | < | ||
- | betrag = 488.35 | ||
- | noten = [200, | ||
- | for note in noten: | ||
- | if betrag> | ||
- | anzahl = int(betrag/ | ||
- | if(note > 5): | ||
- | print(" | ||
- | else: | ||
- | print(" | ||
- | betrag -= note*anzahl | ||
- | | ||
- | if betrag> | ||
- | print(" | ||
- | </ | ||
- | < | ||
- | print(" | ||
liste = [] | liste = [] | ||
+ | start = datetime.now() | ||
while True: | while True: | ||
- | eingabe = input(" | + | |
- | if eingabe == ' | + | funktion = randint(1, |
- | break | + | if funktion == 1: |
+ | zahl1 = randint(1, | ||
+ | zahl2 = randint(1, | ||
+ | | ||
+ | if eingabe == ' | ||
+ | break | ||
+ | else: | ||
+ | listeElement.append(zahl1) | ||
+ | listeElement.append(" | ||
+ | listeElement.append(zahl2) | ||
+ | listeElement.append(eingabe) | ||
+ | | ||
+ | zahl1 = randint(1, | ||
+ | zahl2 = randint(1, | ||
+ | eingabe = input(" | ||
+ | | ||
+ | break | ||
+ | | ||
+ | listeElement.append(zahl1) | ||
+ | listeElement.append(" | ||
+ | listeElement.append(zahl2) | ||
+ | listeElement.append(eingabe) | ||
+ | elif funktion == 3: | ||
+ | zahl1 = randint(1, | ||
+ | zahl2 = randint(1, | ||
+ | eingabe = input(" | ||
+ | if eingabe == ' | ||
+ | | ||
+ | else: | ||
+ | listeElement.append(zahl1) | ||
+ | listeElement.append(" | ||
+ | listeElement.append(zahl2) | ||
+ | listeElement.append(eingabe) | ||
else: | else: | ||
- | | + | |
- | + | zahl2 = randint(1,10) | |
- | print(" | + | |
- | print(liste) | + | if eingabe == ' |
- | + | | |
- | </code> | + | else: |
- | < | + | |
- | #Ergänzung zur vorigen Aufgabe, Liste muss mitgegeben werden | + | |
- | #Version 1 | + | |
- | for i in range(len(liste)): | + | |
- | for j in range(i,len(liste)): | + | liste.append(listeElement) |
- | if liste[i] > liste[j]: | + | |
- | | + | |
- | + | ||
- | print(liste) | + | |
- | </code> | + | |
- | + | ||
- | < | + | |
- | #Ergänzung zur vorigen Aufgabe, Liste muss mitgegeben werden | + | |
- | #Version 2 | + | |
- | + | ||
- | sortedList = [] | + | |
- | + | ||
- | while len(liste)>0: | + | |
- | | + | |
- | minIndex = 0 | + | |
- | counter = 0 | + | |
| | ||
- | for element in liste: | + | end = datetime.now() |
- | if element < minValue: | + | anzahlRichtigerAntworten = 0 |
- | minValue | + | |
- | minIndex = counter | + | |
- | counter += 1 | + | |
- | sortedList.append(liste[minIndex]) | + | |
- | | + | |
- | print(sortedList) | + | for element in liste: |
- | | + | if element[1] == " |
+ | resultat = element[0] + element[2] | ||
+ | if resultat == element[3]: | ||
+ | anzahlRichtigerAntworten += 1 | ||
+ | elif element[1] == " | ||
+ | resultat = element[0] - element[2] | ||
+ | if resultat == element[3]: | ||
+ | anzahlRichtigerAntworten += 1 | ||
+ | elif element[1] == " | ||
+ | resultat = element[0] * element[2] | ||
+ | if resultat == element[3]: | ||
+ | anzahlRichtigerAntworten += 1 | ||
+ | else: | ||
+ | resultat = element[0] / element[2] | ||
+ | resultat = round(resultat,2) | ||
+ | | ||
+ | anzahlRichtigerAntworten += 1 | ||
+ | |||
+ | print(len(liste)) | ||
+ | print(anzahlRichtigerAntworten) | ||
+ | print(anzahlRichtigerAntworten/ | ||
+ | print(end - start) | ||
</ | </ | ||