2017-11-26 21 views
0

レシートを文字列形式で作成し、メインプログラムに渡してから印刷します。私は、forループでこれを実行しようとしましたが、私 - 彼らは、float値をリストから作成された.format()を使用した複数行の文字列インデント

food_prices = "\n22.40\n13.40\n" 
drink_prices = "\n11.50\n6.90\n" 

だから、私は1つそれぞれの間に\ nの価格を含む2つの文字列を持っています決してそれを働かせることはできません。領収書の文字列がメインプログラムに渡された後に私が得たのは信じられないほどバグの多いプリントでした。

それぞれが(\ nのために)独自の行に印刷されるように.format()でフォーマットしようとしていますが、右側に16個の "room"スペースがインデントされています。出力が可能になっているものの例:

receipt = (... 
     "Food:\n" 
     "{:>16}" 
     "Drinks:\n" 
     "{:>16}" 
     "------------------------------\n" 
     "{:>7.2f}" 
     "Total {:>7.2f}\n").format(food_prices, drink_prices, total) 

をような出力が見えるもの::インデントは一つだけで作業を行い

Food: 
12.4 
5.43 
7.65 
Drinks: 
    5.4 
8.76 
5.4 
------------------------------ 
Total  45.04 

私が試してみました何

123456789# For readability, ignore 
Food: 
      22.40 
      13.40 
Drinks: 
      11.50 
      6.90 
------------------------------ 
Total  54.20 

しかし、文字列( "\ n0.00 \ n")の価格。私はこれをどうすればいいのか正確にはわからない。私は公式の文書(とPEP)を参照し、いくつかのグーグルでやった。

答えて

1

文字列は便利な形式ではないので、私はあなたの文字列ではなくあなたのリストを使用します。

このタスクを実行する2つのオプション。まず、文字列を部分的に作成するループを使用します。 2番目のメソッドはlen()を使用して完全なパターンを作成します。

food_prices = [22.40, 13.40] 
drink_prices = [11.50, 6.90] 

total = sum(food_prices + drink_prices) 


# Option 1 (in parts) 

summary = 'Food:\n' 

for item in food_prices: 
    summary += '{:>16.2f}\n'.format(item) 

summary += 'Drinks:\n' 

for item in drink_prices: 
    summary += '{:>16.2f}\n'.format(item) 

summary += '-' * 30 + '\nTotal {:>10.2f}\n'.format(total) 

print(summary) 


# Option 2 (all at once) 

summary = ('Food:\n' + '{:>16.2f}\n' * len(food_prices) + 
    'Drinks:\n' + '{:>16.2f}\n' * len(drink_prices) + 
    '-' * 30 + '\nTotal {:>10.2f}\n' 
    ).format(*food_prices, *drink_prices, total) 

print(summary) 

注:'-' * 30を使用するには、手動で- 30回を入力して保存します。

関連する問題