380 Stimmen

Wie kann ich mehrere Dinge (festen Text und/oder variable Werte) auf derselben Zeile gleichzeitig ausdrucken?

Ich habe etwas Code wie:

score = 100
name = 'Alice'
print('Total score for %s is %s', name, score)

Ich möchte, dass es Gesamtscore für Alice beträgt 100 ausgibt, aber stattdessen erhalte ich Gesamtscore für %s beträgt %s Alice 100. Wie kann ich alles in der richtigen Reihenfolge mit der richtigen Formatierung ausgeben?


Siehe auch: <a href="https://stackoverflow.com/questions/5598181">Wie kann ich mehrere Dinge in der gleichen Zeile drucken, nacheinander?</a> ; <a href="https://stackoverflow.com/questions/2960772/">Wie füge ich den Wert einer Variable in einen String ein (interpoliere ihn in den String)?</a>

675voto

Blender Punkte 273072

Es gibt viele Möglichkeiten, dies zu tun. Um Ihren aktuellen Code mit %-Formatting zu beheben, müssen Sie ein Tupel übergeben:

  1. Geben Sie es als Tupel weiter:

    print("Gesamtpunktzahl für %s beträgt %s" % (name, score))

Ein Tupel mit einem einzigen Element sieht so aus ('dies',).

Hier sind einige andere gängige Möglichkeiten, um dies zu tun:

  1. Geben Sie es als Wörterbuch weiter:

    print("Gesamtpunktzahl für %(n)s beträgt %(s)s" % {'n': name, 's': score})

Es gibt auch neues String-Formatting, das möglicherweise etwas einfacher zu lesen ist:

  1. Verwenden Sie neues String-Formatting:

    print("Gesamtpunktzahl für {} beträgt {}".format(name, score))
  2. Verwenden Sie neues String-Formatting mit Zahlen (nützlich zum Neuordnen oder mehrmaligen Drucken des gleichen):

    print("Gesamtpunktzahl für {0} beträgt {1}".format(name, score))
  3. Verwenden Sie neues String-Formatting mit expliziten Namen:

    print("Gesamtpunktzahl für {n} beträgt {s}".format(n=name, s=score))
  4. Verkettung von Strings:

    print("Gesamtpunktzahl für " + str(name) + " beträgt " + str(score))

Die beiden klarsten, meiner Meinung nach:

  1. Geben Sie die Werte einfach als Parameter weiter:

    print("Gesamtpunktzahl für", name, "beträgt", score)

    Wenn Sie keine automatische Einfügung von Leerzeichen durch print im obigen Beispiel möchten, ändern Sie den sep-Parameter:

    print("Gesamtpunktzahl für ", name, " beträgt ", score, sep='')

    Wenn Sie Python 2 verwenden, können Sie die letzten beiden nicht verwenden, da print in Python 2 keine Funktion ist. Sie können dieses Verhalten jedoch aus __future__ importieren:

    from __future__ import print_function
  2. Verwenden Sie das neue f-String-Formatting in Python 3.6:

    print(f'Gesamtpunktzahl für {name} beträgt {score}')

64voto

Vikas Gupta Punkte 10149

Es gibt viele Möglichkeiten, das zu drucken.

Lassen Sie uns mit einem anderen Beispiel ansehen.

a = 10
b = 20
c = a + b

# Normale Zeichenkettenverkettung
print("Summe von", a , "und" , b , "ist" , c) 

# Variable in str konvertieren
print("Summe von " + str(a) + " und " + str(b) + " ist " + str(c)) 

# Wenn Sie in Tupelweise drucken möchten
print("Summe von %s und %s ist %s: " %(a,b,c))  

# Neues Stil-String-Format
print("Summe von {} und {} ist {}".format(a,b,c)) 

# Falls Sie repr() verwenden möchten
print("Summe von " + repr(a) + " und " + repr(b) + " ist " + repr(c))

EDIT :

# Neu in Python 3.6: f-string Formatierung
print(f'Summe von {a} und {b} ist {c}')

53voto

Gavriel Cohen Punkte 3882

Verwenden Sie: .format():

print("Gesamtpunktzahl für {0} beträgt {1}".format(name, score))

Oder:

// Empfohlen, lesbarerer Code

print("Gesamtpunktzahl für {n} beträgt {s}".format(n=name, s=score))

Oder:

print("Gesamtpunktzahl für" + name + " beträgt " + score)

Oder:

print("Gesamtpunktzahl für %s beträgt %d" % (name, score))

Oder: f-string Formatierung ab Python 3.6:

print(f'Gesamtpunktzahl für {name} beträgt {score}')

Kann repr verwenden und automatisch wird das '' hinzugefügt:

print("Gesamtpunktzahl für" + repr(name) + " beträgt " + repr(score))

# oder für Fortgeschrittene: 
print(f'Gesamtpunktzahl für {name!r} beträgt {score!r}')

23voto

Abhishek Punkte 473

In Python 3.6 ist f-string viel sauberer.

In früheren Versionen:

print("Gesamtpunktzahl für %s ist %s." % (name, score))

In Python 3.6:

print(f'Gesamtpunktzahl für {name} ist {score}.')

wird tun.

Es ist effizienter und eleganter.

15voto

TheExorcist Punkte 1794

Folge einfach diesem

grade = "der größte Idiot"
year = 22
print("Ich bin seit {} Jahren {}.".format(grade, year))

ODER

grade = "der größte Idiot"
year = 22
print("Ich bin seit %s Jahren %s." % (grade, year))

Und vergiss alle anderen, sonst wird das Gehirn nicht in der Lage sein, alle Formate zuzuordnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X