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'

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"))

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

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!


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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.