Print Zahlen und Text in einer Zeile Ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo Leute,

ich bekomme es nicht hin. Nach langem testen wende ich mich an das Forum.
Mein Problem ist , das ich eine Zahl und ein Text mit Print in einer Zeile ausgeben möchte.

Code: Alles auswählen

line="[Event "4th GRENKE Chess Classic"]"
linelänge="43"
print((line) + str((linelänge)), end="")
Der Code läuft nicht in der Console.
Ich lese die Zeilen aus einer Liste aus.

Das Ergebnis wir mir auf der Console so ausgegeben:
[Event "4th GRENKE Chess Classic"]
43
Und so soll es aussehen:
43 [Event "4th GRENKE Chess Classic"]

Wie gesagt ich habe auch Google befragt und viele Beispiele ausprobiert.

Könnte mir jemand helfen?

Bis die Tage...
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Was versuchst du denn mit den vielen Klammern zu erreichen?

Die erste Zeile kann schon einmal nicht funktionieren. Das sieht man hier auch wunderbar bei der Code-Einfärbung. Wenn du eine Zeichenkette mit " beginnst, dann endet sie auch mit ". Es sei denn man maskiert die Anführungszeichen. Aber in Python kann man Zeichenketten mit mindestens mit 4 verschiedenen Mustern deklarieren - da ist es schon schwer keine einzige zu finden, die man nicht maskieren muss.

Zeichenketten bastelt man nicht mit + zurück sondern verwendet f-Strings. Scrolle hier bis zu den Examples.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

sparrow hat geschrieben: Samstag 6. November 2021, 21:11 Was versuchst du denn mit den vielen Klammern zu erreichen
Hallo sparrow,

die erste Zeile wird aus einer Liste gelesen.
Die Ausgabe auf der Console funktioniert.

Dein Link habe ich mir angesehen. Ich begreife davon leider nichts.
Ich möchte eigentlich nur mit Print zwei Variablen ausgeben, nebeneinander.

Hallo 42

weiter nichts.



Bis die Tage...
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Mag sei, dass das aus einer Liste kommt. Aber so wie du es hier schreibst, funktioniert es nicht. Ich finde es immer ein bisschen schade, wenn hier erdachter Code gepostet wird, statt dass man ihn mal ausprobiert hat. So weiß nämlich niemand, ob das das Problem ist.

Was verstehst du an den Beispielen von f-Strings nicht?
Hast du nach dem Stichwort mal gesucht? Oder allgemein String-Formatting?
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@PeterL, sogenannte f-strings (weil eben ein f für format davor steht) erlauben es Variablen in einen Text einzubetten:

Code: Alles auswählen

line='[Event "4th GRENKE Chess Classic"]'
linelänge="43"
print(f"{linelänge} {line}")
Das führt zu dieser Ausgabe:
43 [Event "4th GRENKE Chess Classic"]
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ist der klassische Fehler, wenn man Zeilen aus einer Datei liest und nicht beachtet, dass jede Zeile natürlich mit einem Zeileendezeichen abgeschlossen wird. Das strippt man vor der Ausgabe oder gleich beim Einlesen einfach weg, je nachdem was man wirklich mit den Daten machen will.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Sirius3 hat geschrieben: Samstag 6. November 2021, 22:05 Das ist der klassische Fehler, wenn man Zeilen aus einer Datei liest und nicht beachtet, dass jede Zeile natürlich mit einem Zeileendezeichen abgeschlossen wird. Das strippt man vor der Ausgabe oder gleich beim Einlesen einfach weg, je nachdem was man wirklich mit den Daten machen will.
Hallo Sirius3,

ich lese Schachpartien aus einer PGN Datei mit einer For Schleife aus.
Die Metadaten werden 1 zu 1 eingelesen: [Event "4th GRENKE Chess Classic"]
Die Ausgabe auf der Console funktioniert ohne Probleme.
Ich habe den Fehler gefunden.

längemetadaten="22" # Zeichen
metadaten="[Event "4th GRENKE Chess Classic"]"

Ich muss die Variable, längemetadaten in einen String mittels str umwandeln.
Ich habe das so gemacht:

Code: Alles auswählen

a =str(längemetadaten)
 print(a+metadaten , end="")
Ausgabe auf der Console:

43[Event "4th GRENKE Chess Classic"]
18[Date "2017.04.19"]
12[Round "4.1"]

