lehrkraefte:blc:informatik:glf20:programmieren:listen2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf20:programmieren:listen2 [2020/11/18 11:06]
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. Du kannst alles mögliche zu einer Liste hinzufügen. Insbesondere können die Elemente einer Liste wieder Listen sein. So kannst du "mehrdimensionale" Listen erstellen.+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> <code>
 liste = [[1,2],[3,4,5]] liste = [[1,2],[3,4,5]]
 </code> </code>
-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.
 <code> <code>
 print(liste[0][1]) print(liste[0][1])
Line 39: Line 39:
  
 <question title="Was wird nach dem Ausführen des Programms auf der Konsole stehen? <question title="Was wird nach dem Ausführen des Programms auf der Konsole stehen?
-&lt;pre&gt;schulklasse = ['Anna','Max','Mia','Gustav']&lt;br&gt;schulklasse2b = schulklasse2a&lt;br&gt;schulklasse2a[3] = 'Hans'&lt;br&gt;print(schulklasse2b)" type="radio">Anna Max Mia Gustav|Anna Max Mia Hans|Hans|Anna Max Mia Gustav Hans</question>+&lt;pre&gt;schulklasse2a = ['Anna','Max','Mia','Gustav']&lt;br&gt;schulklasse2b = schulklasse2a&lt;br&gt;schulklasse2a[3] = 'Hans'&lt;br&gt;print(schulklasse2b)" type="radio">Anna Max Mia Gustav|Anna Max Mia Hans|Hans|Anna Max Mia Gustav Hans</question>
  
  
 </quizlib> </quizlib>
  
-</WRAP+<hidden Erklärung
- +Variablen verweisen auf Objekte. Wenn nun eine Variable auf eine Andere zugewiesen wird, zeigen beide Variablen auf das gleiche Objekt. 
-<WRAP info> +Auf welches Objekt eine Variable verweist kann mit folgendem Befehl herausgefunden werden:
-In Python wird eine Liste wie folgt einer Variable zugeordnet:+
 <code> <code>
-schulklasse = ['Anna','Max','Mia','Gustav']+print(id(schulklasse2a)) 
 +print(id(schulklasse2b))
 </code> </code>
-Wenn nun ein Element aus der Liste auf der Konsole ausgegeben werden sollfunktioniert dies wie folgt:+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> <code>
-print(schulklasse[0])+schulklasse2b = schulklasse2a[:]
 </code> </code>
-</WRAP>+</hidden>
  
-<WRAP todo> 
-Nehmen Sie untenstehendes Programm und Ergänzen Sie, damit Mia auf der Konsole ausgegeben wird. 
-<code> 
-schulklasse = ['Anna','Max','Mia','Gustav'] 
-print(   ) 
-</code> 
-</WRAP> 
- 
-<WRAP info> 
-Es ist auch möglich einen gewissen Bereich einer Liste auszugeben, dies wird mithilfe des : gemacht. 
-<code> 
-print(schulklasse[0:2]) 
-</code> 
 </WRAP> </WRAP>
  
 <WRAP todo> <WRAP todo>
