====== Ergänzung Listen ====== ===Mehrdimensionale Listen=== Eine Liste ist ein sehr flexibler Datentyp. Es kann alles mögliche zu einer Liste hinzugefügt werden. Insbesondere können die Elemente einer Liste wieder Listen sein. So können "mehrdimensionale" Listen erstellt werden. liste = [[1,2],[3,4,5]] Bei einer mehrdimensionalen Liste kann ähnlich wie bei einer Eindimensionalen ein spezifisches Element, oder Elementbereich ausgegeben werden. print(liste[0][1]) Kopieren Sie den unterstehenden Code in TigerJython. Was macht der Code? Was wird ausgegeben? from random import * liste = [] for i in range(5): temp = [] for j in range(3): temp.append(randint(1,100)) liste.append(temp) print(liste) Versuchen Sie die Ausgabe so zu ändern, dass die Liste wie eine Matrix ausgegeben wird. In diesem Fall 5x3. {{:lehrkraefte:blc:informatik:glf20:programmieren:bildschirmfoto_2020-11-18_um_11.00.43.png?400|}} Anna Max Mia Gustav|Anna Max Mia Hans|Hans|Anna Max Mia Gustav Hans Variablen verweisen auf Objekte. Wenn nun eine Variable auf eine Andere zugewiesen wird, zeigen beide Variablen auf das gleiche Objekt. Auf welches Objekt eine Variable verweist kann mit folgendem Befehl herausgefunden werden: print(id(schulklasse2a)) print(id(schulklasse2b)) Beide Variablen (schulklasse2a und schulklasse2b) zeigen auf das gleiche Objekt. Jede Änderung an einer der beiden Listen hat eine Auswirkung auf die andere Liste. Dieses Problem kann umgangen werden, wenn die Listen kopiert werden. Dies kann mit folgendem Code bewerkstelligt werden: schulklasse2b = schulklasse2a[:] ===Kopfrechen-Trainer=== 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 'q') aus, danach soll ausgegeben werden wie viele Fragen richtig beantwortet wurden. Erweitern Sie Ihr Programm, indem die eingegebenen Fragen und Antworten ausgewertet werden. Geben Sie folgendes aus: * Anzahl beantworteter Fragen * Anzahl richtig beantworteter Fragen * Prozentzahl der richtigen Antworten Erweitern Sie das Programm mit den Funktionen der Multiplikation und der Division. Überlegen Sie sich zuerst, welche Probleme dabei auftreten können. Versuchen Sie die evaluierten Probleme bei der Implementierung zu umgehen. Ergänzen Sie den Kopfrechen-Trainer mit einer Angabe der Startzeit, Endzeit und der Differenz. Folgender Code hilft Ihnen dabei: import time from datetime import datetime start = datetime.now() time.sleep(2) end = datetime.now() print (end - start) ===== Lösungsvorschläge ===== #Versuchen Sie die Ausgabe so zu ändern, dass die Liste wie eine Matrix ausgegeben wird. In diesem Fall 5×3. from random import * liste = [] for i in range(5): temp = [] for j in range(3): temp.append(randint(1,100)) liste.append(temp) #print(liste) for i in range(5): print(liste[i]) #Aufgabe 2a #Einfache Rechnungen mit + und - from random import * liste = [] while True: listeElement = [] funktion = randint(1,2) if funktion == 1: zahl1 = randint(1,100) zahl2 = randint(1,100) eingabe = input("%d + %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("+") listeElement.append(zahl2) listeElement.append(eingabe) else: zahl1 = randint(1,100) zahl2 = randint(1,100) eingabe = input("%d - %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("-") listeElement.append(zahl2) listeElement.append(eingabe) liste.append(listeElement) print(liste) #Aufgabe 2b #Auswertung zu + und - (dieser Code läuft nicht ohne die Berechnung aus Aufgabe 2a) anzahlRichtigerAntworten = 0 for element in liste: if element[1] == "+": resultat = element[0] + element[2] if resultat == element[3]: anzahlRichtigerAntworten += 1 else: resultat = element[0] - element[2] if resultat == element[3]: anzahlRichtigerAntworten += 1 print(len(liste)) print(anzahlRichtigerAntworten) print(anzahlRichtigerAntworten/len(liste)*100) #Aufgabe 2c #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: listeElement = [] funktion = randint(1,4) if funktion == 1: zahl1 = randint(1,100) zahl2 = randint(1,100) eingabe = input("%d + %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("+") listeElement.append(zahl2) listeElement.append(eingabe) elif funktion == 2: zahl1 = randint(1,100) zahl2 = randint(1,100) eingabe = input("%d - %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("-") listeElement.append(zahl2) listeElement.append(eingabe) elif funktion == 3: zahl1 = randint(1,10) zahl2 = randint(1,10) eingabe = input("%d * %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("*") listeElement.append(zahl2) listeElement.append(eingabe) else: zahl1 = randint(1,10) zahl2 = randint(1,10) eingabe = input("%d / %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("/") listeElement.append(zahl2) listeElement.append(eingabe) liste.append(listeElement) anzahlRichtigerAntworten = 0 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) if resultat == element[3]: anzahlRichtigerAntworten += 1 print(len(liste)) print(anzahlRichtigerAntworten) print(anzahlRichtigerAntworten/len(liste)*100) #Aufgabe 2d #Einfache Rechnungen mit +, -, * & / inkl. Start und Endzeit from random import * import time from datetime import datetime liste = [] start = datetime.now() while True: listeElement = [] funktion = randint(1,4) if funktion == 1: zahl1 = randint(1,100) zahl2 = randint(1,100) eingabe = input("%d + %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("+") listeElement.append(zahl2) listeElement.append(eingabe) elif funktion == 2: zahl1 = randint(1,100) zahl2 = randint(1,100) eingabe = input("%d - %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("-") listeElement.append(zahl2) listeElement.append(eingabe) elif funktion == 3: zahl1 = randint(1,10) zahl2 = randint(1,10) eingabe = input("%d * %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl1) listeElement.append("*") listeElement.append(zahl2) listeElement.append(eingabe) else: zahl1 = randint(1,10) zahl2 = randint(1,10) eingabe = input("%d / %d"% (zahl1, zahl2)) if eingabe == 'q': break else: listeElement.append(zahl2) listeElement.append("/") listeElement.append(zahl1) listeElement.append(eingabe) liste.append(listeElement) end = datetime.now() anzahlRichtigerAntworten = 0 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) if resultat == element[3]: anzahlRichtigerAntworten += 1 print(len(liste)) print(anzahlRichtigerAntworten) print(anzahlRichtigerAntworten/len(liste)*100) print(end - start)