W języku Python stosujemy dwie podstawowe funkcje pozwalające przeprowadzać operacje na kodach ASCIIASCIIASCII:

Funkcja

Przykład

chr(liczba) -> znak

chr(65) -> 'A'

ord(znak) -> liczba

ord('P') -> 80

Ważne!

Funkcja chr() przyjmuje jako argument liczbę całkowitą (kod ASCII), a zwraca odpowiadający jej znak.

Funkcja ord() działa odwrotnie – jako argument przyjmuje znak, a zwraca odpowiadający mu kod ASCII.

Ciągi znaków w języku Python

W języku Python teksty są obiektami typu string (a dokładniej obiektami klasy str).

Oto przykłady definiowania i wyświetlania ciągów znaków:

Linia 1. napis znak równości cudzysłów Python cudzysłów. Linia 2. print otwórz nawias okrągły type otwórz nawias okrągły napis zamknij nawias okrągły zamknij nawias okrągły. Linia 3. kratka wypisze dwukropek otwórz nawias ostrokątny class apostrof str apostrof zamknij nawias ostrokątny. Linia 5. napis znak równości apostrof To jest napis 1 apostrof. Linia 6. print otwórz nawias okrągły napis zamknij nawias okrągły. Linia 7. kratka wypisze dwukropek To jest napis 1. Linia 9. napis znak równości cudzysłów A to inny sposób zapisu cudzysłów. Linia 10. print otwórz nawias okrągły napis zamknij nawias okrągły. Linia 11. kratka wypisze dwukropek A to inny sposób zapisu. Linia 13. kratka Powyższe dwa zapisy są równoważne przecinek natomiast. Linia 14. kratka wielolinijkowy napis możemy zapisać przy użyciu. Linia 15. kratka potrójnych cudzysłowów lub potrójnych apostrofów. Linia 16. napis znak równości apostrof apostrof apostrof. Linia 17. A to jest napis przecinek. Linia 18. który składa się z kilku linijek. Linia 19. apostrof apostrof apostrof. Linia 20. print otwórz nawias okrągły napis zamknij nawias okrągły. Linia 22. kratka wypisze dwukropek A to jest napis przecinek. Linia 23. kratka który składa się z kilku linijek. Linia 25. napis znak równości cudzysłów I znaki specjalne przecinek np kropka tabulator lewy ukośnik t lub nowa linijka lewy ukośnik n tekstu kropka cudzysłów. Linia 26. print otwórz nawias okrągły napis zamknij nawias okrągły. Linia 27. kratka wypisze dwukropek I znaki specjalne przecinek np kropka tabulator lub nowa linijka. Linia 28. kratka tekstu kropka.

Do sprawdzenia długości tekstu w języku Python służy funkcja len():

Linia 1. dlugosc znak równości len otwórz nawias okrągły napis zamknij nawias okrągły. Linia 2. print otwórz nawias okrągły dlugosc zamknij nawias okrągły.

Obiekt typu string w języku Python jest niezmiennąniezmiennaniezmienną sekwencją. Do poszczególnych znaków możemy się odwołać za pomocą indeksu.

1
Przykład 1

Przeanalizujmy zdanie: „Jeśli rozwiązanie jest łatwe do wyjaśnienia, to możliwe, że jest ono dobrym rozwiązaniem” (sentencja to fragment ZEN języka PythonZEN języka PythonZEN języka Python tłumaczonego na język polski). Całe zdanie możemy potraktować jako ciąg pojedynczych znaków i odwoływać się do konkretnych elementów, podając ich indeksy (indeks pierwszego znaku wynosi 0).

Linia 1. napis znak równości cudzysłów Jeśli rozwiązanie jest łatwe do wyjaśnienia przecinek to możliwe przecinek że jest ono dobrym rozwiązaniem kropka cudzysłów. Linia 3. print otwórz nawias okrągły napis otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 4. kratka wypisze dwukropek J. Linia 6. print otwórz nawias okrągły napis otwórz nawias kwadratowy 15 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 7. kratka wypisze dwukropek i. Linia 9. print otwórz nawias okrągły napis otwórz nawias kwadratowy 18 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 10. kratka wypisze dwukropek j.

Możemy również odwołać się do części napisu, używając wyrażeń indeksującychwyrażenie indeksującewyrażeń indeksujących. Pozwala to tworzyć kod działający podobnie jak pętla, ale łatwiejszy do zapisania.

