2017-11-26 7 views
0

Ich soll eine Quittung im String-Format erstellen, die dann an das Hauptprogramm zurückgegeben wird, das es dann ausgibt.Mehrzeiliger String-Einzug mit .format()

Also, ich habe zwei Strings, die in die Preise mit \ n enthalten zwischen jedem:

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

Sie aus Listen mit Float-Werten erstellt wurden - Ich habe versucht, dies zu tun mit for-Schleifen, aber ich hat es nie zur Arbeit gebracht; alles, was ich bekam, waren unglaublich fehlerhafte Ausdrucke, nachdem der Quittungsstring an das Hauptprogramm weitergegeben wurde.

Ich versuche, sie mit .format() zu formatieren, so dass jeder auf einer eigenen Zeile gedruckt wird (aufgrund der \ n), nach rechts mit 16 Leerzeichen von "Raum" eingerückt. Beispiel dafür, was die Ausgabe sein soll:

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

Was habe ich versucht:

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

Was die Ausgabe wie folgt aussieht:

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

Die Vertiefung mit funktioniert nur einem einzigen Preis in der Zeichenfolge ("\ n0.00 \ n"), obwohl. Ich bin mir nicht ganz sicher, wie das gemacht werden soll/kann. Ich habe auf die offizielle Dokumentation (und PEP) verwiesen und etwas Googeln gemacht.

Antwort

1

Ich werde Ihre Liste anstelle Ihrer Zeichenfolge verwenden, da die Zeichenfolge kein praktisches Format hat.

2 Optionen für diese Aufgabe. Zuerst werden für Schleifen Schleifen verwendet, um die Zeichenfolge in Teilen zu erstellen. Die zweite verwendet len ​​(), um das vollständige Muster zu erstellen.

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) 

Hinweis: Die Verwendung '-' * 30 erspart Ihnen manuell - 30 Mal eingeben.