Frage zu print()

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
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Hallo,

seit heute lerne ich Python und hab eine Frage. Ich hab folgendes Programm geschrieben, um mich mit der Eingabe einfacher Zeichenketten zu üben:

Code: Alles auswählen

# Zahl eingeben
print("Bitte geben Sie die erste Zahl ein:")
eingabe = input()
a = int(eingabe)
print("Bitte geben Sie die zweite Zahl ein:")
eingabe = input()
b = int(eingabe)
c = a + b
print("Die Summe der eingegebenen Zahlen lautet:",c)
Die Ausgabe sieht so aus:
>>>
Bitte geben Sie die erste Zahl ein:
5
Bitte geben Sie die zweite Zahl ein:
10
('Die Summe der eingegebenen Zahlen lautet:', 15)
>>>
Warum stehen bei der dritten Ausgabe die Hochkommatas und das Komma vor der 15? Das Programm habe ich aus einem Lehrbuch abgeschrieben und bei denen sieht die Ausgabe so aus, wie erwartet: Einfach hinter dem Doppelpunkt die Zahl c. Woran liegt das? Falls das von Bedeutung ist: Ich benutze IDLE 2.6.5.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Vor Python 3.0 war print eine andere Art von "Ding" - darum hat dieser Quelltext bei print("Die Zeichenkette", c) unterschiedliche Interpretationen respektive zur Version. Wenn du zum Thema Funktionsapplikation kommst und weißt, was ein Tupel ist, wirst du sehen, warum. Ich schlage vor, du benutzt erstmal Python 3.0 --> http://python.org/ . Alternativ kannst du natürlich auch 2.6.5 weiterbenutzen und zb. das offizielle Python Tutorial zu 2.6 benutzen --> http://docs.python.org/tutorial/index.html .
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ja die Version ist hier ganz stark von Bedeutung, mit Python 3 wurde `print` zu einer Funktion, braucht also die Klammern. In Python 2 ist `print` eine Anweisung, braucht also keine. `("...",c)` ist also ein Tupel und wird als solches ausgegeben.

IDLE ist btw nur ein Editor, kein Interpreter.
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

cofi hat geschrieben:Ja die Version ist hier ganz stark von Bedeutung, mit Python 3 wurde `print` zu einer Funktion, braucht also die Klammern. In Python 2 ist `print` eine Anweisung, braucht also keine. `("...",c)` ist also ein Tupel und wird als solches ausgegeben.

IDLE ist btw nur ein Editor, kein Interpreter.
Ok, thx. Ich hab mich die ganze Zeit schon gewundert, warum es print und print() gibt. Ich weiß, dass IDLE nur ein Editor ist. Ich hab auch anfangs meine Programme mit Notepad++ editiert und per Konsole interpretiert, aber ich dachte, dass IDLE vllt. ein "Eigenverhalten" oder Besonderheiten hat und das Auswirkungen auf die Ausgabe haben könnte. Deshalb die Angabe.
str1442 hat geschrieben:Vor Python 3.0 war print eine andere Art von "Ding" - darum hat dieser Quelltext bei print("Die Zeichenkette", c) unterschiedliche Interpretationen respektive zur Version. Wenn du zum Thema Funktionsapplikation kommst und weißt, was ein Tupel ist, wirst du sehen, warum. Ich schlage vor, du benutzt erstmal Python 3.0 --> http://python.org/ . Alternativ kannst du natürlich auch 2.6.5 weiterbenutzen und zb. das offizielle Python Tutorial zu 2.6 benutzen --> http://docs.python.org/tutorial/index.html .
Wenn ich das richtig verstehe, kann Python 2 nur dann erkennen, dass in meinem print() ein String steht, wenn keine Kommas drin sind. Wie kann ich denn in Python 2 Strings mit Variablen in print konkatenieren? Übrigens: Welche Vorteile hat Python 3 gegenüber 2? Ich lerne es, weil ich Netzwerkanwendungen schreiben muss. Welches eignet sich dafür mehr?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

snakemake hat geschrieben:Wenn ich das richtig verstehe, kann Python 2 nur dann erkennen, dass in meinem print() ein String steht, wenn keine Kommas drin sind.
Nein Python 2 "erkennt" nichts, es gibt einfach nur keine 1-elementigen Tupel, bzw diese werden mit `(element,)` erzeugt.

Ob Python 3 Vorteile hat ist vor allem davon abhaengig, ob du Abhaengigkeiten ausserhalb der Standard-Library hast, wenn ja kann es durchaus sein, dass sie noch nicht portiert sind. Ansonsten ist die Zukunftssicherheit und dass mit Ungereimtheiten aufgeraeumt wurde der einzige Vorteil. Grob gesagt.
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Ok, danke. Ich lad mir gerade auch die Version 3 runter, weil ich gemerkt hab, dass mein Lehrbuch auch 3 benutzt.

Schönen Abend noch! 8)
Lastalda
User
Beiträge: 10
Registriert: Dienstag 25. Mai 2010, 14:29

snakemake hat geschrieben:Warum stehen bei der dritten Ausgabe die Hochkommatas und das Komma vor der 15?
Weil in den vorherigen print-Zeilen nur Strings standen, in der letzten aber eine Kombination aus String und Integer. Um das enfach zu umgehen, kannst Du die Zahl in einen String umwandeln. ;)

Code: Alles auswählen

>>> c = 15
>>> print ("text:",c)
('text', 15)
>>> print("text: " + str(c))
text 15
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Lastalda hat geschrieben:
snakemake hat geschrieben:Warum stehen bei der dritten Ausgabe die Hochkommatas und das Komma vor der 15?
Weil in den vorherigen print-Zeilen nur Strings standen, in der letzten aber eine Kombination aus String und Integer.
Nein das ist falsch, die "Kombination" ist ein Tupel und dessen `repr` benutzt eben einfache Quotes fuer Strings, keine doppelten.
Antworten