TypeErrorが発生するのはなぜですか? 'float'型の非整数でシーケンスを乗算できません。


96

入力によって販売金額を取得し、定義された消費税(0.08)を乗算してから、合計金額(販売税と販売金額)を出力するように入力しています。

このエラーに遭遇しました。誰が何が間違っているのか知っているか、何か提案がありますか?

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'

回答:


84

raw_input文字列(文字のシーケンス)を返します。Pythonでは、文字列と浮動小数点数を乗算しても意味はありません(文字列と整数を乗算することには意味"AB" * 3"ABABAB"あります:is ;いくら"L" * 3.14ですか?返信しないでください"LLL|")。文字列を数値に解析する必要があります。

あなたが試してみたいかもしれません:

salesAmount = float(raw_input("Insert sale amount here\n"))

ここに投稿してGoogleを使用する前に、構文エラーを読むことを学びました。salesAmountのraw_inputをfloatではなくintに変換しようとしていました。intが機能せず、floatが機能する理由を知っていますか?私と一緒に裸にしてください、笑。
SD。

2
文字列と整数の乗算(*演算子を使用)は、Pythonでは十分に定義されています。文字列と浮動小数点数の乗算は定義されておらず、Pythonが不満を言っていました。
グレッグヒューギル

グレッグ、ありがとう!私はいくつかのより基本的なルールを取得する必要があると思います。
SD。

1
@Raj:私はそれが明確に定義されていると言いましたが、それは必ずしもあなたが期待するものではありません。「abc」* 3は「abcabcabc」なので、「5」* 3は「555」です。
グレッグヒューギル

52

多分これは将来的に他の人を助けるでしょう-私はフロートとフロートのリストを複数回しようとしたときに同じエラーがありました。問題は、ここの誰もがフロートと文字列の乗算について話していることです(ただし、ここではすべての要素がフロートでした)、問題は実際にリストで*演算子を使用していたことです。

例えば:

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

エラー:

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

解決策-リストをnumpy配列に変換します。

coff = np.asarray(coff) * C

私はこのアプローチが好きです!
レオ・レオポルド・ヘルツ준 영

1
インポートnumpyのにしたくない場合は、あなたが行うことができます:coff = [i * c for i in coff]
nicolas.fg

3

問題は、salesAmountが文字列に設定されていることです。Pythonインタープリターに変数を入力してEnterキーを押すと、入力した値が引用符で囲まれて表示されます。たとえば、56.95と入力すると、次のように表示されます。

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

文字列をフロートに変換してから、消費税を掛けます。それはあなたが理解するために残しておきます。幸運を!


1
本当にありがとう。助けてくれてありがとう!定義時に浮動小数点値を格納できることを知りませんでした。私はその場でそれをやろうとしていました(しかし、値を文字列からintに変更しようとしました-したがって、浮動小数点値が必要だったので、間違っていました)。
SD。

1

以下のように試す代わりに、文字列と浮動小数点を乗算することはできません。それは正常に動作します

totalAmount = salesAmount * float(salesTax)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.