Listen, Datentypen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
VinzLaist
User
Beiträge: 13
Registriert: Donnerstag 1. Januar 2015, 22:39

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
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.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ergänzend zu BlackJack:
Zeile 11, note wird als Zahl definiert.
Zeile 13, auf note wird als Liste zugegriffen
VinzLaist
User
Beiträge: 13
Registriert: Donnerstag 1. Januar 2015, 22:39

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
Sirius3
User
Beiträge: 18314
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
VinzLaist
User
Beiträge: 13
Registriert: Donnerstag 1. Januar 2015, 22:39

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
Sirius3
User
Beiträge: 18314
Registriert: Sonntag 21. Oktober 2012, 17:20

@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
Antworten