7A: Łańcuchy

Lekcja 7 składa się z trzech części A, B i C, które można wykonać w dowolnej kolejności.

Do tej pory używaliśmy łańcuchów (elementów typu str) tylko w podstawowym zakresie. W tej lekcji pokazujemy, jak manipulować łańcuchami: jak je dzielić, łączyć i jak wyświetlać pojedyncze znaki tworzące łańcuch.

Co to jest łańcuch?

Wszystkie dane w komputerze przechowywane są ostatecznie w postaci sekwencji zer i jedynek. Dotyczy to tekstów, cyfrowych książek, obrazów, piosenek, filmów wideo i "plików wykonywalnych", takich jak gry i aplikacje. Łańcuchy, przykładowo dane tekstowe, są przechowywane w następujący sposób:

  • łańcuch to ciąg znaków (n.p., łańcuch "Hello, World!" zawiera 13 znaków, w tym litery takie jak "H", "e" i interpunkcyjne takie jak " ", "!"
  • w rzeczywistości każdy znak jest reprezentowany przez liczbę (n.p., "H" jest reprezentowane przez liczbę 40; to jest jego wartość w kodzie ASCII/Unicode)

(Liczby są przechowywane w formacie binarnym 0-1.)

Przetwarzanie łańcuchów jako ciągu znaków: S[]

Aby przetwarzać łańcuch, musimy mieć dostęp do pojedynczych znaków tworzących ten łańcuch. W Pythonie jest to wykonywane w następujący sposób: dla łańcucha S i dla całkowitego index, zapis

S[index]
zwraca znak z pozycji index z łańcucha S. Zgodnie z konwencją, pierwszy element łańcucha ma index 0: tak więc S[0] to pierwszy znak, S[1] to drugi znak itd. W "Hello, World" lista znaków to:

Index: 0  1  2  3  4  5  6  7  8  9 10 11 12
Char.: H  e  l  l  o  ,     W  o  r  l  d  !
Zauważ, że znak, którego index wynosi 6 to spacja.

W wielu językach programowania istnieje osobny typ danych dla znaków. W Pythonie, znaki są łańcuchami o długości 1, więc ich typ to str.

Sprawdzanie liczby znaków w łańcuchu: len

W Pythonie, aby sprawdzić liczbę znaków w łańcuchu, używamy funkcji len. Na przykład len ("Hello, World!") wynosi 13.

Zadanie wielokrotnego wyboru: Ostatni znak
Jakiego wyrażenia należy użyć dla ustalenia ostatniego znaku w łańcuchu S?
Poprawnie! Chociaż len(S) podaje liczbę znaków w łańcuchu, ale rozpoczyna zliczanie od indeksu 0, więc ostatni znak ma indeks len(S)-1.

Oto przykład użycia len i [], dwóch narzędzi, które właśnie zostały wprowadzone.

Przykład: Długość łańcucha i znaki

Cięcie łańcuchów: S[:]

Wycięcie części łańcucha daje podłańcuch. Na przykład łańcuchy "eat" i "ted" to podłańcuchy "repeated". W Pythonie, aby wyodrębnić podłańcuch, używamy następującej składni

S[firstIndex:tailIndex]
do uzyskania podłańcucha rozpoczynającego się od indeksu firstIndex i kończącego się na tailIndex-1. Sprawdź efekt działania następującego kodu.
Przykład: Podłańcuchy

Zauważ, że przy otrzymywaniu podłańcucha, firstIndex jest częścią podłańcucha, natomiast tailIndex już nie. Zapominanie o tym, jest częstym źródłem błędów. Ma to jednak dobre strony. Na przykład, ze względu na to ustalenie, długość podłańcucha S[i:j] wynosi zawsze j-i. Konwencja ta jest często przedstawiana jako linijka:

Zadanie na kodowanie : Golenie Łańcucha
Napisz program, który z użyciem input() odczytuje łańcuch i wysyła ten sam łańcuch, ale usuwając pierwszy i ostatni znak. (Można założyć, że ciąg wejściowy ma długość co najmniej 2.) Na przykład, gdy na wejściu mamy Fairy, prawidłowy program wydrukuje air.
Możesz wprowadzić dane dla programu w poniższym polu.

Sklejanie łańcuchów: +

Wszyscy wiemy, że 1 + 2 = 3. Dla ciągów otrzymujemy następujący wynik:

Przykład: Dodawanie łancuchów

Jak widać, efektem S + T jest utworzenie nowego łańcucha, który zaczyna się od S i po tym zaraz następuje T. Ta operacja sklejania łańcuchów nazywana jest również konkatenacją.

Zadanie na kodowanie : Głowy i Ogony
Napisz program, który, używając input(), czyta łańcuch i wyprowadza ten sam łańcuch, ale z dwoma zamienionymi znakami: pierwszy z ostatni znakiem. (Możesz założyć, że łańcuch wejściowy ma długość co najmniej 2.) Na przykład, gdy na wejściu mamy Fairy prawidłowy program wydrukuje yairF. Wskazówka: jako części odpowiedzi użyj swojego rozwiązania z poprzedniego programu.
Możesz wprowadzić dane dla programu w poniższym polu.

Jeśli chcesz złączyć dwie liczby, musisz je najpierw przekonwertować na str. W przeciwnym razie dostaniesz, w zależności od kolejności prób, jeden z dwóch błędów. Uruchom ten program, aby zobaczyć jakie błędy mogą wystąpić.
Przykład
Zmień kolejność linii, aby zobaczyć drugi błąd łączenia.
  • print("high " + 5)
  • print(110 + " percent")
Oto poprawny przykład: funkcja str() przed połączeniem konwertuje liczbę na łańcuch .
Przykład
Konwertowanie liczby na łańcuch z użyciem str()

Jak wspomnieliśmy w lekcji 4, łańcuchy i liczby całkowite można mnożyć: S * n jest skróconym zapisem dla S + S + ... + S.

Przykład
Mnożenie łańcucha

Kody Znaków: ord, chr

Jak wspomniano we wprowadzeniu do tej lekcji, twój komputer faktycznie reprezentuje każdy znak w postaci liczby. Jaka liczba odpowiada określonemu znakowi? Ogólnie rzecz biorąc, może to zależeć od tego, co koduje twój komputer, ale prawie wszystkie nowoczesne komputery mają standardowy zestaw znaków dla liczb między 32 a 255. Oto lista znaków z liczbami między 32 a 127:

ord: 32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47
chr:      !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
ord: 48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63
chr:  0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
ord: 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79
chr:  @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
ord: 80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95
chr:  P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
ord: 96  97  98  99  100 101 102 103 104 105 106 107 108 109 110 111
chr:  `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
chr:  p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~
Później, w lekcji 8, napiszesz program do wygenerowania tej tabeli.
Nie jest przydatne zapamiętywanie całej tabeli, ale warto pamiętać o pewnych faktach:

  • małe litery a, b, c, ..., z mają kolejne kody
  • wielkie litery A, B, C, ..., Z mają kolejne kody
  • cyfry 0, 1, 2, ..., 9 mają kolejne kody

Znak 32 to spacja, a znak 127 (to Delete) to jeden z kilku specjalnych znaków "kontrolnych". Niektóre przydatne znaki kontrolne to 9, czyli Tab, oraz 10 i 13, które są używane dla newlines.

W Pythonie można konwertować znak na odpowiedni kod liczbowy używając funkcji ord. Funkcja chr daje efekt odwrotny: przyjmuje liczbę jako dane wejściowe i zwraca znak o tym kodzie.

Przykład
Przyłady z ord i chr

Zadanie na kodowanie : Następna Litera
Napisz program, który przyjmuje na wejściu znak (łańcuch o długości 1), o którym należy założyć, że jest to wielka litera; wynikiem powinna być następna litera alfabetu. Jeśli wejście jest "Z", to wyjście powinno być "A". (Musisz użyć instrukcji if. Aby uzyskać kolejną wskazówkę kliknij tutaj.)
Możesz wprowadzić dane dla programu w poniższym polu.

Niektóre systemy obsługują tylko drukowane znaki między 32 a 127; inne do 255 lub 65535; w Unicode są setki tysięcy znaków. Więcej na temat historii tego zagadnienia możesz przeczytać tutuj lub tutaj.

Oto dwa dodatkowe ćwiczenia, które kończą tą lekcję.

Zadanie na kodowanie : Świńska Łacina
Świńska łacina to nonsensowny język. Aby przekształcić słowo z języka angielskiego na świńską łacinę, przesuń pierwszą literę na koniec i dodaj "ay". Na przykład monkey w świńskiej łacinie staje się onkeymay a word staje się ordway. Napisz program, który pobiera słowo jako dane wejściowe i przekłada go na świńską łacinę. (W rzeczywistości świńska łacina ma zasady bardziej złożone niż tu przedstawiliśmy, ale upraszczamy je do celów tego ćwiczenia).
Możesz wprowadzić dane dla programu w poniższym polu.

Zadanie na kodowanie : Nowa Gra
Nowa gra umożliwia utworzenie utworu z imienia dowolnej osoby. Posłuchaj utworu opartego na tym pomyśle, by wiedzieć jak to działa: youtube Twój program powinien pobierać imię osoby jako dane wejściowe, np. "Pearl" i wydrukować utwór taki jak poniżej:

pearl, pearl, bo-bearl
banana-fana fo-fearl
fee-fi-mo-mearl
pearl!
Zauważ, że całe imię pojawia się trzykrotnie; dodatkowo nazwa pojawia się trzy razy z pierwszą literą zastępowaną przez b, f lub m. (W rzeczywistości piosenka ma zasady bardziej złożone niż te, ale ignorujemy je do celów tego ćwiczenia.)
Możesz wprowadzić dane dla programu w poniższym polu.

Przejdź do następnej lekcji!