Oto zapis z wykorzystaniem pętli:

Linia 1. for i in range otwórz nawias okrągły 18 przecinek 29 zamknij nawias okrągły dwukropek. Linia 2. kratka end minus ciąg znaków kończący dane wywołanie print otwórz nawias okrągły zamknij nawias okrągły przecinek. Linia 3. kratka domyślnie znak nowej linii apostrof lewy ukośnik n apostrof kropka. Linia 4. print otwórz nawias okrągły napis otwórz nawias kwadratowy i zamknij nawias kwadratowy przecinek end znak równości apostrof apostrof zamknij nawias okrągły. Linia 5. kratka wypisze dwukropek jest łatwe.

Identyczny efekt uzyskamy z użyciem wyrażenia indeksującego:

Linia 1. print otwórz nawias okrągły napis otwórz nawias kwadratowy 18 dwukropek 29 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 2. kratka wypisze dwukropek jest łatwe.

Inne przykłady użycia wyrażeń indeksujących:

Linia 1. napis znak równości cudzysłów Ala ma kota cudzysłów. Linia 3. kratka pominięcie pierwszego indeksu sprawia przecinek że wycinanie zaczynamy od pierwszego elementu. Linia 4. imie znak równości napis otwórz nawias kwadratowy dwukropek 3 zamknij nawias kwadratowy. Linia 5. kratka wypisze dwukropek Ala. Linia 6. print otwórz nawias okrągły imie zamknij nawias okrągły. Linia 8. kratka pominięcie drugiego indeksu sprawia przecinek że wycinanie kończymy na ostatnim elemencie. Linia 9. zwierze znak równości napis otwórz nawias kwadratowy 7 dwukropek zamknij nawias kwadratowy. Linia 10. kratka wypisze dwukropek kota. Linia 11. print otwórz nawias okrągły zwierze zamknij nawias okrągły. Linia 13. czasownik znak równości napis otwórz nawias kwadratowy 4 dwukropek 6 zamknij nawias kwadratowy. Linia 14. kratka wypisze dwukropek ma. Linia 15. print otwórz nawias okrągły czasownik zamknij nawias okrągły.
Ważne!

W ciągach znaków można odwoływać się do konkretnego elementu (podobnie jak w przypadku listy), ale nie da się zmieniać poszczególnych elementów – język Python zgłosi w takim przypadku błąd: TypeError: 'str' object does not support item assignment.

Oto przykład błędnego polecenia:

Linia 1. napis znak równości cudzysłów Python jest ciekawy cudzysłów. Linia 3. napis otwórz nawias kwadratowy 4 zamknij nawias kwadratowy znak równości cudzysłów X cudzysłów. Linia 4. kratka zgłosi błąd dwukropek. Linia 5. kratka Traceback otwórz nawias okrągły most recent call last zamknij nawias okrągły dwukropek. Linia 6. kratka File cudzysłów otwórz nawias ostrokątny pyshell kratka 7 zamknij nawias ostrokątny cudzysłów przecinek line 1 przecinek in otwórz nawias ostrokątny module zamknij nawias ostrokątny. Linia 7. kratka napis otwórz nawias kwadratowy 4 zamknij nawias kwadratowy znak równości cudzysłów X cudzysłów. Linia 8. kratka TypeError dwukropek apostrof str apostrof object does not support item assignment.
Dla zainteresowanych

Stosowanie wyrażeń indeksujących należy do tzw. pythonizmówpythonizmpythonizmów. Warto je znać – pozwalają one uprościć tworzony program. Umiejętność działań na wycinkach (slicerach) przydaje się podczas operacji na tekstach. Wyrażenia umożliwiają zapisanie wspak podanego ciągu znaków. Przedstawiona poniżej instrukcja print oznacza: odczytuj napis od znaku ostatniego do pierwszego (czytaj cały tekst, zmniejszając indeksy, czyli od końca do początku).

Linia 1. napis znak równości cudzysłów Ala ma kota przecinek a Python węża cudzysłów. Linia 2. print otwórz nawias okrągły napis otwórz nawias kwadratowy dwukropek dwukropek minus 1 zamknij nawias kwadratowy zamknij nawias okrągły. Linia 3. kratka wypisze dwukropek ażęw nohtyP a przecinek atok am alA.

