Es gibt viele Möglichkeiten, dies zu tun. Um Ihren aktuellen Code mithilfe der %Formatierung zu korrigieren, müssen Sie ein Tupel übergeben:
Übergeben Sie es als Tupel:
print("Total score for %s is %s"%(name, score))
Ein Tupel mit einem einzelnen Element sieht aus wie ('this',).
Hier sind einige andere gängige Methoden:
Übergeben Sie es als Wörterbuch:
print("Total score for %(n)s is %(s)s"%{'n': name,'s': score})
Es gibt auch eine neue Zeichenfolgenformatierung, die möglicherweise etwas einfacher zu lesen ist:
Verwenden Sie eine neue Zeichenfolgenformatierung:
print("Total score for {} is {}".format(name, score))
Verwenden Sie eine neue Zeichenfolgenformatierung mit Zahlen (nützlich, um dieselbe mehrfach neu anzuordnen oder zu drucken):
print("Total score for {0} is {1}".format(name, score))
Verwenden Sie eine neue Zeichenfolgenformatierung mit expliziten Namen:
print("Total score for {n} is {s}".format(n=name, s=score))
Zeichenfolgen verketten:
print("Total score for "+ str(name)+" is "+ str(score))
Die klarsten zwei, meiner Meinung nach:
Übergeben Sie einfach die Werte als Parameter:
print("Total score for", name,"is", score)
Wenn Sie printim obigen Beispiel nicht möchten, dass Leerzeichen automatisch eingefügt werden , ändern Sie den sepParameter:
print("Total score for ", name," is ", score, sep='')
Wenn Sie Python 2 verwenden, können Sie die letzten beiden nicht verwenden, da dies printin Python 2 keine Funktion ist. Sie können dieses Verhalten jedoch importieren aus __future__:
from __future__ import print_function
Verwenden Sie die neue fZeichenfolgenformatierung in Python 3.6:
Natürlich gibt es immer die uralte missbilligte Methode:print("Total score for "+str(name)"+ is "+str(score))
Schlangen und Kaffee
5
@ SnakesandCoffee: Ich würde nur tunprint("Total score for", name, "is", score)
Blender
4
Meine +1. Heutzutage bevorzuge ich das .format()besser lesbare als das ältere % (tuple)- obwohl ich Tests gesehen habe, die zeigen, dass die %Interpolation schneller ist. Das print('xxx', a, 'yyy', b)ist auch gut für einfache Fälle. Ich empfehle auch, .format_map()mit Wörterbuch als Argument und mit 'ssss {key1} xxx {key2}'- schön zum Generieren von Texten aus Vorlagen zu lernen . Es gibt auch die älteren string_template % dictionary. Aber die Vorlagen sehen nicht so sauber aus : 'ssss %(key1)s xxx %(key2)s'.
Pepr
6
Zu Ihrer Information, ab Python 3.6 erhalten wir F-Strings , sodass Sie jetzt auch print(f"Total score for {name} is {score}")ohne explizite Funktionsaufrufe auskommen können (solange nameund scoreoffensichtlich im Geltungsbereich).
ShadowRanger
57
Es gibt viele Möglichkeiten, dies zu drucken.
Schauen wir uns ein anderes Beispiel an.
a =10
b =20
c = a + b#Normal string concatenationprint("sum of", a ,"and", b ,"is", c)#convert variable into strprint("sum of "+ str(a)+" and "+ str(b)+" is "+ str(c))# if you want to print in tuple wayprint("Sum of %s and %s is %s: "%(a,b,c))#New style string formattingprint("sum of {} and {} is {}".format(a,b,c))#in case you want to use repr()print("sum of "+ repr(a)+" and "+ repr(b)+" is "+ repr(c))
EDIT :#New f-string formatting from Python 3.6:print(f'Sum of {a} and {b} is {c}')
print("sum of {0} and {1} is {2}".format(a,b,c)) ist übertrieben, können Sie weglassen, es print("sum of {} and {} is {}".format(a,b,c)) sei denn, Sie möchten die Reihenfolge ändern.
Jean-François Fabre
39
Verwendung: .format():
print("Total score for {0} is {1}".format(name, score))
Oder:
//Recommended, more readable codeprint("Total score for {n} is {s}".format(n=name, s=score))
print("Total score for "+str(name)"+ is "+str(score))
print("Total score for", name, "is", score)
.format()
besser lesbare als das ältere% (tuple)
- obwohl ich Tests gesehen habe, die zeigen, dass die%
Interpolation schneller ist. Dasprint('xxx', a, 'yyy', b)
ist auch gut für einfache Fälle. Ich empfehle auch,.format_map()
mit Wörterbuch als Argument und mit'ssss {key1} xxx {key2}'
- schön zum Generieren von Texten aus Vorlagen zu lernen . Es gibt auch die älterenstring_template % dictionary
. Aber die Vorlagen sehen nicht so sauber aus :'ssss %(key1)s xxx %(key2)s'
.print(f"Total score for {name} is {score}")
ohne explizite Funktionsaufrufe auskommen können (solangename
undscore
offensichtlich im Geltungsbereich).Es gibt viele Möglichkeiten, dies zu drucken.
Schauen wir uns ein anderes Beispiel an.
quelle
print("sum of {0} and {1} is {2}".format(a,b,c))
ist übertrieben, können Sie weglassen, esprint("sum of {} and {} is {}".format(a,b,c))
sei denn, Sie möchten die Reihenfolge ändern.Verwendung:
.format()
:Oder:
Oder:
Oder:
quelle
In Python 3.6
f-string
ist viel sauberer.In früherer Version:
In Python 3.6:
Wird besorgt.
Es ist effizienter und eleganter.
quelle
Ich persönlich mag die Verkettung von Zeichenfolgen:
Es funktioniert sowohl mit Python 2.7 als auch mit 3.X.
HINWEIS: Wenn score ein int ist, sollten Sie es in str konvertieren :
quelle
Probier's einfach:
quelle
Folgen Sie einfach diesem
ODER
Und vergessen Sie alle anderen, sonst kann das Gehirn nicht alle Formate abbilden.
quelle
%s
kann durch%d
oder ersetzt werden%f
quelle
Verwendung
f-string
:Oder
Verwendung
.format
:quelle
Wenn
score
ist eine Zahl, dannWenn score eine Zeichenfolge ist, dann
Wenn Score eine Zahl ist, dann ist es
%d
, wenn es eine Zeichenfolge ist, dann ist es%s
, wenn Score ein Float ist, dann ist es%f
quelle
Das ist was ich mache:
Denken Sie daran, nach
for
und vor und nach ein Leerzeichen zu setzenis
.quelle