top of page

Napisy - czyli o słowach w Pythonie


ree

Napisy


Wstęp

Napis (z angielskiego string) to jeden z podstawowych typów danych, który służy do przechowywania ciągów znaków (np. imion, adresów, komunikatów). Wartości tego typu zapisujemy w cudzysłowie. We wcześniejszych lekcjach poznaliśmy podstawowe działania na napisach (sklejanie oraz mnożenie), teraz dowiemy się więcej.


Tworzenie

Zacznijmy od przypomnienia, czym są operacje sklejenia (połączenia) i mnożenia napisów. Operacja połączenia dwóch napisów jest wykonywana za pomocą operatora (+). Na przykład, w wyniku wykonania polecenia:


print("Code" + "foria")
 

na ekran będzie wypisany napis:


Codeforia
 

Do wielokrotnego powtórzenia napisu (mnożenia) możemy wykorzystać operator (*). Jednym argumentem tego działania jest napis, a drugim liczba oznaczająca, ile razy chcemy powtórzyć dany napis. Argumenty możemy podać w dowolnej kolejności. Na przykład, polecenie:


print("ab" * 5)
 

wypisze na ekran:


ababababab
 

Wczytywanie i wypisywanie

Za pomocą funkcji input wczytuje się jeden wiersz (napis). Zapisanie wczytanego napisu w zmiennej może wyglądać następująco:


napis = input()
 

Funkcja print wypisuje napis podany jako argument. Na przykład:


napis = "codeforia"
print(napis)
 

wypisze na ekran:


codeforia
 

Parametr sep

Jeśli chcemy wypisać więcej informacji za pomocą jednej instrukcji print, wystarczy oddzielić je przecinkami. Na przykład:


print("Tomek ma", 16, "lat")
 

wypisze na ekran:


Tomek ma 16 lat
 

Zauważmy, że kolejne słowa zostały oddzielone spacjami (domyślnym separatorem). Do ustalenia, jakiego separatora chcemy użyć, służy parametr sep. Ważne, aby ten parametr podać po wartościach, które chcemy wypisać. Na przykład, polecenie:


print("Tomek ma", 12, "lat", sep="|")
 

wypisze na ekran:


Tomek ma|12|lat
 

Przypomnijmy, że możemy również wykorzystać parametr end, który definiuje, co ma zostać wypisane na końcu. Oba parametry (sep oraz end) podajemy po wartościach do wypisania. Na przykład:


print("Tomek ma", 12, "lat", sep=" | ", end="!!!")
 

wypisze na ekran:


Tomek ma | 12 | lat!!!
 

Długość

Funkcja len oblicza długość napisu. Na przykład, polecenie:


len("codeforia")
 

da w wyniku 9. Długość napisu możemy zapisać w zmiennej, aby móc potem odwoływać się do tej wartości. Poniższy kod:


nazwa = "code"
dlugosc = len(nazwa)
print(dlugosc)
 

wypisze na ekran liczbę 4.


Indeksowanie

Podobnie jak w listach również w napisach znaki są ponumerowane (indeksowane) kolejnymi liczbami naturalnymi od 0. Spójrzmy na poniższy przykład:


#        012345678
napis = "codeforia"
 

Dzięki ponumerowaniu znaków (ich indeksowaniu) możemy łatwo się do nich odwoływać. Wystarczy podać nazwę napisu i w nawiasach kwadratowych numer znaku. Przykładowo napis[3] to odwołanie do znaku o indeksie 3 w napisie napis, który jest literą 'e'.

Istnieje też drugi sposób numerowania. Do znaków napisu można odwoływać się za pomocą ujemnych indeksów. Wówczas znaki napisu są indeksowane od -1, od prawej do lewej.


napis = "foria"
 

Wówczas napis[-2] oznacza drugi znak od prawej, czyli literę 'i'.


Przechodzenie po napisie

Załóżmy, że chcemy obliczyć liczbę wystąpień litery 'a' w napisie owoc = "banan". Indeksowanie wykorzystamy do nawigacji. Pierwsza litera ma numer 0, a numer ostatniej to długość napisu minus 1 (w tym przypadku 4). Wystarczy zatem przejść pętlą for po kolejnych indeksach od 0 do len(owoc) - 1. Jeśli znak pod rozważanym indeksem jest literą 'a', to zwiększamy aktualny wynik o 1. Przykładowa implementacja:


wynik = 0
for i in range(len(owoc)):
    if owoc[i] == 'a':
        wynik += 1
print(wynik)
 

Istnieje również sposób przechodzenia po napisie, który nie korzysta z indeksów. Pętlę zaczynamy słowem kluczowym for, następnie podajemy nazwę zmiennej, która w kolejnych krokach będzie przyjmowała kolejne znaki napisu podanego po słowie kluczowym in.


wynik = 0
for znak in owoc:
    if znak == 'a':
        wynik += 1
print(wynik)
 

W powyższym kodzie w pierwszym kroku zmienna znak jest równa 'b', w drugim kroku 'a', w trzecim 'n' itd.


Napis a lista znaków

W przeciwieństwie do list elementy napisu nie mogą być modyfikowane, a jedynie odczytywane. Zatem instrukcja przypisania napis[3] = 'a' zwróci błąd i się nie wykona. Jeśli jednak mamy potrzebę modyfikowania znaków, możemy przekonwertować napis na listę znaków za pomocą funkcji list, której argumentem jest napis. Na przykład, w wyniku wykonania kodu:


napis = "codeforia"
lista = list(napis)
print(napis)
print(lista)
 

na ekranie zostanie wyświetlone:


codeforia
['c', 'o', 'd', 'e', 'f', 'o', 'r', 'i', 'a']
 

Obrazuje to różnicę typów danych. Możemy zatem zadać sobie pytanie: skoro lista umożliwia zmianę elementów, a napisy nie, to dlaczego nie korzystać wyłącznie z listy znaków? Otóż, działania na napisach często pochłaniają mniej czasu - są szybsze - niż działania na listach, dlatego dopóki nie ma potrzeby, polecamy korzystać z napisów.

Listę znaków możemy przekonwertować na napis, sklejając jej kolejne znaki.


lista = ['c', 'o', 'd', 'e', 'f', 'o', 'r', 'i', 'a']
napis = ""
for znak in lista:
    napis += znak
 

Napisy możemy zapisywać w cudzysłowie lub pojedynczych apostrofach (patrz powyższy przykład), nie ma to wpływu na działanie programu.

Trenuj z nami!

example lesson on codeforia

Pisanie programów jest bardzo ważnym elementem nauki programowania. Możesz to robić rozwiązując zadania (mikroprojekty) dostępne na naszej platformie edukacyjnej Codeforia. Rozwiązania są sprawdzane automatycznie, a po chwili od wysłania kodu dowiesz się, czy jest ono poprawne, czy wymaga zmian. Zapraszamy również na regularne zajęcia online, gdzie będziesz mógł/mogła rozwijać się pod okiem doświadczonego trenera. Zobacz nasze dostępne kursy.

Kursy programowania dla dzieci i młodzieży.

bottom of page