Działania na ciągach znaków: dodawanie i mnożenie

Oczywiście nie da się mnożyć tekstu przez tekst (przykładowo: 'Adam' * 'Linux'). Możliwe jest natomiast mnożenie obiektów klasy str przez liczby typu int oraz dodawanie napisów do siebie.

Operacja

Dozwolona

Przykład

Dodawanie str + str

TAK

'Adam ' + 'programista.' ->
'Adam programista.'

Mnożenie str * str

NIE

'Adam' * 'Python' ->
TypeError

Mnożenie str * int

TAK

4 * 'Python-' ->
'PythonPythonPythonPython-'

Przykład operacji dodawania:

Linia 1. napis podkreślnik 1 znak równości apostrof Adam apostrof. Linia 2. napis podkreślnik 2 znak równości apostrof to programista apostrof. Linia 3. napis podkreślnik 3 znak równości apostrof Pythona apostrof. Linia 4. napis znak równości napis podkreślnik 1 plus apostrof apostrof plus napis podkreślnik 2 plus apostrof apostrof plus napis podkreślnik 3. Linia 5. print otwórz nawias okrągły napis zamknij nawias okrągły. Linia 6. kratka wypisze dwukropek Adam to programista Pythona.

Operacja mnożenia:

Linia 1. napis znak równości 4 asterysk apostrof Python minus apostrof. Linia 2. print otwórz nawias okrągły napis zamknij nawias okrągły. Linia 3. kratka wypisze dwukropek Python‑Python‑Python‑Python minus.
1
Polecenie 1

Przygotujmy funkcję, która będzie tworzyła prostokąt o podanych wymiarach, wypełniony znakami – przykładowo: prostokat(x, y, znak).

Specyfikacja problemu:

Dane:

  • x – szerokość tworzonego prostokąta; liczba naturalna dodatnia

  • y – wysokość tworzonego prostokąta; liczba naturalna dodatnia

  • znak – litera, z której będzie tworzony prostokąt; znak

Wynik:

Program wypisuje stworzony ze znaków znak prostokąt o zadanych wymiarach.

Dla zainteresowanych

W klasie str dostępna jest metoda center(). Pozwala ona osiągnąć interesujące efekty podczas pracy z tekstami. Przykładowo: polecenie ' + '.center(15,'$') da wynik:  '$$$$$$ + $$$$$$' – ustawi dany ciąg znaków na środku, tak aby łączna długość wynikowego ciągu znaków wynosiła 15, a puste miejsca uzupełni znakiem $.

Wszystkie metody klasy str możemy poznać, wydając polecenie dir():