Bis die Tage...
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Und schon wieder zeigst Du Code, der so nicht läuft, weil die Einrückungen nicht korrekt sind.
Man wandelt nicht Zahlen per str um und stückelt Strings mit + zusammen, sondern benutzt die Formatstrings, wie das sparrow und rogerb schon gezeigt haben.
`längemetadaten` hat nichts mit der Länge von `metadaten` zu tun, was den Variablennamen sehr verwirrend macht.
Und jetzt hast Du das Problem umgangen, indem Du das Zeileendezeichen von metadaten nimmst und print anweist kein Zeileendezeichen zu schreiben. Das ist auch sehr verwirrend, weil niemand bei print(..., end="") erwarten würde, dass eine neue Zeile anfängt.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Sirius3 hat geschrieben: Samstag 6. November 2021, 22:45 Und schon wieder zeigst Du Code, der so nicht läuft, weil die Einrückungen nicht korrekt sind.Man wandelt nicht Zahlen per str um und stückelt Strings mit + zusammen, sondern benutzt die Formatstrings,`längemetadaten` hat nichts mit der Länge von `metadaten` zu tun, was den Variablennamen sehr verwirrend macht.Das ist auch sehr verwirrend, weil niemand bei print(..., end="") erwarten würde, dass eine neue Zeile anfängt.
Hallo Sirius3,

Hier ist der verbesserte Code:

Code: Alles auswählen

längemetadaten=23
metadaten="Event"
print(längemetadaten , metadaten ,end="")
Das ende="" füge ich nur an, da mit print in der Console keine Leerzeilen einfügt.
23 Event

30 Event

mit end="" sieht es dann so aus:
23 Event
30 Event

Du hast recht ich benötige kein str, irgendwie hat es damit geklappt.
Die Variablen längemetadaten enthalten die Länge als 23 Zeichen.
Die Variable metadaten enthalten die Schachpartien

[Event "4th GRENKE Chess Classic"]
[Date "2017.04.19"]
[Round "4.2"]

Und genau so wie diese hier stehen.

Bis die Tage...
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

PeterL hat geschrieben: Samstag 6. November 2021, 23:20
Sirius3 hat geschrieben: Samstag 6. November 2021, 22:45 Und schon wieder zeigst Du Code, der so nicht läuft, weil die Einrückungen nicht korrekt sind.Man wandelt nicht Zahlen per str um und stückelt Strings mit + zusammen, sondern benutzt die Formatstrings,`längemetadaten` hat nichts mit der Länge von `metadaten` zu tun, was den Variablennamen sehr verwirrend macht.Das ist auch sehr verwirrend, weil niemand bei print(..., end="") erwarten würde, dass eine neue Zeile anfängt.
Hallo Sirius3,

Hier ist der verbesserte Code:

Code: Alles auswählen

längemetadaten=23
metadaten="Event"
print(längemetadaten , metadaten ,end="")
Das ende="" füge ich nur an, da mit print in der Console keine Leerzeilen einfügt.
23 Event

30 Event

mit end="" sieht es dann so aus:
23 Event
30 Event

Du hast recht ich benötige kein str, irgendwie hat es damit geklappt.
Die Variablen längemetadaten enthalten die Länge als 23 Zeichen.
Die Variable metadaten enthalten die Schachpartien

[Event "4th GRENKE Chess Classic"]
[Date "2017.04.19"]
[Round "4.2"]

Und genau so wie diese hier stehen.

PS: ich habe noch ein wenig rumexperimentiert:
So geht's auch.

Code: Alles auswählen

längemetadaten=23
metadaten="Event"
a=('{} {}'.format(längemetadaten, metadaten ,end=""))
print(a,end="")
Bis die Tage...
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

rogerb hat geschrieben: Samstag 6. November 2021, 21:34 @PeterL, sogenannte f-strings (weil eben ein f für format davor steht) erlauben es Variablen in einen Text einzubetten:

Code: Alles auswählen

line='[Event "4th GRENKE Chess Classic"]'
linelänge="43"
print(f"{linelänge} {line}")
Das führt zu dieser Ausgabe:
43 [Event "4th GRENKE Chess Classic"]
Hallo rogerb,

danke für deine Antwort.
Ich habe jetzt auch eine gute Seite gefunden.
So könnte man es auch machen.

Code: Alles auswählen

längemetadaten=23
metadaten="Event"
a=('{} {}'.format(längemetadaten, metadaten ,end=""))
print(a,end="")
Ausgabe sieht so aus.
23 Event

Bis die Tage...
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

sparrow hat geschrieben: Samstag 6. November 2021, 21:28 Mag sei, dass das aus einer Liste kommt. Aber so wie du es hier schreibst, funktioniert es nicht. Ich finde es immer ein bisschen schade, wenn hier erdachter Code gepostet wird
Was verstehst du an den Beispielen von f-Strings nicht?
Hast du nach dem Stichwort mal gesucht? Oder allgemein String-Formatting?
Hallo sparrow,

Mittlerweile habe ich mich eingearbeitet, weiter unten im Beitrag habe ich einige Beispiel geschrieben, die auch funktionieren. Ich habe die Formatierung noch nie benötigt, für mich war das bis jetzt Neuland. Ich habe eine gute Seite gefunden, die werde ich mir durchlesen. Danke für deine Antwort.
Bis die Tage...
Antworten