Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Ergänzung Listen ====== <WRAP info> ===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. <code> liste = [[1,2],[3,4,5]] </code> Bei einer mehrdimensionalen Liste kann ähnlich wie bei einer Eindimensionalen ein spezifisches Element, oder Elementbereich ausgegeben werden. <code> print(liste[0][1]) </code> </WRAP> <WRAP todo> Kopieren Sie den unterstehenden Code in TigerJython. Was macht der Code? Was wird ausgegeben? <code> 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) </code> 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|}} </WRAP> <WRAP todo> <quizlib id="quiz" rightanswers="[['a1']]" submit="Check Answers"> <question title="Was wird nach dem Ausführen des Programms auf der Konsole stehen? <pre>schulklasse2a = ['Anna','Max','Mia','Gustav']<br>schulklasse2b = schulklasse2a<br>schulklasse2a[3] = 'Hans'<br>print(schulklasse2b)" type="radio">Anna Max Mia Gustav|Anna Max Mia Hans|Hans|Anna Max Mia Gustav Hans</question> </quizlib> <hidden Erklärung> 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: <code> print(id(schulklasse2a)) print(id(schulklasse2b)) </code> 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: <code> schulklasse2b = schulklasse2a[:] </code> </hidden> </WRAP> <WRAP todo> ===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. </WRAP> <WRAP todo> 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 </WRAP> <WRAP todo> 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. </WRAP> <WRAP todo> Ergänzen Sie den Kopfrechen-Trainer mit einer Angabe der Startzeit, Endzeit und der Differenz. Folgender Code hilft Ihnen dabei: <code> import time from datetime import datetime start = datetime.now() time.sleep(2) end = datetime.now() print (end - start) </code> </WRAP> ===== Lösungsvorschläge ===== <hidden Lösungvorschläge> <code> #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]) </code> <code> #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) </code> <code> #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) </code> <code> #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) </code> <code> #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) </code> </hidden> lehrkraefte/blc/informatik/glf20/programmieren/listen2.txt Last modified: 2020/11/20 08:53by mirco.triner