Linia 1. dir otwórz nawias okrągły apostrof tekst apostrof zamknij nawias okrągły. Linia 2. otwórz nawias kwadratowy apostrof podkreślnik podkreślnik add podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik class podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik contains podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik delattr podkreślnik podkreślnik apostrof przecinek. Linia 3. apostrof podkreślnik podkreślnik dir podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik doc podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik eq podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik format podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik ge podkreślnik podkreślnik apostrof przecinek. Linia 4. apostrof podkreślnik podkreślnik getattribute podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik getitem podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik getnewargs podkreślnik podkreślnik apostrof przecinek. Linia 5. apostrof podkreślnik podkreślnik gt podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik hash podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik init podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik init podkreślnik subclass podkreślnik podkreślnik apostrof przecinek. Linia 6. apostrof podkreślnik podkreślnik iter podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik le podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik len podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik lt podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik mod podkreślnik podkreślnik apostrof przecinek. Linia 7. apostrof podkreślnik podkreślnik mul podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik ne podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik new podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik reduce podkreślnik podkreślnik apostrof przecinek. Linia 8. apostrof podkreślnik podkreślnik reduce podkreślnik ex podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik repr podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik rmod podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik rmul podkreślnik podkreślnik apostrof przecinek. Linia 9. apostrof podkreślnik podkreślnik setattr podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik sizeof podkreślnik podkreślnik apostrof przecinek apostrof podkreślnik podkreślnik str podkreślnik podkreślnik apostrof przecinek. Linia 10. apostrof podkreślnik podkreślnik subclasshook podkreślnik podkreślnik apostrof przecinek. Linia 11. apostrof capitalize apostrof przecinek apostrof casefold apostrof przecinek apostrof center apostrof przecinek apostrof count apostrof przecinek apostrof encode apostrof przecinek. Linia 12. apostrof endswith apostrof przecinek apostrof expandtabs apostrof przecinek apostrof find apostrof przecinek apostrof format apostrof przecinek apostrof format podkreślnik map apostrof przecinek. Linia 13. apostrof index apostrof przecinek apostrof isalnum apostrof przecinek apostrof isalpha apostrof przecinek apostrof isdecimal apostrof przecinek apostrof isdigit apostrof przecinek. Linia 14. apostrof isidentifier apostrof przecinek apostrof islower apostrof przecinek apostrof isnumeric apostrof przecinek apostrof isprintable apostrof przecinek. Linia 15. apostrof isspace apostrof przecinek apostrof istitle apostrof przecinek apostrof isupper apostrof przecinek apostrof join apostrof przecinek apostrof ljust apostrof przecinek apostrof lower apostrof przecinek. Linia 16. apostrof lstrip apostrof przecinek apostrof maketrans apostrof przecinek apostrof partition apostrof przecinek apostrof replace apostrof przecinek apostrof rfind apostrof przecinek. Linia 17. apostrof rindex apostrof przecinek apostrof rjust apostrof przecinek apostrof rpartition apostrof przecinek apostrof rsplit apostrof przecinek apostrof rstrip apostrof przecinek. Linia 18. apostrof split apostrof przecinek apostrof splitlines apostrof przecinek apostrof startswith apostrof przecinek apostrof strip apostrof przecinek apostrof swapcase apostrof przecinek. Linia 19. apostrof title apostrof przecinek apostrof translate apostrof przecinek apostrof upper apostrof przecinek apostrof zfill apostrof zamknij nawias kwadratowy.

Proste kodowanie tekstu

Przejdźmy do kodowania. Możemy do tego celu wykorzystywać poznane właśnie elementy języka Python. Napiszemy dwie funkcje - pierwsza zamieni podany jej tekst w ciąg kodów ASCII, odpowiadających poszczególnym znakom, a druga wykona operację odwrotną, czyli zamieni ciąg kodów ASCII w tekst składający się ze znaków odpowiadających kolejnym kodom.

Przykładową implementację i efekty działania funkcji prezentuje następujący kod:

Linia 1. def zakoduj podkreślnik napis otwórz nawias okrągły tekst zamknij nawias okrągły dwukropek. Linia 2. kratka tekst minus zawiera aktualnie kodowany napis średnik. Linia 3. kratka kod minus przechowuje listę z kodami ASCII przecinek. Linia 4. kratka odpowiadającą aktualnie kodowanemu tekstowi kropka. Linia 5. kod znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 6. for litera in tekst dwukropek. Linia 7. kod kropka append otwórz nawias okrągły ord otwórz nawias okrągły litera zamknij nawias okrągły zamknij nawias okrągły. Linia 9. return kod. Linia 11. def dekoduj podkreślnik napis otwórz nawias okrągły kodowany zamknij nawias okrągły dwukropek. Linia 12. kratka kodowany minus lista z kodami ASCII. Linia 13. kratka znaków zakodowanego słowa średnik. Linia 14. kratka napis minus zawiera odkodowane znaki odpowiadające kolejnym. Linia 15. kratka kodom ASCII przecinek z prefiksem apostrof Odkodowany dwukropek apostrof kropka. Linia 16. napis znak równości apostrof Odkodowany dwukropek apostrof. Linia 17. for znak in kodowany dwukropek. Linia 18. napis plus znak równości chr otwórz nawias okrągły znak zamknij nawias okrągły. Linia 20. return napis. Linia 23. zakodowany znak równości zakoduj podkreślnik napis otwórz nawias okrągły apostrof Adam minus zamknij nawias ostrokątny programista apostrof zamknij nawias okrągły. Linia 24. print otwórz nawias okrągły zakodowany zamknij nawias okrągły. Linia 25. kratka wypisze dwukropek otwórz nawias kwadratowy 65 przecinek 100 przecinek 97 przecinek 109 przecinek 32 przecinek 45 przecinek 62 przecinek 32 przecinek 112 przecinek 114 przecinek 111 przecinek. Linia 26. kratka 103 przecinek 114 przecinek 97 przecinek 109 przecinek 105 przecinek 115 przecinek 116 przecinek 97 zamknij nawias kwadratowy. Linia 28. tekst znak równości dekoduj podkreślnik napis otwórz nawias okrągły zakodowany zamknij nawias okrągły. Linia 29. print otwórz nawias okrągły tekst zamknij nawias okrągły. Linia 30. kratka wypisze dwukropek Odkodowany dwukropek Adam minus zamknij nawias ostrokątny programista.
Polecenie 2

