Wieso funktioniert das nicht das 2. mal (Python)?

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Naja, in der Zeile

a = int(a + input('Note: ')

versuchst du einen String zu einem Int zu addieren.

Was soll das Programm denn genau machen?

Falls du die Noten aufsummieren willst, dann kannst du folgedes machen:

a = 0
x = int(input('Anzahl Noten: ')
while x>0:
  a += int(input('Note: '))
  print(a)
  x -=1

Woher ich das weiß:Studium / Ausbildung – Informatikstudent

Weil du a das erste mal "0" zuweist - einen string. Also nimmt es den Datentypen String an. Du versuchst also nun a, einem String einen Integer zuzuweisen.

Sieht mir aber generell nicht sonderlich sinnig aus - entweder addierst du die Noten auf oder du kettest sie aneinander - beides ist hier nicht sonderlich sinnig.

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer

Beim zweiten Durchlauf ist a ein int, deswegen wirft es einen Fehler. Um das zu beheben wandle a zu einem String um. Mach‘s wie folgt:

a = int(str(a) + input("Note:"))

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Beim ersten Mal ist a = "0" ein String. Wenn du dann beispielsweise die Note "2" eingibst, erhält man a + "2" = "0" + "2" = "02" und das wird dann mit dem int(...) in die ganze Zahl 2 umgwandelt, sodass du dann nach dem ersten Durchlauf die Zahl 2 in a gespeichert hast.

Und beim zweiten Durchlauf ist a dann nun eine Zahl. Wenn du dann beispielsweise "1" eingibst, wird versucht a + "1" = 2 + "1" auszuführen. Allerdings kann Python nun nicht die Zahl a = 2 mit dem String 1 von der Eingabe addieren.

Was sollte denn da auch rauskommen? Beispielsweise könnte man 2 in einen String umwandeln und würde dann "2" + "1" = "21" erhalten. Oder man könnte "1" in eine Zahl umwandeln und dann 2 + 1 = 3 rechnen. Da Python aber nicht weiß, was von den beiden Dingen du machen möchtest, oder ob du überhaupt eines von den beiden Dingen machen möchtest, macht Python bei sowas lieber keine automatische Typumwandlung, sondern liefert dir eine Fehlermeldung, in der auch das Problem beschrieben wird: Python kann Ganzzahlen nicht mit Strings addieren, da dies nicht definiert ist.


mihisu  20.08.2021, 14:00

Ich vermute mal, dass du die Zahlen addiert haben möchtest, nicht die entsprechenden Strings verketten möchtest. Dann solltest du dementsprechend den Input vor der Addition in eine Ganzzahl umwandeln (nicht erst nach der Addition, was zu spät wäre), und auch am Anfang gleich a = 0 statt a = "0" verwenden.

print("Herzlich willkommen")
a = 0
x = int(input("Anzahl Noten?"))

while x > 0:
    a = a + int(input("Note:"))
    print(a)
    x = x - 1
    print(x)
1

Scriptsprachen haben zwar den Vorteil, dass man den Datentyp der Variablen nicht definieren muss, sondern dies automatisch geschieht, allerdings sind auch diese Sprachen nicht in der Lage, ein Int und einen String mal eben so zusammenzuaddieren.

Daher entweder ohne String arbeiten oder ein Typecasting durchführen (was du im Grunde versucht hast) für die Rechenoperation. Ich habe wenig Erfahrung mit Python, aber probier einfach mal:

a = int(a) + int(input("Note:"))

Wenn das auch nicht funktioniert, dann könntest du noch:

a = str(int(int(a) + int(input("Note:"))))

ausprobieren. Das sollte den Inhalt von a als int mit der Eingabe addieren, die Summe als int zurückliefern und wieder als String in a abspeichern.

Besonders sinnvoll oder elegant ist das nicht, wesentlich sinnvoller ist der Code von whgoffline aber wenn man versteht wieso der eigene Code nicht funktioniert und wie man es beheben könnte, macht man es in Zukunft automatisch besser.

Aber wie gesagt, ich habe wenig Erfahrung mit Python, daher kann ich nicht garantieren, ob dieses rumwurschteln mit den Datentypen funktioniert. In der Theorie sollte es, aber die Praxis hat ja ganz eigene Gesetze.