为什么我得到TypeError:不能将序列乘以'float'类型的非int?

时间:2009-01-27 23:11:03

标签: python

我正在打字以获得销售额(按输入)乘以定义的销售税(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'

4 个答案:

答案 0 :(得分:63)

raw_input返回一个字符串(一系列字符)。在Python中,将字符串和浮点相乘不会产生任何定义的含义(而将字符串和整数相乘则有意义:"AB" * 3"ABABAB"; "L" * 3.14多少?请不要回复"LLL|")。您需要将字符串解析为数值。

您可能想尝试:

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

答案 1 :(得分:37)

也许这会在将来帮助其他人 - 我在尝试多个浮点数和浮点数列表时遇到了同样的错误。问题是这里的每个人都谈到浮点数与字符串相乘(但这里我的所有元素都是浮点数)所以问题实际上是在列表中使用*运算符。

例如:

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

答案 2 :(得分:3)

问题是salesAmount被设置为字符串。如果在python解释器中输入变量并按Enter键,您将看到输入的值被引号括起来。例如,如果输入56.95,您会看到:

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

您需要在将字符串乘以销售税之前将字符串转换为浮点数。我会留下那个让你弄明白的。祝你好运!

答案 3 :(得分:0)

您不能将字符串和浮点数相乘。您可以尝试如下操作。

totalAmount = salesAmount * float(salesTax)