2009-12-29 63 views
1

我是Python的noob,并且没有任何运气能够弄清楚这一点。我希望能够在代码中保留税收变量,以便在更改时轻松更新。我尝试了不同的方法,但只能让它跳过打印税线,并打印总计和小计的相同值。如何通过sum(items_count)乘以税收变量?下面是代码:TypeError:无法乘以类型为'float'的非整型序列

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 
+1

请你重新粘贴你的代码,以便它完全格式化为代码。目前无法阅读。谢谢! – Kimvais 2009-12-29 19:37:11

+0

感谢大家回答我的问题。 @steveha,很好的解释,是的,我第一次写了代码y变量实际上有意义。 @Kimvais,谢谢你为我清理代码。 – Timmay 2009-12-29 23:11:02

回答

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()调用包裹来将价格转换为浮动。我建议你应该为count做同样的事情,把raw_input()打个电话int()以得到int值。那么后来的表达可以简单地

count -= 1 

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

当然,您的代码示例中的任何内容都没有使用y

1

您需要使用

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

代替

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

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

0

只需加括号:

print 'The amount of sales tax is: ' '$%.2f' % (sum(items_count) * tax) 
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)) 
相关问题