Funkcja ord() w Pythonie służy do konwersji pojedynczego znaku na jego wartość liczbową (kod punktowy Unicode). Stanowi jedno z podstawowych narzędzi podczas programowania związanych z operacjami na tekstach, kodowaniem znaków czy ich analizą.
Jak działa funkcja ord()?
Zasada działania funkcji ord() jest prosta:
- Przyjmuje pojedynczy znak jako argument,
- Zwraca liczbę całkowitą odpowiadającą kodowi Unicode tego znaku (ang. code point),
- Wywołanie na przykład:
print(ord('A')) # wynik: 65
print(ord('ż')) # wynik: 380
Funkcja chr() działa odwrotnie – przekształca liczbę (kod Unicode) na odpowiadający jej znak.
Zastosowania ord() w praktyce
1. Szyfrowanie i kodowanie tekstu
- Przesunięcie kodu (np. w szyfrze Cezara) polega na zmianie wartości zwracanej przez ord(), a następnie konwersji powrotnej przez chr().
2. Sprawdzanie typu znaków
- Porównując wartości kodów, można szybko ustalić, czy znak jest małą literą, dużą literą, cyfrą itp.,
- Przykład:
if 97 <= ord('a') <= 122:
print("Mała litera alfabetu łacińskiego") # wynikiem będzie True dla 'a'
3. Praca z kodowaniem Unicode
- Python 3 obsługuje Unicode w pełni – ord() działa na każdym znaku, niezależnie od języka,
- Dla znaków spoza ASCII (kod > 127) otrzymasz wynik zgodny ze standardem Unicode.
4. Przetwarzanie tekstu i analizy statystyczne
- Można liczyć częstotliwość występowania znaków na podstawie ich kodów, szeregować, sortować czy wyznaczać unikalność.
Obsługa kodowania tekstów w Pythonie
- W Pythonie 3 teksty przechowywane są jako ciągi znaków Unicode, najczęściej kodowane w UTF-8,
- ord() zwraca kod Unikodowy, dzięki czemu nie ograniczamy się tylko do standardu ASCII,
- Można używać innych kodowań tekstu – należy wtedy odpowiednio je zadeklarować w pliku źródłowym poprzez dyrektywę kodowania.
Praktyczne przykłady zastosowania ord()
# Sprawdzanie kodów kilku znaków
for znak in ['A', 'a', '@', 'ą', '€']:
print(f"Znak: {znak}, Kod Unicode: {ord(znak)}")
# Dekodowanie i kodowanie tekstu – szyfr Cezara
def szyfr_cezara(tekst, przesuniecie):
zaszyfrowany = ''
for znak in tekst:
if znak.isalpha():
kod = ord(znak) + przesuniecie
zaszyfrowany += chr(kod)
else:
zaszyfrowany += znak
return zaszyfrowany
print(szyfr_cezara("Python!", 1)) # Qzuipo!
Funkcja isalpha() pozwala dodatkowo sprawdzić, czy znak jest literą, co często łączy się z pracą na kodach Unicode.
Ograniczenia i wyjątki
- ord() działa tylko na pojedynczych znakach.
- Wywołanie
ord('AB')zwróci błąd typu ValueError, - Nie działa na pustym wejściu.
ord('')wywoła błąd,- Dla znaków spoza standardowych kodów (np. emoji), ord() również działa prawidłowo, zwracając właściwe kody Unicode.
Porównanie kodów – ASCII vs Unicode
| Znak | Kod ASCII | Kod Unicode |
|---|---|---|
| ’A’ | 65 | 65 |
| ’ą’ | – | 261 |
| ’€’ | – | 8364 |
Warto wiedzieć, że:
- ASCII to podzbiór Unicode (zakres kodów 0-127);
- Wszystkie znaki, także polskie, chińskie czy emoji, mają swoje reprezentacje w Unicode.
Najczęstsze zastosowania ord() i chr():
- Tworzenie szyfrów znakowych,
- Walidacja i klasyfikacja znaków,
- Analiza i sortowanie tekstu,
- Praca z kodowaniem znaków w różnych językach.
Podsumowanie – ord() w skrócie
ord() to narzędzie konwertujące pojedyczny znak na jego kod Unicode, pozwalające na szerokie operacje tekstowe w Pythonie – od analizy, przez szyfrowanie, aż po niestandardowe przetwarzanie napisów. Dzięki wsparciu Unicode w Pythonie, możliwości tej funkcji są bardzo szerokie i przydatne w codziennym programowaniu.