1

このコードを改善する方法について誰かが意見を持っているかどうか疑問に思っていました. 私の目標は、Python を本当によく学ぼうとしているので、できるだけ Pythonic にすることです。このプログラムは正常に動作しますが、このプログラムを改善するためにできると思われることがあれば (大きな変更ではなく、基本的な "Im new to python" だけです)、このプログラムをお知らせください。

#!/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!"
4

3 に答える 3

3
  1. 製品辞書を単なる「辞書」ではなく、「製品」または同様の説明的な名前で呼びます。
  2. 一般に、範囲を反復処理する場合は、パフォーマンスを向上させるためxrangeに代わりに使用rangeします (ただし、このようなアプリでは非常にマイナーな問題です)。
  3. subtotal = sum(dictionary.itervalues())ループを使用せずに、すべてのアイテムの価格をすばやく合計するために使用できます。
  4. による不正確さを避けるために、間違いなく Decimal を使用する必要がありますfloat
  5. '%.2f' % value(古いスタイルの形式) または(新しいスタイルの形式) のような書式設定文字列を使用して、'{:.2f}' .format(value)小数点以下 2 桁で値を出力できます。
  6. 税額は定数である必要があるため、簡単に変更できます (1 つは計算用、もう 1 つは表示用の 2 つの場所で使用されます)。
于 2013-01-12T05:31:49.530 に答える
1

1 辞書にキー値を追加するには、次を使用できます。

dictionary[currentProduct] = currentPrice

ただし、この場合、dict は順序がないため、dict は必要ありません。タプルのリストを使用できます。

2 を使用しないのはなぜですか。そうDecimal(raw_input())すれば、浮動小数点を使用せずにすべての計算を 10 進数で行うことができます。

3 結果を出力するには、最初に値を str に変換する必要はありません。str.format()

于 2013-01-12T05:00:26.297 に答える
1
  • Updating a dictionary, I would use dict[key] = value, rather than dict.update({key:value})

  • Instead of concatenating strings, try using format specification. This looks cleaner and saves you having to convert values to strings explicitly.

    • C-style: "Qty: %d, Price: %f" % (qty, price)
    • string.format: "Qty: {0}, Price {1}".format(qty, price)
于 2013-01-12T04:54:43.487 に答える