lehrkraefte:blc:informatik:glf20:programmieren:listen2

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 5×3.

Was wird nach dem Ausführen des Programms auf der Konsole stehen?
schulklasse2a = ['Anna','Max','Mia','Gustav']
schulklasse2b = schulklasse2a
schulklasse2a[3] = 'Hans'
print(schulklasse2b)
You Scored % - /

Erklärung

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:

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ösungvorschläge

Lösungvorschlä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)
  • lehrkraefte/blc/informatik/glf20/programmieren/listen2.txt
  • Last modified: 2020/11/20 08:53
  • by mirco.triner