Zum Inhalt springen

Ein- und Ausgabe

Aus Wikibooks
(Weitergeleitet von Python/ Input)

Bitte erstellen Sie eine neue Datei und speichern Sie diese.

Wichtig: Die Zeilennummern dienen der Übersichtlichkeit und dürfen nicht mit eingegeben werden.

begruessung = "Bitte geben Sie den Radius ein:"
print(begruessung)

Führen Sie die Datei aus, dabei sollte folgendes Ergebnis herauskommen:

Bitte geben Sie den Radius ein:
>>>

Wie Sie sehen, haben Sie Ihren ersten eigenen Text auf dem Bildschirm ausgegeben!

Ausgabe

[Bearbeiten]

Mit der Funktion print geben Sie einen Text auf dem Standardausgabekanal (englisch: 'stdout' für 'Standard out') aus: Ihren Bildschirm. Während wir im Deutschen bei dem Wort "drucken" eher an den Papierausdruck denken, wird im Englischen auch auf den Bildschirm "gedruckt", daher der Name 'print'.

Wir können print() beliebig viele Objekte, wie Zahlen, Zeichenketten, Listen usw. als Parameter übergeben:

begr = "Hallo"
verab = "und Tschüss."
print(begr, "Unbekannt", ",", verab)
Hallo Unbekannt , und Tschüss.

Standardmäßig trennt print() die Eingaben mit einem Leerzeichen. Mit dem keyword-Parameter "sep" können wir das ändern:

begr = "Hallo"
verab = "und Tschüss."
print(begr, "Unbekannt", verab, sep="😀")
======================= RESTART: D:/AA_Projekte/Programmierung/print.py =======================
Hallo😀Unbekannt😀und Tschüss.

Am Ende jeder Ausgabe hängt print einen Zeilenumbruch ("\n" - englisch 'newline') an. Rufen wir print() ohne Parameter auf, erhalten wir also eine Leerzeile:

print()
print("zweite Zeile")
print()
print("Zeile vier")
zweite Zeile

Zeile vier

Mit dem Parameter end können wir dieses Verhalten kontrollieren:

print(end="")
print("zweite Zeile", end="§§")
print("Zeile vier")
zweite Zeile§§Zeile vier

Aufrufschema mit allen Parametern und Defaultwerten:

print(Parameterliste, sep=' ', end='\n', file=None, flush=False)
Parameter   Bedeutung
sep Trennzeichen/-string
end Abschluss, z.B. Zeilenvorschub
file file=file-Objekt bewirkt Ausgabe in eine zuvor zum Schreiben geöffnete Datei
flush flush=True bewirkt ungepufferte (sofortige) Ausgabe

Formatierte Ausgabe

[Bearbeiten]

Alte Methode

[Bearbeiten]

Mit Formatsteuerzeichen im String kann die Ausgabe formatiert werden. Dabei wird durch Verknüpfung des Formatstrings über den Operator % mit einem einzelnen Wert oder einem Tupel, das die Daten enthält, ein neuer String erstellt. Die Formatsteuerzeichen bestehen aus dem Prozentzeichen % und einem Buchstaben, der den Datentyp und das Format des Ergebnisses spezifiziert; dazwischen kann die Länge und die Anzahl der Nachkommastellen in Ziffern angegeben werden.

Die allgemeine Syntax für Formatsteuerzeichen ist %[Flags][Länge][.Genauigkeit]Typ.

Formatsteuerzeichen
Typ Bedeutung Datentyp
d Ganze Dezimalzahl int, float, bool
o Ganze Oktalzahl int
x Ganze Hexadezimalzahl (Kleinbuchstaben, z.B ff) int
X Ganze Hexadezimalzahl (Großbuchstaben, z.B. FF) int
e Gleitkommazahl in Exponenten-Notation (kleines e, z.B. 1e+45) float, int
E Gleitkommazahl in Exponenten-Notation (großes E, z.B. 1E+45) float, int
f Gleitkommazahl mit Dezimalpunkt, immer ohne Exponent float, int
F Gleitkommazahl mit Dezimalpunkt, immer ohne Exponent float, int
g Gleich wie "f" wenn -4 <= Exponent <= Genauigkeit, sonst "e" float, int
G Gleich wie "F" wenn -4 <= Exponent <= Genauigkeit, sonst "E" float, int
c Einzelnes Zeichen int, char )*
r String (Konvertierung mit repr()) beliebig
s String (Konvertierung mit str()) beliebig
% % (Prozentzeichen) n. a.
i Ganze Dezimalzahl int, float, bool
u Äquivalent zu 'd', veraltet
Flag Bedeutung
# Präfix 0o, 0O, 0x oder 0X wird vorangestellt
0 Das Ergebnis wird mit Nullen aufgefüllt.
- Das Ergebnis wird linksbündig ausgegeben.
 (Leerzeichen) Bei Werten ≥ 0 wird ein Leerzeichen vor den Wert gesetzt.