Napisz program odkodowujący tajny tekst zapisany za pomocą kodów ASCII. Dzięki temu odczytasz ciekawostkę (m.in. na temat oprogramowania FLOSSFLOSSoprogramowania FLOSS).

Przetestuj działanie programu dla tablicy:

Linia 1. tajny znak równości otwórz nawias kwadratowy 76 przecinek 105 przecinek 110 przecinek 117 przecinek 120 przecinek 32 przecinek 116 przecinek 111 przecinek 32 przecinek 99 przecinek 105 przecinek. Linia 2. 101 przecinek 107 przecinek 97 przecinek 119 przecinek 121 przecinek 32 przecinek 115 przecinek 121 przecinek 115 przecinek 116 przecinek. Linia 3. 101 przecinek 109 przecinek 32 przecinek 111 przecinek 112 przecinek 101 przecinek 114 przecinek 97 przecinek 99 przecinek 121 przecinek. Linia 4. 106 przecinek 110 przecinek 121 przecinek 32 przecinek 45 przecinek 32 przecinek 70 przecinek 76 przecinek 79 przecinek 83 przecinek 83 zamknij nawias kwadratowy.

Specyfikacja problemu:

Dane:

  • tajny – wiadomość zakodowana za pomocą kodów ASCII; tablica liczb naturalnych

Wynik:

Program wypisuje odkodowaną wiadomość.

Operacje na dłuższych tekstach

Wykonajmy kilka operacji na fragmencie dokumentu zawierającego wiele zdań. Jako przykład posłuży nam zbiór felietonów Tadeusza Boya-Żeleńskiego pt. Dziewice konsystorskie (dostępny w domenie publicznej).

Oto wybrany fragment:

Linia 1. Co innego jest propagować coś przecinek a co innego widzieć przecinek że coś jest faktem przecinek że coś się dzieje i jak się dzieje średnik widzieć nierówność przecinek widzieć krzywdę przecinek widzieć nieszczęście przecinek widzieć fałsz przecinek nieuczciwość przecinek widzieć bezduszność przecinek zaciekłość i ślepotę tych przecinek którzy powinni mieć cudzysłów oczy ku patrzeniu i uszy ku słyszeniu cudzysłów kropka. Linia 2. Mówić o tym minus w potrzebie nawet krzyczeć minus jest obowiązkiem pisarza kropka Bo literatura jest sejmem narodu średnik ważniejszym może od tego przecinek który tam w zacisznym półkolu wymyśla sobie wzajem przy ulicy Wiejskiej kropka Przez nią uświadamiają się potrzeby i zjawiska chwili średnik przez nią przychodzą do głosu żądania i krzywdy ludzkie kropka Pisarz przecinek który by wciąż nie przykładał ucha do ziemi przecinek aby wyczuwać jej tajemne drżenie przecinek aby nadsłuchiwać tętentu przyszłości przecinek źle spełniałby swoje zadanie kropka I nie powinien w żadnym wypadku liczyć się z głosami oburzeń — choćby skądinąd szanownymi — nawet kiedy chodzi o tak zwaną asterysk moralność asterysk przecinek o tak zwany asterysk porządek społeczny asterysk kropka Popatrzmy na historię instytucji i wierzeń ludzkich kropka Trzeba by chyba być ślepym lub kłamcą przecinek aby nie uznać przecinek że porządek społeczny przecinek że cudzysłów moralność cudzysłów przecinek to coś przecinek co zmienia się i musi zmieniać ciągle średnik coś przecinek co przechodzi ciągłą ewolucję kropka Dzisiejszy bunt jest jutrzejszym prawem średnik dzisiejsze bluźnierstwo jutrzejszym komunałem kropka W imię porządku społecznego palono na stosie ludzi przecinek których dziś wysyła się jako media na kongresy metapsychiczne kropka Mordowano się w imię Boga o wierzenia przecinek które zgodnie dziś żyją obok siebie kropka Był czas przecinek gdy torturowano obwinionych przecinek aby wydobyć z nich zeznania kropka Był czas przecinek gdy trzymano obłąkanych w lochu i w kajdanach kropka Był czas więzienia za długi przecinek kiedy niewypłacalnego dłużnika więziono dożywotnio i żywiono na koszt państwa kropka Wszystko to przecinek i wiele innych równie pięknych rzeczy było asterysk porządkiem społecznym asterysk średnik ktokolwiek przeciw nim działał przecinek był wrogiem porządku społecznego kropka Czy wyobraża kto sobie przecinek że wiele z dzisiejszych cudzysłów porządków cudzysłów nie będzie się przedstawiać naszym wnukom tak samo przecinek jak nam tamte dziwolągi średnik że nie będą się nam dziwili przecinek że nie będą się litowali nad nami znak zapytania.