-Damit nicht jedes Element einzeln ausgegeben werden musskönnen wir hier auch Schleifen (Wiederholungen verwenden)+===Kopfrechen-Trainer=== 
-Kopieren, testen und verstehen Sie folgenden zwei Codeblöcke: +Erstellen Sie ein Programmwelches den Benutzer nach einfachen Rechnungen fragt. Verwendet werden soll die Addition und die Subtraktion
-<code> +Speichern Sie dabei die Fragen und Antworten in einer Liste. Wählen Sie eine Abbruchbedingung (Beispielsweise Eingabe von 'q'ausdanach soll ausgegeben werden wie viele Fragen richtig beantwortet wurden.
-schulklasse = ['Anna','Max','Mia','Gustav'+
-for student in schulklasse: +
-    print(student) +
-</code> +
-<code> +
-schulklasse = ['Anna','Max','Mia','Gustav'+
-counter = 0 +
-while counter < len(schulklasse): +
-    print(schulklasse[counter]) +
-    counter += 1 +
-</code>+
 </WRAP> </WRAP>
  
 <WRAP todo> <WRAP todo>
-Ergänzen Sie die Liste der Schülerinnen und Schüler um fünf NamenSchreiben Sie nun ein Programm, welches jeden zweiten Namen aus der Liste ausgibt. +Erweitern Sie Ihr Programm, indem die eingegebenen Fragen und Antworten ausgewertet werdenGeben Sie folgendes aus:
-</WRAP>+
  
-=== Funktionen === +*  Anzahl beantworteter Fragen
-<WRAP info> +
-Append: +
-Diese Methode dient dazu ein neues Objekt auf den Stapel zu legen. Je nach Sichtweise wird das Objekt "oben" oder "rechts" angefügt. +
-<code> +
-schulklasse = ['Anna','Max','Mia','Gustav'+
-schulklasse.append('Kevin'+
-</code> +
-<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. +
-<code> +
-print(schulklasse) +
-</code> +
-</hidden>+
  
-</WRAP>+*  Anzahl richtig beantworteter Fragen
  
-<WRAP info> +*  Prozentzahl der richtigen Antworten
-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. +
-<code> +
-schulklasse = ['Anna','Max','Mia','Gustav'+
-schulklasse.pop(2) +
-schulklasse.pop() +
-</code>+
 </WRAP> </WRAP>
  
-<WRAP info+<WRAP todo
-Remove: Ein Element kann auch direkt, ohne den Indexgelöscht werdenDies ist mithilfe der Methode remove möglich. +Erweitern Sie das Programm mit den Funktionen der Multiplikation und der Division. Überlegen Sie sich zuerstwelche Probleme dabei auftreten könnenVersuchen Sie die evaluierten Probleme bei der Implementierung zu umgehen.
-<code> +
-schulklasse = ['Anna','Max','Mia','Gustav'+
-schulklasse.remove('Max'+
-</code>+
 </WRAP> </WRAP>
  
- +<WRAP todo
-<WRAP info+Ergänzen Sie den Kopfrechen-Trainer mit einer Angabe der Startzeit, Endzeit und der Differenz
-Index: Mit der Methode index kann man die Position eines Elements innerhalb einer Liste ermitteln+Folgender Code hilft Ihnen dabei:
-Dabei kann zusätzlich zum Element auch noch ein Suchfenster mit Start und Ende mitgegeben werden, diese Angaben sind aber optional.+
 <code> <code>
-schulklasse = ['Anna','Max','Mia','Gustav'] +import time 
-schulklasse.index('Max'+from datetime import datetime
-</code> +
-<hidden Tipp> +
-Damit der Index von Max auf der Konsole ausgegeben wird, benötigt das Skript noch ein print-Statement. +
-<code> +
-print(schulklasse.index('Max')) +
-</code> +
-</hidden> +
-</WRAP>+
  
 +start = datetime.now()
 +time.sleep(2)
 +end = datetime.now()
  
- +print (end start)
-<WRAP todo> +
-  - Legen Sie eine Liste mit Namen "zahlen" an, die mindestens 10 Elemente enthält. +
-  - Geben Sie das siebte Element der Liste aus. +
-  - Geben Sie die Elemente zwei bis acht als Liste aus. +
-  - Geben Sie die Elemente zwei bis acht als einzelne Elemente aus +
-  - Fügen Sie die Zahlen 15, 23 und 95 zur Liste hinzu. +
-  - Löschen Sie das dritte Element aus der Liste. +
-  - Löschen Sie die Zahl 23 aus der Liste. +
-</WRAP> +
- +
-===== Geldautomat ===== +
-Ziel ist es ein Programm zu schreiben, das beliebige Beträge (erst mal nur in Noten) auszahlen kann. +
- +
-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.  +
-<WRAP todo> +
-Testen und Verstehen Sie folgenden Code: +
-<code python> +
-betrag = 480  # oder   betrag=inputInt("Bitte Betrag eingeben"+
- +
-if betrag>=200: +
-    anzahl = int(betrag/200) +
-    print("%d 200er Noten" % anzahl) +
-    betrag -= 200*anzahl +
-     +
-if betrag>=100: +
-    anzahl = int(betrag/100) +
-    print("%d 100er Noten" % anzahl) +
-    betrag -= 100*anzahl +
-     +
-if betrag>=50: +
-    anzahl = int(betrag/50) +
-    print("%d 50er Noten" % anzahl) +
-    betrag -= 50*anzahl +
-     +
-if betrag>=20: +
-    anzahl = int(betrag/20) +
-    print("%d 20er Noten" % anzahl) +
-    betrag -= 20*anzahl +
-     +
-if betrag>=10: +
-    anzahl = int(betrag/10) +
-    print("%d 10er Noten" % anzahl) +
-    betrag -= 10*anzahl +
-     +
-if betrag>0: +
-    print("Es ist noch ein Betrag von %d übrig" % betrag) +
-     +
-</code> +
-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   betrag=inputInt("Bitte Betrag eingeben"+
-noten = [200,100,50,20,10] +
-for note in noten: +
-  # +
-  # TODO: Nur noch ein einziges if... +
-  # +
-if betrag>0: +
-    print("Es ist noch ein Betrag von %d übrig" % betrag)+
 </code> </code>
-Erweitern Sie den Code nun so, dass auch Münzen ausbezahlt werden. 
 </WRAP> </WRAP>
  
-<WRAP todo> 
-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> 
- 
-<WRAP todo> 
-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. 
-</WRAP> 
  
 ===== Lösungsvorschläge ===== ===== Lösungsvorschläge =====
 <hidden Lösungvorschläge> <hidden Lösungvorschläge>
 <code> <code>
-#Ergänzen Sie die Liste der Schülerinnen und Schüler um fünf Namen.+#Versuchen Sie die Ausgabe so zu ändern, dass die Liste wie eine Matrix ausgegeben wird. In diesem Fall 5×3. 
 +from random import *
  
-schulklasse = ['Anna','Max','Mia','Gustav','Paula','Hugo','Petra','Fritz','Emily']+liste = [
 +for i in range(5): 
 +    temp = [] 
 +    for j in range(3): 
 +        temp.append(randint(1,100)) 
 +    liste.append(temp)
  
 +#print(liste)
  
-#Schreiben Sie nun ein Programm, welches jeden zweiten Namen aus der Liste ausgibt. +for i in range(5): 
-#Option 1: For-Schleife+    print(liste[i]) 
 +         
 +</code> 
 +<code> 
 +#Aufgabe 2a 
 +#Einfache Rechnungen mit + und - 
 +from random import *
  
-for student in range(0,len(schulklasse),2): +liste = []
-    print(schulklasse[student])+
  
 +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)
  
-#Option 2: While-Schleife+print(liste)
  
-counter = 0 
-while counter < len(schulklasse): 
-    print(schulklasse[counter]) 
-    counter += 2 
 </code> </code>
- 
 <code> <code>
-#Legen Sie eine Liste mit Namen “zahlen” an, die mindestens 10 Elemente enthält. +#Aufgabe 2b 
-zahlen = [3,7,1,67,98,34,76,56,90,32]+#Auswertung zu + und - (dieser Code läuft nicht ohne die Berechnung aus Aufgabe 2a)
  
 +anzahlRichtigerAntworten = 0
  
-#Geben Sie das siebte Element der Liste aus. +for element in liste: 
-print(zahlen[6]) +    if element[1== "+": 
- +        resultat = element[0] + element[2] 
- +        if resultat == element[3]: 
-#Geben Sie die Elemente zwei bis acht als Liste aus. +            anzahlRichtigerAntworten += 1 
-print(zahlen[1:7]+    else
- +        resultat = element[0] - element[2
- +        if resultat == element[3]: 
-#Geben Sie die Elemente zwei bis acht als einzelne Elemente aus +            anzahlRichtigerAntworten += 1 
-#Option 1+             
-counter = 1 +print(len(liste)) 
-while counter < 7+print(anzahlRichtigerAntworten
-    print(zahlen[counter]) +print(anzahlRichtigerAntworten/len(liste)*100)
-    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)+
 </code> </code>
 <code> <code>
-betrag = 480  oder   betrag=inputInt("Bitte Betrag eingeben") +#Aufgabe 2c 
-noten = [200,100,50,20,10] +#Einfache Rechnungen mit +-* & / 
-for note in noten+#Mögliche Probleme
-    if betrag>=note: +#-Benutzer kann bei Divisionen nur eine gewisse Anzahl stellen eingeben 
-        anzahl = int(betrag/note) +#-einfache Rechnungen bedarfen bei der Multiplikation an kleineren Zahlen 
-        print("%d %ser Noten" % (anzahl,note)) +from random import *
-        betrag -= note*anzahl +
-         +
-if betrag>0: +
-    print("Es ist noch ein Betrag von %d übrig" % betrag)+
  
-</code> 
-<code> 
-betrag = 488.35  # oder   betrag=inputInt("Bitte Betrag eingeben") 
-noten = [200,100,50,20,10,5,2,1,0.5,0.2,0.1,0.05] 
-for note in noten: 
-    if betrag>=note: 
-        anzahl = int(betrag/note) 
-        if(note > 5): 
-            print("%d %ser Noten" % (anzahl,note)) 
-        else: 
-            print("%d %ser Münzen" % (anzahl,note)) 
-        betrag -= note*anzahl 
-         
-if betrag>0: 
-    print("Es ist noch ein Betrag von %d übrig" % betrag) 
-</code> 
-<code> 
-print("Guten Tag") 
 liste = [] liste = []
  
 while True: while True:
-    eingabe = input("Bitte geben Sie eine positive Zahl ein") +    listeElement = [] 
-    if eingabe == 'q'+    funktion = randint(1,4) 
-        break+    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:     else:
-        liste.append(eingabe)+        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) 
 +    
  
-print("Folgende Liste wird nun sortiert:"+anzahlRichtigerAntworten = 0
-print(liste)+
  
 +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>
 <code> <code>
-#Ergänzung zur vorigen Aufgabe, Liste muss mitgegeben werden +#Aufgabe 2d 
-#Version 1 +#Einfache Rechnungen mit +-* & / inkl. Start und Endzeit
-for i in range(len(liste)): +
-    for j in range(i,len(liste)): +
-        if liste[i] > liste[j]: +
-            liste[i]liste[j] = liste[j]liste[i]+
  
-print(liste) +from random import * 
-</code>+import time 
 +from datetime import datetime
  
-<code> +liste = [] 
-#Ergänzung zur vorigen Aufgabe, Liste muss mitgegeben werden +start = datetime.now()
-#Version 2+
  
-sortedList = [] +while True: 
- +    listeElement = [] 
-while len(liste)>0+    funktion = randint(1,4) 
-    minValue liste[0] +    if funktion == 1: 
-    minIndex 0 +        zahl1 = randint(1,100) 
-    counter 0+        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)
          
-    for element in liste: +end datetime.now() 
-        if element < minValue: +anzahlRichtigerAntworten = 0
-            minValue element +
-            minIndex = counter +
-        counter += 1 +
-    sortedList.append(liste[minIndex]+
-    liste.pop(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
 +        if resultat == element[3]: 
 +            anzahlRichtigerAntworten += 1 
 +             
 +print(len(liste)) 
 +print(anzahlRichtigerAntworten) 
 +print(anzahlRichtigerAntworten/len(liste)*100) 
 +print(end - start)
 </code> </code>
  
  • lehrkraefte/blc/informatik/glf20/programmieren/listen2.1605693993.txt.gz
  • Last modified: 2020/11/18 11:06
  • by mirco.triner