Fehler im Code

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
qcaine
User
Beiträge: 18
Registriert: Samstag 25. Dezember 2021, 10:05

Hallo zusammen,
bin ein kompletter Anfänger was Python angeht, habe mir deshalb ein Buch gekauft das auch für Anfänger geeignet ist.
In dem Buch ist ein Programmierbeispiel das den Notendurchschnitt berechnet.
Bei mir funktioniert den Code aus welchem Grund auch immer nicht so richtig. Der Durchschnitt wird falsch berechnet.
Wo ist der Fehler ??
Bitte um Hilfe.

weiter = True
notenliste = []

while weiter:
print("Was möchten Sie tun?\n\n")
print("Wählen Sie aus:\n")
print("1.Eine Note hinzufügen\n")
print("2.Durchschnitt berechnen\n")
print("3.Alle Noten Ausgeben\n")
print("4.Programm beenden\n")
eingabe = int(input("Ihre Eingabe 1,2,3 oder 4:"))

if eingabe == 1:
note = int(input("Geben Sie die Note ein."))
notenliste.append(note)


elif eingabe == 2:
i = 0
summe = 0
for summe in notenliste:
summe += note


i += 1
if i != 0:
print("Der Durchschnitt ist:", summe/i)
else :
print("Es sind noch keine Noten vorhanden")

elif eingabe == 3 :
print("Noten",notenliste)

elif eingabe == 4 :
weiter = False


else:
print("Ungültige Eingabe")
print("Auf Wiedersehen")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du überschreibst die Summe immer wieder. Du darfst die Laufvariable nicht summe nennen. Sondern die sollte zb note heissen.
qcaine
User
Beiträge: 18
Registriert: Samstag 25. Dezember 2021, 10:05

Auch wenn ich die "summe" "note" nenne ..passiert der gleiche Fehler.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte den Code zeigen. Und in Code tags setzen, damit er nicht verstümmelt wird. Das ist der </>-Knopf im vollständigen Editor.
qcaine
User
Beiträge: 18
Registriert: Samstag 25. Dezember 2021, 10:05

Code: Alles auswählen

weiter = True
notenliste = []

while weiter:
    print("Was möchten Sie tun?\n\n")
    print("Wählen Sie aus:\n")
    print("1.Eine Note hinzufügen\n")
    print("2.Durchschnitt berechnen\n")
    print("3.Alle Noten Ausgeben\n")
    print("4.Programm beenden\n")
    eingabe = int(input("Ihre Eingabe 1,2,3 oder 4:"))

    if eingabe == 1:
       note = int(input("Geben Sie die Note ein."))
       notenliste.append(note)


    elif eingabe == 2:
       i = 0
       summe = 0
       for summe in notenliste:
          summe += note

          
          i += 1
       if i != 0:
            print("Der Durchschnitt ist:", summe/i)
       else :
            print("Es sind noch keine Noten vorhanden")

    elif eingabe == 3 :
            print("Noten",notenliste)

    elif eingabe == 4 :
        weiter = False


    else:
        print("Ungültige Eingabe")
print("Auf Wiedersehen")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da steht doch noch immer “for summe in notenliste”. Also macht es auch immer noch dasselbe.
qcaine
User
Beiträge: 18
Registriert: Samstag 25. Dezember 2021, 10:05

Hatte es in PyCharm geändert auf "note" hat aber nix gebracht , deswegen wieder zurück zum alten.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es ist aber immer noch falsch. Nur weil dann noch was anderes falsch ist, wird es nicht richtig. Also bitte den verbesserten Code posten, damit man beurteilen kann, was NOCH nicht geht.
qcaine
User
Beiträge: 18
Registriert: Samstag 25. Dezember 2021, 10:05

Code: Alles auswählen

weiter = True
notenliste = []

while weiter:
    print("Was möchten Sie tun?\n\n")
    print("Wählen Sie aus:\n")
    print("1.Eine Note hinzufügen\n")
    print("2.Durchschnitt berechnen\n")
    print("3.Alle Noten Ausgeben\n")
    print("4.Programm beenden\n")
    eingabe = int(input("Ihre Eingabe 1,2,3 oder 4:"))

    if eingabe == 1:
       note = int(input("Geben Sie die Note ein."))
       notenliste.append(note)


    elif eingabe == 2:
       i = 0
       note = 0
       for note in notenliste:
          note += note


          i += 1
       if i != 0:
            print("Der Durchschnitt ist:", note/i)
       else :
            print("Es sind noch keine Noten vorhanden")

    elif eingabe == 3 :
            print("Noten",notenliste)

    elif eingabe == 4 :
        weiter = False


    else:
        print("Ungültige Eingabe")
print("Auf Wiedersehen")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du sollst nicht stumpf überall summe durch Note ersetzen. Schau dir das nochmal genau an, was du da gerade rechnest.
Benutzeravatar
Dennis89
User
Beiträge: 1562
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

verstehst du deine 'for'-Schleife? Ausgeschrieben sieht das so aus:

Code: Alles auswählen

for note in notenliste:
    note = note + note
Was erwartest du denn für ein Ergebnis wenn du zum Beispiel eine 3 und eine 5 in deiner notenliste hast?
Welchen Wert hat 'note nachdem die Schleife durchgelaufen ist und wieso?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
andie39
User
Beiträge: 152
Registriert: Dienstag 7. Dezember 2021, 16:32

So würde es gehen:

Code: Alles auswählen


elif eingabe == 2:
       i = len(notenliste)
       note= sum(notenliste)
       if sum(notenliste) !=0:
           print("Der Durchschnitt ist:", note/i)
       else:
           print("Es sind noch keine Noten vorhanden")
         
 
gerpark
User
Beiträge: 8
Registriert: Montag 19. Januar 2015, 20:58

Hallo qcaine,
unabhängig von der Funktion sum() musst Du aber die for - Schleife verstehen. Du brauchst neben der notenliste dazu 2 Variablen: note und summe,
und musst dann prüfen ob die 'summe' richtig gebildet wird.
viel Spaß, gerpark
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@andie39: Am Anfang ein ``if notenliste:`` wäre sicherer. Denn es könnte ja eine Liste sein wo der Benutzer mal versucht hat ob man auch negative Werte eingeben kann. Die Eingaben -1 und 1 würden dann beispielsweise zu einem `ZeroDivisionError` führen.

Code: Alles auswählen

    elif eingabe == 2:
        if notenliste:
            print("Der Durchschnitt ist:", sum(notenliste) / len(notenliste))
        else:
            print("Es sind noch keine Noten vorhanden.")
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
kbr
User
Beiträge: 1508
Registriert: Mittwoch 15. Oktober 2008, 09:27

@__blackjack__: der Test auf notenliste ist sicher sinnvoll, falls ein Anwender gar nichts eingegeben hat. Aber mit den Eingaben von -1 und 1 kommt einfach 0 raus – garbage in, garbage out :)
Benutzeravatar
andie39
User
Beiträge: 152
Registriert: Dienstag 7. Dezember 2021, 16:32

Man sollte wohl einbauen, dass ein negativer Wert als Note nicht eingegeben werden kann.
Antworten