W kolejnych e‑materiałach dowiesz się, jak zapisać i wczytać tekst z pliku – teraz natomiast zapiszemy cały tekst w jednej zmiennej, z użyciem notacji pozwalającej na definiowanie napisów wielolinijkowych:

Linia 1. dane znak równości cudzysłów cudzysłów cudzysłów Co innego jest propagować coś przecinek a co innego widzieć przecinek że coś jest faktem przecinek że coś się dzieje i jak się dzieje średnik widzieć nierówność przecinek widzieć krzywdę przecinek widzieć nieszczęście przecinek widzieć fałsz przecinek nieuczciwość przecinek widzieć bezduszność przecinek zaciekłość i ślepotę tych przecinek którzy powinni mieć cudzysłów oczy ku patrzeniu i uszy ku słyszeniu cudzysłów kropka. Linia 2. Mówić o tym minus w potrzebie nawet krzyczeć minus jest obowiązkiem pisarza kropka Bo literatura jest sejmem narodu średnik ważniejszym może od tego przecinek który tam w zacisznym półkolu wymyśla sobie wzajem przy ulicy Wiejskiej kropka Przez nią uświadamiają się potrzeby i zjawiska chwili średnik przez nią przychodzą do głosu żądania i krzywdy ludzkie kropka Pisarz przecinek który by wciąż nie przykładał ucha do ziemi przecinek aby wyczuwać jej tajemne drżenie przecinek aby nadsłuchiwać tętentu przyszłości przecinek źle spełniałby swoje zadanie kropka I nie powinien w żadnym wypadku liczyć się z głosami oburzeń — choćby skądinąd szanownymi — nawet kiedy chodzi o tak zwaną asterysk moralność asterysk przecinek o tak zwany asterysk porządek społeczny asterysk kropka Popatrzmy na historię instytucji i wierzeń ludzkich kropka Trzeba by chyba być ślepym lub kłamcą przecinek aby nie uznać przecinek że porządek społeczny przecinek że cudzysłów moralność cudzysłów przecinek to coś przecinek co zmienia się i musi zmieniać ciągle średnik coś przecinek co przechodzi ciągłą ewolucję kropka Dzisiejszy bunt jest jutrzejszym prawem średnik dzisiejsze bluźnierstwo jutrzejszym komunałem kropka W imię porządku społecznego palono na stosie ludzi przecinek których dziś wysyła się jako media na kongresy metapsychiczne kropka Mordowano się w imię Boga o wierzenia przecinek które zgodnie dziś żyją obok siebie kropka Był czas przecinek gdy torturowano obwinionych przecinek aby wydobyć z nich zeznania kropka Był czas przecinek gdy trzymano obłąkanych w lochu i w kajdanach kropka Był czas więzienia za długi przecinek kiedy niewypłacalnego dłużnika więziono dożywotnio i żywiono na koszt państwa kropka Wszystko to przecinek i wiele innych równie pięknych rzeczy było asterysk porządkiem społecznym asterysk średnik ktokolwiek przeciw nim działał przecinek był wrogiem porządku społecznego kropka Czy wyobraża kto sobie przecinek że wiele z dzisiejszych cudzysłów porządków cudzysłów nie będzie się przedstawiać naszym wnukom tak samo przecinek jak nam tamte dziwolągi średnik że nie będą się nam dziwili przecinek że nie będą się litowali nad nami znak zapytania cudzysłów cudzysłów cudzysłów.

