TypeError:不能将序列乘以'float'类型的非int

时间:2009-12-29 19:33:38

标签: python

我是Python的菜鸟,并没有任何运气来解决这个问题。我希望能够将税变量保留在代码中,以便在更改时可以轻松更新。我已经尝试了不同的方法,但只能跳过打印税行并打印相同的总数和小计值。如何将税变量乘以sum(items_count)?这是代码:

   items_count = []
tax = float(.06)
y = 0

count = raw_input('How many items do you have? ')

while count > 0:
    price = float(raw_input('Please enter the price of your item: '))
    items_count.append(price)
    count = int(count) - 1

print 'The subtotal of your items is: ' '$%.2f' % sum(items_count)
print 'The amount of sales tax is: ' '$%.2f' % sum(items_count) * tax
total = (sum(items_count) * tax) + sum(items_count)
print 'The total of your items is: ' '$%.2f' % total

4 个答案:

答案 0 :(得分:5)

如果您为错误提供反向跟踪,将会有所帮助。我运行了你的代码,得到了这个回溯:

Traceback (most recent call last):
  File "t.py", line 13, in <module>
    print 'The amount of sales tax is: ' '$%.2f' % sum(items_count) * tax
TypeError: can't multiply sequence by non-int of type 'float'

答案是这是一个优先问题。如果你刚刚这样做了:

sum(items_count) * tax

它可以工作,但因为你有一个带有字符串和%运算符的表达式,对sum()的调用与字符串相关联,实际上你有:

<string_value> * tax

解决方案是添加括号以强制您想要的优先级:

print 'The amount of sales tax is: ' '$%.2f' % (sum(items_count) * tax)

以下是Python中运算符优先级的文档。

http://docs.python.org/reference/expressions.html#summary

请注意,%具有与*相同的优先级,因此顺序由左到右规则控制。因此,字符串和对sum()的调用与%运算符相关联,您将留下<string_value> * tax

请注意,您也可以使用显式临时代替括号:

items_tax = sum(items_count) * tax
print 'The amount of sales tax is: ' '$%.2f' % items_tax

如果您不确定发生了什么,有时最好开始使用显式临时变量,并检查每个变量是否设置为您期望的值。

P.S。您实际上并不需要调用float()。值0.06已经是浮点值,因此只需说:

就足够了
tax = 0.06

我喜欢将最初的零值放在分数上,但您可以使用tax = 0.06tax = .06,这没关系。

我喜欢通过将raw_input()调用包裹在float()中来将价格转换为浮动价格。我建议您对count执行相同操作,将raw_input()调用包含在int()中以获取int值。然后后面的表达式可以简单地是

count -= 1

count最初设置为字符串然后重新绑定有点棘手。如果愚蠢或疯狂的用户输入无效计数,int()将引发异常;最好是异常发生,就在调用raw_input()时,而不是后来看似简单的表达式。

当然,您没有在代码示例中使用y

答案 1 :(得分:1)

您需要使用

'$%.2f' % (sum(items_count) * tax)

而不是

'$%.2f' % sum(items_count) * tax

您使用的那个将被评估为('$%.2f' % sum(items_count)) * tax,这是一个错误(将字符串乘以浮点数)。

答案 2 :(得分:1)

您需要围绕sum(items_count) * tax

的括号

我冒昧地清理你的代码:)

items_count = []
tax = float(.06)

count = int(raw_input('How many items do you have? '))

while count:
    price = float(raw_input('Please enter the price of your item: '))
    items_count.append(price)
    count -= 1

print 'The subtotal of your items is: $%.2f' % sum(items_count)
print 'The amount of sales tax is: $%.2f' % (sum(items_count) * tax)
print 'The total of your items is: $%.2f' % ((sum(items_count) * tax) +
        sum(items_count))

答案 3 :(得分:0)

只需添加parens:

print 'The amount of sales tax is: ' '$%.2f' % (sum(items_count) * tax)