我只是想知道是否有人对如何改进此代码有任何意见。我的目标是让它尽可能像pythonic一样,因为我正在努力学习python。这个程序工作正常,但是如果你看到任何你认为可以改进的东西(不是重大改变,只是基本的"我是python和#34的东西)这个程序请告诉我。
#!/usr/bin/python
from decimal import *
print "Welcome to the checkout counter! How many items are you purchasing today?"
numOfItems = int(raw_input())
dictionary = {}
for counter in range(numOfItems):
print "Please enter the name of product", counter + 1
currentProduct = raw_input()
print "And how much does", currentProduct, "cost?"
currentPrice = float(raw_input())
dictionary.update({currentProduct:currentPrice})
print "Your order was:"
subtotal = 0
for key, value in dictionary.iteritems():
subtotal = subtotal + value
stringValue = str(value)
print key, "$" + stringValue
tax = subtotal * .09
total = subtotal + tax
total = Decimal(str(total)).quantize(Decimal('0.01'), rounding = ROUND_DOWN)
stringSubtotal = str(subtotal)
stringTotal = str(total)
print "Your subtotal comes to", "$" + stringSubtotal + ".", " With 9% sales tax, your total is $" + stringTotal + "."
print "Please enter cash amount:"
cash = Decimal(raw_input()).quantize(Decimal('0.01'))
change = cash - total
stringChange = str(change)
print "I owe you back", "$" + stringChange
print "Thank you for shopping with us!"
答案 0 :(得分:3)
xrange
代替range
以获得更好的效果(尽管在这样的应用中这是一个非常小的挑剔)subtotal = sum(dictionary.itervalues())
快速添加所有商品价格,而无需使用循环。float
导致的不准确。'%.2f' % value
(旧格式)或'{:.2f}' .format(value)
(新格式)来打印带有两位小数的值。答案 1 :(得分:1)
更新字典,我会使用dict[key] = value
,而不是dict.update({key:value})
尝试使用格式规范,而不是连接字符串。这看起来更干净,可以节省您必须明确地将值转换为字符串。
"Qty: %d, Price: %f" % (qty, price)
"Qty: {0}, Price {1}".format(qty, price)
答案 2 :(得分:1)
1在dict中添加键值,您可以使用:
dictionary[currentProduct] = currentPrice
但是,在这种情况下你不需要dict,因为dict是无序的。您可以使用元组列表。
2为什么不使用Decimal(raw_input())
,那么你可以在不使用浮点数的情况下以十进制进行所有计算。
3要打印结果,您不需要先将值转换为str,您可以使用str.format()