Python - Problem mit Variablen

starbug

Erfahrenes Mitglied
Hallo allerseits,

ich bin noch ziemlich unerfahren in der Python-Programmierung und benötige daher eur Hilfe. Ich habe mir ein Buch besorgt in welchem man einige Aufgaben lösen soll.

Eine Aufgabe davon ist eine Interaktion mit einem Anwender.

Hier mal mein Code:

Code:
print("Kostenplan für eine Reise")
print("-------------------------")

bus = input("Kosten für den Reisebus: ")
hotel = input("Kosten für das Hotel: ")
event = input("Gesamtkosten für Events: ")
personen = input("Anzahl der Teilnehmer: ")

gesamt = personen*bus+hotel+event
einzeln = gesamt/personen


print("Die Gesamtkosten betragen: ",gesamt,"EUR.")
print("Die Kosten pro Person betragen: ",einzeln,"EUR.")

Die Eingabe erfolgt, jedoch die Verarbeitung nicht und ich bekomme folgende Fehlermwldung:


Code:
 line 9, in <module>
    gesamt = personen*bus+hotel+event
TypeError: can't multiply sequence by non-int of type 'str'

Wie ich das aber verstanden habe erkennt doch Python automatisch dass es sich um int-Werte handeln.

Was ist hier der Fehler?

Ich benutze übrigens Python 3.2
 
Hi.

Nein, Python erkennt nicht automatisch das es sich um int-Werte handelt. Python "weiß" welchen Typ eine Variable hat - und deine Variable ist vom Typ "str"; also ein String.

Wenn du damit rechnen willst, mußt du den Wert in einen arithmetischen Typ umwandeln. Z.B. in int:
Python:
personen = int(input("Anzahl der Teilnehmer: "))
Dabei bekommst du natürlich eine Ausnahme falls der Wert des Strings sich nicht in einen int konvertieren läßt.
 
Hi

danke hat alles funktioniert. Kann es sein dass man "int" erst ab Version 3 angeben muss? Habe ein Lehrbuch und dort steht es genau wie in meinem Code. Das Buch arbeitet mit Version 2.4.
 
Ich habe nochmal etwas recherchiert und die Ursache gefunden.

Die Änderung betrifft nicht die Evaluierung von Variablen sondern die input Funktion.

In Python 2.x gab es 2 Funktionen: input und raw_input. Die raw_input Funktion liest einfach einen String von der Standardeingabe und gibt diesen zurück.

Die input Funktion liest einen String mit raw_input und evaluiert diesen dann als Python Ausdruck, man kann also auch einen Ausdruck wie 3+5*7 eingeben. Der Rückgabetyp ist demnach ein int falls man einen Ausdruck eingibt, der zu einem int evaluiert wird, vom Typ "str" falls man einen String; eine Liste falls man eine Liste angibt usw. Die input Funktion ist also äquivalent zu:
Python:
eval(raw_input("..."))

Mit Python 3.x wurde die raw_input Funktion in input umbenannt. Sie gibt also immer einen String zurück.
 
Zurück