我是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
答案 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.06
或tax = .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)