Die Python-Funktion ord(c) liefert den Unicode-Codepoint eines einzelnen Zeichens als Ganzzahl. Sie ist das Gegenstück zu chr() — chr(ord(c)) liefert das Originalzeichen. ord() arbeitet mit allen Unicode-Zeichen, nicht nur ASCII.
Einleitung
Computer kennen keine Zeichen — sie kennen Zahlen. Jedes Zeichen in Pythons Unicode-Strings ist ein Codepoint: eine eindeutige Ganzzahl im Bereich 0 bis 0x10FFFF (1.114.111). ord() macht diese Zahl sichtbar.
Beispiele:
ord('A')→65(ASCII)ord('a')→97ord('ä')→228ord('€')→8364ord('🎉')→127881
ord() akzeptiert nur einzelne Zeichen — also Strings der Länge 1. Bei längeren Strings oder leeren Strings wirft die Funktion einen TypeError. Auch bei Bytes funktioniert sie: ord(b'A') → 65.
Syntax
ord(c)c Ein String oder Byte-String der Länge 1.
Rückgabewert
Eine int mit dem Unicode-Codepoint des Zeichens.
Beispiele
Verschiedene Zeichen
Selbst Emojis und Sonderzeichen haben einen eindeutigen Codepoint — ord() liefert ihn unabhängig vom Encoding:
print(ord('A'))
print(ord('a'))
print(ord('0'))
print(ord('ä'))
print(ord('€'))
print(ord('🎉'))65
97
48
228
8364
127881Hin- und Rückrichtung
chr() und ord() sind exakte Umkehrfunktionen voneinander — perfekt für Codepoint-basierte Operationen:
z = 'Ψ'
cp = ord(z)
back = chr(cp)
print(cp, back, cp == ord(back))936 Ψ TrueBytes statt str
Bei Byte-Strings liefert ord() die Byte-Wert (0–255):
print(ord(b'A'))
print(ord(b'\xff'))65
255Praktische Beispiele
Caesar-Verschiebung implementieren
Klassisches Crypto-Spielzeug: jeder Buchstabe um n Positionen verschieben — ord() liefert die Position, chr() macht daraus wieder ein Zeichen:
def caesar(text, shift):
result = []
for c in text:
if 'A' <= c <= 'Z':
result.append(chr((ord(c) - ord('A') + shift) % 26 + ord('A')))
elif 'a' <= c <= 'z':
result.append(chr((ord(c) - ord('a') + shift) % 26 + ord('a')))
else:
result.append(c)
return "".join(result)
print(caesar("Hallo Welt", 3))
print(caesar("Kdoor Zhow", -3))Kdoor Zhow
Hallo WeltZeichen-Range bauen (alle Buchstaben A–Z)
Die Kombination von ord(), chr() und range() ist ein kompaktes Idiom für Zeichen-Sequenzen:
uppercase_letters = [chr(c) for c in range(ord('A'), ord('Z') + 1)]
print(uppercase_letters)['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']Druckbare Zeichen prüfen
Mit ord() lassen sich Codepoint-Bereiche direkt vergleichen — schneller als per Regex:
def is_ascii_printable(c):
return 32 <= ord(c) <= 126
print(is_ascii_printable('A'))
print(is_ascii_printable('\n'))
print(is_ascii_printable('ä'))True
False
FalsePraktische Hinweise
- Nur Strings der Länge 1 — sonst
TypeError. Ein leerer String oder mehrere Zeichen sind nicht erlaubt. - Unicode, nicht UTF-8:
ord()liefert den Codepoint, nicht die Byte-Repräsentation. Für Bytes vorher in Bytes umwandeln und einzeln ansprechen. - Verwandte Funktion:
chr()(Codepoint → Zeichen),bytes.fromhex()/int(hex, 16)für andere Konvertierungen. unicodedata-Modul liefert Namen, Kategorien und Normalisierung für jeden Codepoint.