Ujęcie tekstu w znaki trzech cudzysłowów (lub trzech apostrofów) powoduje, że wszystkie znaki – włącznie ze znakami nowej linii – zostają zapisane do zmiennej dane. Możemy podzielić tekst na listę za pomocą metody split(). Konwertujemy wtedy tekst na listę, której elementami są łańcuchy znaków zawierające poszczególne linie.

Linia 1. lista podkreślnik z podkreślnik danymi znak równości dane kropka split otwórz nawias okrągły cudzysłów lewy ukośnik n cudzysłów zamknij nawias okrągły. Linia 3. for i in range otwórz nawias okrągły len otwórz nawias okrągły lista podkreślnik z podkreślnik danymi zamknij nawias okrągły zamknij nawias okrągły dwukropek. Linia 4. print otwórz nawias okrągły lista podkreślnik z podkreślnik danymi otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły.

Funkcje count()find()

W rozwiązaniu kolejnego problemu użyjemy dwóch ważnych funkcji: count()find().

Pierwsza z nich: count() służy do zliczania wystąpień danego wzorca w tekście. Jeżeli wzorzec nie występuje, zwraca ona wartość 0.

Funkcja find() wyszukuje wzorzec w tekście i zwraca pozycję jego pierwszego wystąpienia. Funkcja zwraca wartość -1, jeżeli wzorzec nie występuje w tekście.

Polecenie 3

Znajdźmy odpowiedzi na następujące pytania:

  • Z ilu zdań składa się tekst? Dowiemy się tego, licząc kropki, wykrzykniki i znaki zapytania; wykorzystamy metodę count().

  • Ile spacji zawiera tekst? Aby to sprawdzić, ponownie użyjemy metody count().

  • Ile słów „się” znajdziemy w tekście? Tu znów sięgniemy po metodę count().

  • Na której pozycji zapisano pierwsze słowo „się”? By się tego dowiedzieć, skorzystamy z metody find().

Polecenie 4

Przykładowy tekst należy przekształcić w:

  • ciąg złożony z co piątego znaku, zaczynając od pierwszego znaku w tekście;

  • tekst, w którym słowa „się” zostaną zamienione na „XXX”, a „kiedy” na „ZZZZ”.

ASCII ART – sztuka zapomniana

Operując na ciągach znaków, można tworzyć oryginalne napisy. Służy do tego biblioteka ARTARTART, która jest projektem typu Open Source. Kod biblioteki znajdziemy w serwisie GitHub.

Funkcja text2art pozwala na takie przetworzenie łańcucha znaków, że zostaje on wyświetlony w formie graficznej za pomocą innego łańcucha znaków.

Funkcja art natomiast wyświetla graficzną reprezentację łańcucha znaków. Oto przykłady zastosowania:

