can't multiply sequence by non-int of type 'float' Fehler?

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
informatikking
User
Beiträge: 4
Registriert: Dienstag 29. Januar 2013, 16:24

Hallo,
leider finde ich bei dem simplen Beispiel den Fehler nicht!
Bitte um Hilfe!!


ein = input("Geben Sie eine Zahl ein: ")

c = ein*8.

print ("die Zahl mal 8 ist:"), c


Programm startet, doch dann kommt es zu folgender Fehlermeldung:

Geben Sie eine Zahl ein: 4
Traceback (most recent call last):
File "C:\Users\Me\Desktop\u1 1.1.py", line 5, in <module>
c = ein*8.
TypeError: can't multiply sequence by non-int of type 'float'
>>>
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

input gibt in python 3.x einen string zurück, diesen kannst du nicht mit einem float Multiplizieren... wie die Fehlermeldung schon sagt :D
Sprich, wandle die eingabe in ein int bzw float um.

BTW ist es gewollt das die 8 ein float ist, also ein punkt dahinter ist?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

informatikking hat geschrieben:TypeError: can't multiply sequence by non-int of type 'float'
Du verwendest Python 3, oder?

input liefert dir dort immer einen String zurück. Mit einem String kannst du aber keine mathematischen Operationen durchführen.

Code: Alles auswählen

>>> '4' * 8
'44444444'
Jetzt hast du allerdings im Code nicht 8 stehen, sondern 8. wodurch die Zahl von einem Integer zu einem Fließkommawert wird.

Code: Alles auswählen

>>> '4' * 8.

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    '4' * 8.
TypeError: can't multiply sequence by non-int of type 'float'
Was du eigentlich möchtest ist aber, dass der eingegebene Wert als Zahl behandelt wird. Dazu musst du ihn von einem String in eine Fließkommazahl konvertieren. Die Eingabe würe demnach so aussehen:

Code: Alles auswählen

ein = float(input("Geben Sie eine Zahl ein: "))
Hier kann es natürlich bei ungültigen Eingaben zu einem ValueError kommen. Diesen kann man dann bei Bedarf mit einem Exception-Handler abfangen.
informatikking
User
Beiträge: 4
Registriert: Dienstag 29. Januar 2013, 16:24

Vielen Dank für die Schnelle Hilfe. Ja, ich benutze Python 3.3.
Leider funktioniert die Ausgabe noch nicht.

Leider wird das Ergebnis nicht angezeigt. Kommt auch keine Fehlermeldung.
Woran liegt das?
informatikking
User
Beiträge: 4
Registriert: Dienstag 29. Januar 2013, 16:24

Alles klar! Habe selber den Fehler gefunden.

Ausgabe wie folgt:

print ("die Zahl mal 8 ist:"), print (c)
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Statt

Code: Alles auswählen

print ("die Zahl mal 8 ist:"), c
muss es heißen:

Code: Alles auswählen

print("die Zahl mal 8 ist:", c)
Die erste Variante bedeutet: rufe die Funktion print mit dem Argument "die Zahl mal 8 ist:" auf, und bilde aus dem Egebnis dieses Aufrufs - d.i. None - zusammen mit c ein zwei-elementiges Tupel und dann verwirf dieses Tupel.
In specifications, Murphy's Law supersedes Ohm's.
Antworten