Warum erhalte ich TypeError: Sequenz kann nicht mit Nicht-Int vom Typ 'float' multipliziert werden?

93

Ich tippe, um einen Verkaufsbetrag (durch Eingabe) mit einer definierten Umsatzsteuer (0,08) zu multiplizieren und dann den Gesamtbetrag (Umsatzsteuer mal Verkaufsbetrag) drucken zu lassen.

Ich stoße auf diesen Fehler. Weiß jemand was falsch sein könnte oder hat er irgendwelche Vorschläge?

salesAmount = raw_input (["Insert sale amount here \n"])
['Insert sale amount here \n']20.99
>>> salesTax = 0.08
>>> totalAmount = salesAmount * salesTax

Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    totalAmount = salesAmount * salesTax
TypeError: can't multiply sequence by non-int of type 'float'
SD.
quelle

Antworten:

82

raw_inputGibt eine Zeichenfolge (eine Folge von Zeichen) zurück. In Python hat das Multiplizieren eines Strings und eines Gleitkommas keine definierte Bedeutung (während das Multiplizieren eines Strings und einer Ganzzahl eine Bedeutung hat: "AB" * 3ist "ABABAB"; wie viel ist "L" * 3.14? Bitte antworten Sie nicht "LLL|"). Sie müssen die Zeichenfolge auf einen numerischen Wert analysieren.

Vielleicht möchten Sie versuchen:

salesAmount = float(raw_input("Insert sale amount here\n"))
Marc Gravell
quelle
Ich habe gelernt, den Syntaxfehler zu lesen, bevor ich hier gepostet und Google verwendet habe. Ich habe versucht, den raw_input für salesAmount in einen int anstatt in einen float zu konvertieren. Wissen Sie, warum int nicht funktioniert, sondern float? Bloß mit mir, lol.
SD.
1
Das Multiplizieren (mit dem Operator *) einer Zeichenfolge mit einer Ganzzahl ist in Python genau definiert. Das Multiplizieren eines Strings mit einem Float ist nicht definiert, und Python hat sich darüber beschwert.
Greg Hewgill
Danke Greg! Ich denke, ich muss ein paar Grundregeln aufstellen.
SD.
1
@ Raj: Ich sagte, es sei gut definiert, aber es ist nicht unbedingt das, was Sie erwarten. "abc" * 3 ist "abcabcabc", und daher ist "5" * 3 "555".
Greg Hewgill
51

Vielleicht hilft dies anderen in Zukunft - ich hatte den gleichen Fehler beim Versuch, einen Float und eine Liste von Floats zu multiplizieren. Die Sache ist, dass alle hier darüber sprachen, einen Float mit einem String zu multiplizieren (aber hier waren alle meine Elemente Floats die ganze Zeit), so dass das Problem tatsächlich darin bestand, den Operator * in einer Liste zu verwenden.

Beispielsweise:

import math
import numpy as np
alpha = 0.2 
beta=1-alpha
C = (-math.log(1-beta))/alpha

coff = [0.0,0.01,0.0,0.35,0.98,0.001,0.0]
coff *= C

Der Fehler:

    coff *= C 
TypeError: can't multiply sequence by non-int of type 'float'

Die Lösung - Konvertieren Sie die Liste in ein Numpy-Array:

coff = np.asarray(coff) * C
Glücklicher Zufall
quelle
Ich mag diesen Ansatz!
Léo Léopold Hertz 준영
1
Wenn Sie numpy nicht importieren möchten, können Sie coff = [i * c for i in coff]
Folgendes
3

Das Problem ist, dass salesAmount auf eine Zeichenfolge festgelegt wird. Wenn Sie die Variable in den Python-Interpreter eingeben und die Eingabetaste drücken, wird der eingegebene Wert in Anführungszeichen gesetzt. Wenn Sie beispielsweise 56,95 eingegeben haben, wird Folgendes angezeigt:

>>> sales_amount = raw_input("[Insert sale amount]: ")
[Insert sale amount]: 56.95
>>> sales_amount
'56.95'

Sie sollten den String in einen Float umwandeln, bevor Sie ihn mit der Umsatzsteuer multiplizieren. Ich überlasse es Ihnen, das herauszufinden. Viel Glück!

Eric Palakovich Carr
quelle
1
Vielen Dank Bruder. Ich schätze die Hilfe! Ich wusste nicht, ob ich beim Definieren einen Float-Wert speichern kann. Ich habe versucht, dies im laufenden Betrieb zu tun (aber ich habe versucht, den Wert von einem String in einen Int zu ändern - also habe ich mich geirrt, da ich einen Float-Wert brauchte).
SD.
1

Sie können string und float nicht multiplizieren. Stattdessen versuchen Sie es wie folgt. Es funktioniert einwandfrei

totalAmount = salesAmount * float(salesTax)
Maheshnagakumar
quelle