12

私は Python が初めてで、いくつかのサンプル スクリプトに取り組もうとしています。私は単純なレジタイプのことをやっていますが、出力を正当化または右揃えして、次のようにしたいと考えています。

subTotal = 24.95
tax = subTotal * 0.0725
total = subTotal + tax
paid = 30
change = paid-total
print("The subtotal was: $",subTotal)
print("The tax was: $",tax)
print("The total was: $",total)
print("The customer paid: $",paid)
print("Change due: $",change)

print ステートメントを大幅に減らすことでこれを単純化できることはわかっていますが、何をしようとしているのかを簡単に確認したかっただけです。

このようなものを出力したいのですが、ドルの金額がすべて整列されており、$ とドルの金額の間にスペースがないことに注意してください。この2つのことを行う方法がわかりません。

The subtotal was:   $24.95
The tax was:         $1.81
The total was:      $26.76
The customer paid:  $30.00
Change due:          $3.24

フォーマット メソッドの Python ドキュメントを読んでみましたが、特定のことを行うためにどのフォーマット指定子を使用できるかについての例は見当たりませんでした。助けてくれてありがとう。

4

5 に答える 5

10

金額は次のようにフォーマットできます。

"${:.2f}".format(amount)

たとえば幅 20 の場合、文字列にパディングを追加できます。

"{:20s}".format(mystring)

たとえば、幅 7 の文字列を右揃えにすることができます。

"{:>7s}".format(mystring)

これらすべてをまとめると、次のようになります。

s = "The subtotal was:"
a = 24.95
print("{:20s}{:>7s}".format(s, "${.2f}".format(a))
于 2013-04-23T01:26:41.350 に答える
4

テキストと数字の最大サイズがわかっている場合は、次のことができます

val_str = '${:.2f}'.format(val)
print('{:<18} {:>6}'.format(name+':', val_str))

これらが事前に知られていない場合は、さらに厄介になります。namesvaluesがリストであると仮定した場合のアプローチは次のとおりです。

value_format = '${:.2f}'.format
name_format = '{}:'.format
values_fmt = [value_format(val) for val in values]
names_fmt = [name_format(name) for name in names]
max_value_len = max(len(x) for x in values_fmt)
max_name_len = max(len(x) for x in names_fmt)
for name, val in zip(names_fmt, values_fmt):
    print('{:<{namelen}} {:>{vallen}}'.format(name, val,
        namelen=max_name_len, vallen=max_value_len))
于 2013-04-23T01:26:20.870 に答える