ord()

Zwraca kod Unicode pojedynczego znaku, np. ord("A") to 65. Działa odwrotnie niż chr().

Zwraca
Liczbę całkowitą, czyli kod znaku w standardzie Unicode.
Na tej stronie

Przykład

#
Python
print(ord("A"), ord("a"), ord("ł"))
print(ord("c") - ord("a"))

for char in "Ań1":
    print(char, ord(char), f"U+{ord(char):04X}")
Wynikzapisany wynik, możesz go sprawdzić
65 97 322
2
A 65 U+0041
ń 324 U+0144
1 49 U+0031

Definicja i zastosowanie

#

Funkcja ord(znak) przyjmuje napis złożony z dokładnie jednego znaku i zwraca jego numer w standardzie Unicode. ord("A") to 65, ord("a") to 97, a ord("ł") to 322. Napis pusty albo dłuższy niż jeden znak zgłasza TypeError.

Python porównuje napisy właśnie według tych kodów, znak po znaku. Dlatego wielkie litery są „mniejsze” od małych ("Z" < "a"), a polskie litery z ogonkami trafiają przy sortowaniu na koniec, za "z". Znając kody, łatwo zrozumieć, skąd biorą się takie wyniki.

Kod w zapisie szesnastkowym uzyskasz przez hex(ord(znak)) albo f-string f"U+{ord(znak):04X}", w formacie używanym w tabelach Unicode. Razem z chr() funkcja pozwala liczyć na znakach, np. wyznaczyć pozycję litery w alfabecie: ord(litera) - ord("a").

Składnia

#
Składnia
ord(c)

Parametry

#
  • c

    str o długości 1

    Pojedynczy znak.

Więcej przykładów

#
Dlaczego sortowanie „psuje” polskie słowa
Python
words = ["żółw", "zebra", "Ania", "ala", "łódź"]

print(sorted(words))
print(ord("Z"), ord("a"), ord("z"), ord("ł"), ord("ż"))
print(sorted(words, key=str.lower))
Wynikzapisany wynik, możesz go sprawdzić
['Ania', 'ala', 'zebra', 'łódź', 'żółw']
90 97 122 322 380
['ala', 'Ania', 'zebra', 'łódź', 'żółw']

Wielkie litery mają mniejsze kody niż małe, a litery z ogonkami leżą daleko za z, dlatego trafiają na koniec listy.

Pozycja litery i napis dłuższy niż jeden znak
Python
def letter_position(letter):
    return ord(letter.lower()) - ord("a") + 1

print(letter_position("C"), letter_position("z"))

try:
    ord("ab")
except TypeError as error:
    print(error)
Wynikzapisany wynik, możesz go sprawdzić
3 26
ord() expected a character, but string of length 2 found

Dobre praktyki

#
  • Do sortowania bez rozróżniania wielkości liter użyj key=str.lower. Pełne sortowanie po polsku, z ogonkami na właściwych miejscach, wymaga modułu locale albo biblioteki PyICU.
  • Kody wszystkich znaków napisu uzyskasz wyrażeniem [ord(c) for c in tekst].
  • Zakres znaków sprawdzisz bez ord(), porównując napisy: warunek "a" <= znak <= "z" daje ten sam wynik co porównanie kodów.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.