Drucken Sie mehrere Argumente in Python

309

Dies ist nur ein Ausschnitt aus meinem Code:

print("Total score for %s is %s  ", name, score)

Aber ich möchte, dass es ausgedruckt wird:

"Die Gesamtpunktzahl für (Name) ist (Punktzahl)"

Dabei namehandelt es sich um eine Variable in einer Liste und scoreeine Ganzzahl. Dies ist Python 3.3, wenn das überhaupt hilft.

user1985351
quelle

Antworten:

559

Es gibt viele Möglichkeiten, dies zu tun. Um Ihren aktuellen Code mithilfe der %Formatierung zu korrigieren, müssen Sie ein Tupel übergeben:

  1. Ü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:

  1. Ü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:

  1. Verwenden Sie eine neue Zeichenfolgenformatierung:

    print("Total score for {} is {}".format(name, score))
  2. 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))
  3. Verwenden Sie eine neue Zeichenfolgenformatierung mit expliziten Namen:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. Zeichenfolgen verketten:

    print("Total score for " + str(name) + " is " + str(score))

Die klarsten zwei, meiner Meinung nach:

  1. Ü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
  2. Verwenden Sie die neue fZeichenfolgenformatierung in Python 3.6:

    print(f'Total score for {name} is {score}')
Mixer
quelle
7
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 concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("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}')
Vikas Gupta
quelle
3
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 code

print("Total score for {n} is {s}".format(n=name, s=score))

Oder:

print("Total score for" + name + " is " + score)

Oder:

`print("Total score for %s is %d" % (name, score))`
Gavriel Cohen
quelle
21

In Python 3.6 f-stringist viel sauberer.

In früherer Version:

print("Total score for %s is %s. " % (name, score))

In Python 3.6:

print(f'Total score for {name} is {score}.')

Wird besorgt.

Es ist effizienter und eleganter.

Abhishek
quelle
15

Ich persönlich mag die Verkettung von Zeichenfolgen:

print("Total score for " + name + " is " + score)

Es funktioniert sowohl mit Python 2.7 als auch mit 3.X.

HINWEIS: Wenn score ein int ist, sollten Sie es in str konvertieren :

print("Total score for " + name + " is " + str(score))
Paolo Rovelli
quelle
12

Probier's einfach:

print("Total score for", name, "is", score)
Sarora
quelle
11

Folgen Sie einfach diesem

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

ODER

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

Und vergessen Sie alle anderen, sonst kann das Gehirn nicht alle Formate abbilden.

Der Exorzist
quelle
6
print("Total score for %s is %s  " % (name, score))

%skann durch %doder ersetzt werden%f

user6014455
quelle
6

Verwendung f-string:

print(f'Total score for {name} is {score}')

Oder

Verwendung .format:

print("Total score for {} is {}".format(name, score))
iNet
quelle
5

Wenn scoreist eine Zahl, dann

print("Total score for %s is %d" % (name, score))

Wenn score eine Zeichenfolge ist, dann

print("Total score for %s is %s" % (name, score))

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

Supercolbat
quelle
3

Das ist was ich mache:

print("Total score for " + name + " is " + score)

Denken Sie daran, nach forund vor und nach ein Leerzeichen zu setzen is.

Peter Mortensen
quelle