2014-09-03 6 views
6

ich etwas drucken möchte zu drucken, die wie folgt aussieht:Mit .format() eine variable Zeichenfolge und eine abgerundete Zahl

Hallo | 7,16

Dies ist der Code, den ich

bin mit
MyString = 'Hello' 
MyFloat = 7.157777777 
print "{} ¦ {0:.2f}".format(MyString, MyFloat) 

Aber ich bekomme die Fehlermeldung:

ValueError: cannot switch from automatic field numbering to manual field specification 

Wenn ich versuche:

MyString = 'Hello' 
MyFloat = 7.157777777 
print "{s} ¦ {0:.2f}".format(MyString, MyFloat) 

oder str statt s ich den Fehler:

KeyError: 's' 

Irgendwelche Ideen, wie ich eine variable Zeichenfolge mit einem abgerundeten Schwimmer drucken kann? Oder gibt es etwas wie %s, das ich verwenden sollte?

Antwort

16

Sie verwenden eine nummerierte Referenz im zweiten Feld; Die 0 zeigt an, dass Sie den ersten an str.format() übergebenen Parameter (z. B. MyString) verwenden möchten, nicht den Wert MyFloat, bei dem es sich um den Parameter 1 handelt.

Da Sie das .2f Format für ein Objekt Zeichenfolge nicht verwenden können, erhalten Sie Ihren Fehler.

entfernen die 0:

print "{} ¦ {:.2f}".format(MyString, MyFloat) 

als Felder ohne Namen oder die Indexnummer werden automatisch nummeriert, oder die richtige Nummer verwenden:

print "{} ¦ {1:.2f}".format(MyString, MyFloat) 

Wenn Sie letztere gewählt haben, ist es besser, Seien Sie explizit konsequent und verwenden Sie 0 für den ersten Platzhalter:

Die andere Option ist Nennung von Namen zu verwenden:

print "{s} ¦ {f:.2f}".format(s=MyString, f=MyFloat) 

Hinweis das Schlüsselwort Argumente str.format() dort.