Linia 1. from art import asterysk. Linia 3. print otwórz nawias okrągły text2art otwórz nawias okrągły cudzysłów art cudzysłów przecinek cudzysłów block cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 4. kratka wypisze dwukropek. Linia 5. kratka kropka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus kropka kropka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus kropka kropka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus kropka. Linia 6. kratka kreska pionowa kropka minus minus minus minus minus minus minus minus minus minus minus minus minus minus kropka kreska pionowa kreska pionowa kropka minus minus minus minus minus minus minus minus minus minus minus minus minus minus kropka kreska pionowa kreska pionowa kropka minus minus minus minus minus minus minus minus minus minus minus minus minus minus kropka kreska pionowa. Linia 7. kratka kreska pionowa kreska pionowa podkreślnik podkreślnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa. Linia 8. kratka kreska pionowa kreska pionowa prawy ukośnik lewy ukośnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik lewy ukośnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik kreska pionowa kreska pionowa kreska pionowa. Linia 9. kratka kreska pionowa kreska pionowa prawy ukośnik prawy ukośnik lewy ukośnik lewy ukośnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik zamknij nawias okrągły kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik prawy ukośnik kreska pionowa kreska pionowa lewy ukośnik podkreślnik kreska pionowa kreska pionowa kreska pionowa. Linia 10. kratka kreska pionowa kreska pionowa prawy ukośnik podkreślnik podkreślnik podkreślnik podkreślnik lewy ukośnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik prawy ukośnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa. Linia 11. kratka kreska pionowa kreska pionowa podkreślnik prawy ukośnik prawy ukośnik lewy ukośnik lewy ukośnik podkreślnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik kreska pionowa kreska pionowa lewy ukośnik lewy ukośnik podkreślnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik kreska pionowa kreska pionowa podkreślnik kreska pionowa kreska pionowa. Linia 12. kratka kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa podkreślnik podkreślnik podkreślnik podkreślnik podkreślnik kreska pionowa kreska pionowa kreska pionowa. Linia 13. kratka kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa kreska pionowa. Linia 14. kratka kreska pionowa apostrof minus minus minus minus minus minus minus minus minus minus minus minus minus minus apostrof kreska pionowa kreska pionowa apostrof minus minus minus minus minus minus minus minus minus minus minus minus minus minus apostrof kreska pionowa kreska pionowa apostrof minus minus minus minus minus minus minus minus minus minus minus minus minus minus apostrof kreska pionowa. Linia 15. kratka apostrof minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus apostrof apostrof minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus apostrof apostrof minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus apostrof. Linia 17. print otwórz nawias okrągły art otwórz nawias okrągły cudzysłów men cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 18. kratka wypisze dwukropek. Linia 19. kratka ب podkreślnik ب. Linia 21. print otwórz nawias okrągły art otwórz nawias okrągły cudzysłów woman cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 22. kratka wypisze dwukropek. Linia 23. kratka ▓⚗ podkreślnik ⚗▓. Linia 25. print otwórz nawias okrągły art otwórz nawias okrągły cudzysłów car cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 26. kratka wypisze dwukropek. Linia 27. kratka `o kratka kratka o zamknij nawias ostrokątny.
Dla zainteresowanych

W roku 2009 Paulina Piotrowska, studentka Akademii Sztuk Pięknych w Gdańsku, napisała pracę magisterską zatytułowaną „ASCII ART” (nr albumu 4836).

We wstępie czytamy:

Paulina Piotrowska ASCII ART

ASCII Art, według mnie pierwsza i jedyna najbardziej skomputeryzowana forma przedstawienia grafiki w formie cyfrowej. Tworzona za pomocą pierwotnego narzędzia, jakiego używa współczesny grafik komputerowy – klawiatury. Dodatkowo tworzona w najbardziej podstawowym programie, którego używają programiści – edytorze tekstu.

paulina Źródło: Paulina Piotrowska, ASCII ART, 2009, dostępny w internecie: archive.org [dostęp 7.04.2021].

Już wiesz

Podsumujmy najważniejsze elementy tego e‑materiału:

  • Ciągi znaków w języku Python są obiektami klasy str, a składają się ze znaków ASCII.

  • Ciągi znaków są niezmiennymi sekwencjami.

  • Ciągi znaków możemy przetwarzać, stosując metody takie jak split(), count() czy  find().

Słownik

ART
ART

moduł służący do graficznego przedstawienia napisu złożonego ze znaków ASCII; należy go zainstalować, korzystając z komendy pip install art

ASCII
ASCII

(ang. American Standard Code for Information Interchange) system kodowania znaków, pierwotnie oparty na 7 bitach (współcześnie rozszerzony)

FLOSS
FLOSS

(ang. Free/Libre and Open Source Software – wolne oprogramowanie i otwarty kod źródłowy) programy, które są dostępne dla każdego zgodnie z zasadami przedstawionymi na stronie projektu GNU

niezmienna
niezmienna

(ang. immutable) sekwencja, której pojedynczych elementów nie da się zmodyfikować; w celu dokonania zmiany konieczne jest zastąpienie całego obiektu nowym (niezbędna jest wymiana całego ciągu, aby zastąpić w nim pojedynczy znak)

pythonizm
pythonizm

specyficzna dla języka Python konstrukcja programistyczna, pozwalająca na tworzenie krótkiego kodu

wyrażenie indeksujące
wyrażenie indeksujące

(ang. slice) zawarte w nawiasach kwadratowych wyrażenie, które pozwala określić wybraną część sekwencji; może mieć ono postać [a:b] lub [a] lub podobną; nazywane także wycinkiem

ZEN języka Python
ZEN języka Python

manifest ZEN of Python by Tim Peters - dokument składający się z 19 punktów, które zostały napisane i opublikowane na liście dyskusyjnej języka Python1999 roku; treść manifestu można przeczytać, wydając polecenie import this w środowisku IDLE