+ Alle Werte werden mit Vorzeichen versehen ("+" oder "-").
)* char ist ein String der Länge 1

Beispiele:

print("x=%E, y=%E" % (1000, 0.0000001))
x=1.000000E+03, y=1.000000E-07
print("n = %04X" % 255)
n = 00FF
print("%9.4f" % (1/7))
   0.1429

Neue Methode

[Bearbeiten]

Die modernere Methode, Daten für die Ausgabe zu formatieren, sind sogenannte f-Strings; dabei wird ein f[1] vor das Anführungszeichen geschrieben und die auszugebenden Ausdrücke, Werte und Variablen in geschweiften Klammern ({}) in den String eingefügt. Das gewünschte Format kann durch Doppelpunkt getrennt nach den Daten angegeben werden. Sollen geschweifte Klammern im Text vorkommen, müssen sie als {{ bzw. }} geschrieben werden.

Beispiel:

print(f"{1/7:9.4f}")
   0.1429

Die allgemeine Syntax für Daten im f-String ist {[Ausdruck][!Konvertierung][:[Optionen][Länge][Gruppierung][.Genauigkeit][Typ]]}.

Obengenannte Formatsteuerzeichen funktionieren hier ganz ähnlich, jedoch gibt es einige Möglichkeiten mehr.

Im Folgenden wird die Funktion der Steuerzeichen für die Parameter Konvertierung, Optionen, Gruppierung und Typ beschrieben.

Konvertierung
Zeichen Bedeutung
s String (Konvertierung mit str())
r String (Konvertierung mit repr())
a in ASCII, Zeichen ab chr(127) werden durch Hexadezimalcode ersetzt, z.B. 'ä' durch '\\xe4'

Beispiel:

print(f"{True!s:5}.")
True .
Optionen
Kategorie Zeichen Bedeutung
Füllzeichen beliebiges Zeichen außer '{' und '}' Nur mit Angabe der Ausrichtung:

auffüllen mit dem angegebenen Zeichen

Ausrichtung < linksbündig
> rechtsbündig
= Füllzeichen werden zwischen Vorzeichen und der ersten Ziffer eingefügt.
^ zentriert
Vorzeichen + immer mit Vorzeichen (auch '+')
- nur negative Zahlen mit Vorzeichen (Default)
 (Leerzeichen) Leerzeichen statt '+'
z wenn die Rundung '-0.0' ergibt, wird '0.0' ausgegeben
# binär, oktal, hexadezimal: Präfix 0b, 0o, 0x oder 0X wird mit ausgegeben;

float: immer mit Dezimalpunkt

0 mit führenden Nullen

Beispiel:

print(f"{10**6:`>12_}")
```1_000_000
Gruppierung
Zeichen Bedeutung
, (Komma) Dezimalzahlen werden mit "," als Tausendertrennzeichen ausgegeben.
_ (Unterstrich) Dezimalzahlen werden mit "_" als Tausendertrennzeichen ausgegeben.

Binär-, Oktal- und Hexadezimalzahlen werden in Vierergruppen aufgeteilt.

Beispiele:

print(f"{10**9:_}")
1_000_000_000
print(f"{10**6:13_}")
    1_000_000
Typ
Typ Bedeutung Datentyp
b binär int
c Unicode-Zeichen int
d Ganze Dezimalzahl int
o Ganze Oktalzahl int
x Ganze Hexadezimalzahl (Kleinbuchstaben, z.B ff) int
X Ganze Hexadezimalzahl (Großbuchstaben, z.B. FF) int
n Gleich wie "d", aber mit landesspezifischem Tausendertrennzeichen; die deutsche Variante kann mit locale.setlocale(locale.LC_NUMERIC, locale="DE") eingestellt werden. int
None Ganze Dezimalzahl int
'e' Gleitkommazahl in Exponenten-Notation (kleines e, z.B. 1e+45) float, int
'E' Gleitkommazahl in Exponenten-Notation (großes E, z.B. 1E+45), INF und NAN in Großbuchstaben float, int
'f' Gleitkommazahl mit Dezimalpunkt, immer ohne Exponent float, int
'F' Gleitkommazahl mit Dezimalpunkt, immer ohne Exponent, INF und NAN in Großbuchstaben float, int
'g' Gleich wie "f" wenn -4 <= Exponent <= Genauigkeit, sonst "e"

Ohne Angabe der Genauigkeit werden 6 signifikante Stellen ausgegeben.

Plus und minus unendlich, Null und minus Null und nan werden als inf, -inf, 0, -0 bzw. nan ausgegeben, unabhängig von der angegebenen Genauigkeit.

float, int
'G' Gleich wie "g", aber E, INF und NAN in Großbuchstaben float, int
'n' Gleich wie "g", aber mit landesspezifischen Tausender- und Dezimaltrennzeichen (Punkt, Komma); die deutsche Variante kann mit locale.setlocale(locale.LC_NUMERIC, locale="DE") eingestellt werden. float, int
'%' Prozent: Wert mal 100, gefolgt von Prozentzeichen float, int
None Gleich wie "g", aber mit mindestens einer Nachkommastelle float

Beispiele:

print(f"x = {1000:E}, y = {0.0000001:E}")
x = 1.000000E+03, y = 1.000000E-07
print(f"n = {255:04X}")
n = 00FF
print(f"{1/7:9.4f}")
   0.1429

Ein Gleichheitszeichen nach dem Ausdruck bewirkt, dass der Ausdruck und das folgende Gleichheitszeichen als String mit ausgegeben werden; vor und nach dem Gleichheitszeichen dürfen auch Leerzeichen stehen.

Beispiele:

print(f"{1/7 = :10.7f}")
1/7 =  0.1428571
x = sqrt(3)
print(f"{x = :.8f}")
x = 1.73205081

Eingabe

[Bearbeiten]

Für Eingaben über die Tastatur stellt uns Python die Funktion input zur Verfügung. Diese hält das Programm an, bis Sie etwas eingegeben und die Entertaste gedrückt haben:

name = input("Bitte geben Sie Ihren Namen ein: ")
anrede = "Hallo"
text = "wie geht's?"
print(anrede, name, text)
Bitte geben Sie Ihren Namen ein: Arthur Dent
Hallo Arthur Dent wie geht's?

Die Funktion input hat einen optionalen Parameter prompt und gibt einen String ohne Zeilenumbruch am Ende zurück. Wenn ein Prompt angeben wurde, wird er auf stdout ausgegeben. Wenn nur Enter gedrückt wurde, wird ein leerer String ("") zurückgegeben.

Die Funktion input() liefert uns immer einen String zurück:

eingabe = input("Bitte geben Sie den Radius ein: ")
print(type(eingabe))
Bitte geben Sie den Radius ein: 5
<class 'str'>

Wenn eine Zahl gebraucht wird, müssen wir daher den String in eine Zahl umwandeln ("konvertieren"):

eingabe = int(input("Bitte geben Sie den Radius ein: "))
print(type(eingabe), eingabe)
Bitte geben Sie den Radius ein: 5
<class 'int'> 5

Damit kann die eingegebene Zahl für Berechnungen verwendet werden:

radius = int(input("Bitte geben Sie den Radius ein: "))
umfang = 2 * 3.14 * radius
print("Der Umfang ist: ", umfang)
Bitte geben Sie den Radius ein: 5
Der Umfang ist:  31.400000000000002

Die folgende Tabelle zeigt die Konvertierungsfunktionen für die Datentypen, die wir schon kennen:

Konvertierungsfunktionen
Datentyp Funktion
int int()
float float()
complex complex()
string str()

Bei der Eingabe von Zahlen kann der Unterstrich _ als Tausender-Trennzeichen verwendet werden.

Die Konvertierungsfunktion int hat einen zweiten, optionalen Parameter "base", damit können ganze Zahlen auch binär, oktal, hexadezimal oder zu irgendeiner anderen Basis von 3 bis 36 eingeben werden:

Funktion Eingabe Basis Ergebnis als Dezimalzahl
int(input("Zahl: "), 0) 0b101 2 5
0xFF 16 255
13 10 13
int(input("Zahl: "), 2) 101 2 5
0b101 2 5
int(input("Zahl: "), 8) 15 8 13
0o15 8 13
int(input("Zahl: "), 16) FF 16 255
0xFF 16 255
17 16 23
int(input("Zahl: "), 13) 42 13 54

Die Angabe base=0 heißt natürlich nicht, dass Null als Basis genommen wird, sondern dass die Basis durch den Präfix bestimmt wird: Dezimalzahlen ohne Präfix und binär, oktal, hexadezimal mit den bekannten Präfixen 0b, 0o und 0x.

Zusammenfassung

[Bearbeiten]

Sie können mit input() Benutzereingaben lesen und mit print() Daten auf dem Monitor ausgeben.

Anmerkungen

[Bearbeiten]
  1. Das ist auch in Kombination mit r für Raw-Strings möglich: rf"...".

Seitentitel: Python/ Ein- und Ausgabe
(Python/ Ein- und Ausgabe)
(Python/ Ein- und Ausgabe)