Seite 1 von 1

Listen, Datentypen

Verfasst: Montag 16. März 2015, 00:41
von VinzLaist
Hallo zusammen,
möchte zur übung des programieren einen Programm schrieben das den Notendurschnitt berechnet.

Code: Alles auswählen

z = 0
x = int(input("Wieviel Prüfunen wurden geschrieben?"))
wertigkeit = []#leere listen
noten = []

while z < x:
    z = z+1
    wertung = float(input("Prüfung hatte wieviel Credits?"))
    wertigkeit.append(wertung)
    print("Welche Note wurde geschrieben?")
    note = float(input())
    noten.append(note)
a = (wertigkeit[0]+note[0])#Mathe Formel, weiße das diese Falsch ist.
print(a)
Kann mir jemand sagen was ich falsch gemacht habe.
Bekomme ständig Fehlermeldungen das mit meinem Zahlenformat etwas nicht stimmt.
Habe auch schon eval, int, str und halt float ausprobiert.
Wenn ich selber Listen erstelle und mit diesen über den Index rechne Funktioniert es natürlich.

Danke im Vorraus

Mfg VinzLasit

Re: Listen, Datentypen

Verfasst: Montag 16. März 2015, 01:05
von BlackJack
@VinzLaist: Wenn man vor Eintritt in eine Schleife feststellen kann wie oft sie durchlaufen werden muss, dann nimmt man eine ``for``-Schleife und keine ``while``-Schleife.

Die beiden Werte die der Benutzer bei jedem Durchlauf eingibt gehören paarweise zusammen, deshalb sollten die auch nicht in getrennten Listen landen. Denn spätestens zur Berechnung des Durchschnitts muss man sie dann ja sowieso zusammenführen, also kann man sie auch gleich gemeinsam, zum Beispiel in einem Tupel, in *einer* Liste speichern.

Ansonsten wäre die komplette Fehlermeldung inklusive Traceback hilfreich.

Re: Listen, Datentypen

Verfasst: Montag 16. März 2015, 01:08
von Sr4l
Ergänzend zu BlackJack:
Zeile 11, note wird als Zahl definiert.
Zeile 13, auf note wird als Liste zugegriffen

Re: Listen, Datentypen

Verfasst: Montag 16. März 2015, 03:40
von VinzLaist
Danke für die antworten.

Hat mir sehr geholfen.

Da stellt sich mir allerdings die nächste Frage.

Gibt es eine effective möglichkeit aus Listen immer nur bestimmt Werte/Folgen abzurufen um mit disen zu rechnen?
An meinem Beispiel: Die Summe aller Zweiten Werte bilden.
Die Summe der Produkt von Aufeinaderfolgenden Paaren zu bilden.

Mein Lösungsansatz ist bis jetzt nur das ich die Listen-indexe über "for i in range(x,y,z)" aufrufen/herausnehme um dann mit diesen versuchen würde zu rechnen.
Oder ganz neue Listen bilden würde.

Klappt aber nicht wirklich,... oder? :lol:

Code: Alles auswählen

def notendurchschnitt():
    for i in range(0,len(L),2):#Mathe Formel:Notendurschnitt = Credits*Note+Credits1*Note1..../Summe aller Credits
        
x = int(input("Wieviel Prüfunen wurden geschrieben?"))
L = []
for i in range(1,x+1):
    wertung = float(input("Prüfung hatte wieviel Credits?"))
    note = float(input("Prüfung hatte welche Note?"))
    L.append(wertung)
    L.append(note)
notendurchschnitt()
Vielen dank vorab für antworten.
Mfg VinzLaist

Re: Listen, Datentypen

Verfasst: Montag 16. März 2015, 07:26
von Sirius3
@VinzLaist: Variablen betreten eine Funktion durch ihre Argumente und verlassen sie wieder über ihren Rückgabewert, wie kommt also L in die Funktion notendurchschnitt? Du solltest nicht für jede Note zwei Elemente in Deine Liste einfügen, sondern *ein* Element, nämlich ein Tuple mit zwei Werten (wertung, note).
Dann hast Du auch kein Problem mit dem Rechnen. L ist ein schlechter Name, weil er nichts aussagt.

Re: Listen, Datentypen

Verfasst: Montag 16. März 2015, 12:50
von VinzLaist
Sorry....ich weiß ich komme mit jedem kleine Programierschritt... und habe fragen.

ich versuche es aber wirklich.

so sieht das Program jetzt aus.

Code: Alles auswählen

def notendurschnitt():
    for i in range(0,x):
        print(Liste[i][1]+Liste[i][1])


x = int(input("Zahl:?"))
Liste = []
for i in range(0,x):
    note = float(input("Note:?"))
    credit = float(input("Credit:?"))
    a = note, credit
    Liste.append(a)
notendurschnitt()
Ich verstehe nicht ganz wie ich jetzt endlich viele Zahlen verrechnen kann.
Mfg VinzLaist

Re: Listen, Datentypen

Verfasst: Montag 16. März 2015, 13:16
von Sirius3
@VinzLaist: Variablen betreten eine Funktion durch ihre Argumente und verlassen sie wieder über ihren Rückgabewert, wie kommt also Liste und x in die Funktion notendurchschnitt? Liste ist ein schlechter Name, weil er nichts aussagt. Was ist denn in der Liste? Das solltest Du in einen Variablennamen verpacken.
Über eine Liste kann man direkt iterieren und braucht keinen Index. Zusätzlich kann man die Tuple gleich in der for-Schleife entpacken, etwa

Code: Alles auswählen

def berechne_notendurchschnitt(noten_mit_credits):
    for note, credit in noten_mit_credits:
        # rechne