Stosowanie instrukcji iteracyjnej do realizacji algorytmów iteracyjnych w języku Python
Poznaliśmy już podstawowe elementy języka Python. W tym e‑materiale zapoznamy się z algorytmami iteracyjnymi. Algorytmy iteracyjne charakteryzują się tym, że rozwiązują problemy poprzez powtarzalne wykonywanie (czyli wykonywanie w pętli) określonego zestawu operacji wskazaną liczbę razy lub do momentu spełnienia określonego warunku.
Interaktywna treść merytorycznaInteraktywna treść merytoryczna
MultimediumMultimedium
Zestaw ćwiczeń interaktywnychZestaw ćwiczeń interaktywnych
SłownikSłownik
BibliografiaBibliografia
Standard kodowania ASCII w lekcji System dwójkowyStandard kodowania ASCII w lekcji System dwójkowy
Wprowadzenie do programowania w języku PythonWprowadzenie do programowania w języku Python
Stosowanie instrukcji warunkowej w języku PythonStosowanie instrukcji warunkowej w języku Python
Czym są słowniki, krotki i zbiory?Czym są słowniki, krotki i zbiory?
Przeanalizujesz i porównasz działanie pętli iteracyjnych w języku Python.
Stworzysz algorytmalgorytm obliczający sumę kontrolnąsumę kontrolną wprowadzanego z klawiatury tekstu.
Na podstawie stworzonego algorytmu zapiszesz i uruchomisz program wykorzystujący instrukcje iteracyjne.
Zapoznasz się z funkcjąfunkcją języka Python służącą zamianie znaków na kody ASCII.
Typy pętli iteracyjnych
Do realizacji algorytmu iteracyjnego stosujemy instrukcje iteracyjne zwane również instrukcjami pętli. Pętle to konstrukcje, które pozwalają wielokrotnie wykonywać ten sam blok kodu. W języku Python wyróżniamy dwie instrukcje pętli - for oraz while.
Iteracja oznacza czynność powtarzania tej samej operacji określoną liczbę razy lub aż do spełnienia określonego warunku.
Pętla for
W pętli for wykonywane są określone instrukcje dla każdego elementu w określonym zbiorze (np. liścieliście, krotce, słowniku, ciągu znakówciągu znaków).
W każdym cyklu pętli for wybrany element zestawu danych jest przetwarzany zgodnie z zadanymi instrukcjami. Pętla kontynuuje te iteracje do momentu przejścia przez wszystkie elementy zestawu danych. Pętlę for stosujemy najczęściej wtedy, gdy znana jest liczba powtórzeń instrukcji wewnątrz pętli.
Ogólna konstrukcja:
W pętli for definiujemy zmienną sterującą, której zadaniem jest przechowywanie aktualnego elementu podczas każdej iteracji. Nazwiemy ją element. Wartość zmiennej sterującej jest automatycznie aktualizowana przez pętlę i przyjmuje wartość kolejnych elementów zbioru. Zmienna dostępna jest tylko w obrębie pętli, a po jej zakończeniu przestaje istnieć.
Operator in jest operatorem przynależności i umożliwia sprawdzenie, czy dany element znajduje się w przetwarzanym zbiorze.
W naszym przypadku przetwarzany zbiór nazwiemy zbior.
Chcemy wyświetlić na ekranie wszystkie elementy listy. Aby zacząć iterowanie po jej elementach, definiujemy zmienną lista.
Zmienna sterująca użyta w pętli for może być nazwana dowolnie. W poniższym wypadku nazywamy ją liczba, ponieważ lista zawiera wyłącznie liczby.
Podczas pierwszej iteracji zmienna sterująca liczba wynosi 1 (pierwszy element na liście), podczas drugiej jest równa 5, podczas trzeciej 2, podczas czwartej 7, a podczas piątej (ostatniej) 5 (ostatni element na liście).
Zmienna sterująca często nazwana jest i.
Podczas pierwszej iteracji zmienna sterująca i jest równa , podczas drugiej Ala
, podczas trzeciej ma
13, a podczas czwartej, czyli ostatniej, "lat".
Pętlę for również wykorzystujemy, by iterować po kolejnych znakach łańcucha znaków.
Chcemy wyświetlić po kolei wszystkie litery podanego łańcucha znaków. Zmienna zdanie przechowuje łańcuch znaków. Zmienna sterująca w pętli for nazywa się znak. Pętla iteruje po każdym elemencie zmiennej zdanie.
Zmienna sterująca znak przyjmuje w każdej iteracji wartość kolejnych znaków łańcucha znaków.
W pętlach często wykorzystywana jest funkcja range() range() generującą liczby z podanego zakresu, przyjmującą. Pozwala łatwiej definiować zakres pętli oraz jej krok.
Ogólna konstrukcja:
Po operatorze in umieszczamy funkcję range() generującą liczby z podanego zakresu i przyjmującą trzy argumenty:
start– początek zakresu (domyślnie 0);stop– koniec zakresu (podana liczba jest wyłączona z zakresu);krok– wartość o jaką zwiększana jest zmienna sterująca (domyślnie 1).
Chcemy wyświetlić liczby całkowite z przedziału <0, 10>. Wykorzystujemy do tego funkcję range.
Możemy uprościć zaprezentowany kod. Parametr start w funkcji range domyślnie przyjmuje wartość 0, a krok wartość 1. Jeśli funkcja range otrzyma tylko jeden argument, zostanie uznany za parametr stop.
Zmieniony kod:
Wykorzystując zaprezentowane instrukcje, można zapisać kod, który będzie powtarzany określoną liczbę razy.
Chcemy napisać program, który wygeneruje i wyświetli tabliczkę mnożenia przez wartości z przedziału <1, 10> dla zadanej liczby. Chcemy przy tym wykorzystać funkcję range.
Zapoznaj się z kodem:
Na początku definiujemy zmienną wybrana_liczba. Następnie zapisujemy pętlę for, pamiętając o odpowiedniej zmiennej sterującej oraz zbiorze, po którym będziemy iterować.
Funkcja range otrzymuje dwa argumenty – start (równy 1, co znaczy, że iterację zaczniemy od i = 1) oraz stop (równy 11, co znaczy, że iteracja zakończy się, gdy i = 10). Krok nie jest podany, więc domyślnie zwiększa się o 1 (i + 1).
W bloku instrukcji wewnątrz pętli wykonujemy operację mnożenia. Zadanie programu to wygenerowanie tabliczki mnożenia dla zadanej liczby, czyli wynikiem powinna być wybrana_liczba pomnożona przez kolejne liczby od 1 do 10. Te wartości przyjmuje kolejno zmienna sterująca i. Co iterację wartość zmiennej sterującej i zwiększa się (jest inkrementowana) o 1.
Wewnątrz pętli korzystamy również z funkcji print() wyświetlającej odpowiedni komunikat. Zmienna wybrana_liczba nie zmienia się w kolejnych iteracjach, jednak wynik zależy od bieżącej wartości zmiennej sterującej i. Wartość zmiennej sterującej i wyświetlamy w każdej iteracji.
Program możesz przetestować w poniższej testerce.
Specyfikacja problemu:
Dane:
wybrana_liczba– liczba naturalna; liczba, dla której ma zostać wyświetlona tabliczka mnożenia (czyli kolejne wyniki mnożenia zmiennejwybrana_liczbaprzez liczby od 1 do 10)
Wynik:
tabliczka mnożenia dla liczby
wybrana_liczba
Pętla While
Pętla while wykorzystuje warunek_logiczny. Wykonuje określony blok kodu tak długo, jak długo warunek jest spełniony. Używamy jej, gdy nie wiadomo z góry, ile razy kod ma być wykonany, jednak ma być wykonywany dopóki określony warunek jest prawdziwy.
Ogólna konstrukcja:
W pętli while definiujemy warunek_logiczny, który musi zwracać wartość True albo False. Zwracana przez niego wartość jest sprawdzana przed każdą iteracją pętli. Jeśli warunek jest prawdziwy (True), blok instrukcji jest wykonywany. Jeśli warunek jest fałszywy (False), wykonanie pętli zostaje przerwane, a program kontynuuje działanie od pierwszej instrukcji umieszczonej za pętlą while.
Ponownie zapisujemy program, który wyświetli liczby od 0 do 10. Tym razem wykorzystujemy pętlę while.
Inkrementacja to operacja zwiększania wartości zmiennej. Przeciwieństwem jest dekrementacja, czyli operacja zmniejszania wartości zmiennej.
Definiujemy zmienną i, której wartość sprawdzamy w warunku logicznym. Zastępujemy nią zmienną sterującą pętli for.
Nadajemy jej wartość 0, ponieważ to początek przedziału, który ma zostać wyświetlony. W każdej iteracji pętli zmienną inkrementujemy o 1. Pętla wykonuje się dopóki wartość zmiennej i jest mniejsza niż 11.
Zmiennej i wartość początkową przypisujemy przed pętlą, aby określić na podstawie wartości zwracanej przez warunek logiczny zawarty w pętli while, czy pętla ma się wykonać.
Jeśli warunek kontynuacji pętli while zawsze zwraca wartość True, mamy do czynienia z pętlą nieskończoną.
W pętli while wykorzystać możemy instrukcję break, która służy do przerwania wykonywania pętli.
Naszym celem jest zmodyfikowanie programu zaprezentowanego w przykładzie 6, by program przerwał działanie pętli, gdy wartość zmiennej i wyniesie 5. W tym celu we wnętrzu pętli while umieszczamy instrukcję warunkową oraz instrukcję break.
Instrukcja warunkowa zawierająca instrukcję break w zaprezentowanym przykładzie znajduje się przed instrukcją zwiększającą wartość zmiennej i. Kolejność instrukcji ma znaczenie. Załóżmy, że zmieniamy kolejność instrukcji print(i) i instrukcji inkrementacji wartości zmiennej i:
Efekt działania tego programu byłby inny. W pierwszej iteracji program najpierw zwiększy wartość zmiennej i do i = 2, następnie sprawdzi czy wartość i jest równa 5. Warunek nie jest spełniony, więc program przejdzie do wykonania kolejnej instrukcji, czyli wypisze wartość zmiennej i (czyli 2).
W drugiej iteracji zwiększy wartość zmiennej i do 3 i sprawdzi, czy wartość ta jest równa 5. Nie jest, zatem warunek nie jest spełniony – wartość zmiennej i zostaje wypisana.
W trzeciej iteracji zwiększy wartość zmiennej i do 4. Program ponownie sprawdza, czy wartość jest równa 5. Nie jest, zatem warunek nie jest spełniony; wypisana zostaje wartość zmiennej i.
W czwartej iteracji zwiększy wartość zmiennej i do 5. Program następnie sprawdza, czy wartość jest równa 5. Jest, zatem wykonuje się instrukcja break i pętla zostaje przerwana przed wywołaniem instrukcji print.
W wypadku, gdy zwiększalibyśmy wartość zmiennej i przed instrukcją warunkową, przerwanie pętli nastąpiłoby za wcześnie, nie zostałaby wyświetlona liczba 5.
Instrukcja while może zawierać klauzulę else.
Ogólna konstrukcja:
Zapoznaj się z kodem, w którym wykorzystujemy instrukcję while oraz klauzulę else:
Warto zauważyć, że klauzula else działa wyłącznie wtedy, gdy warunek kontynuacji pętli nie jest spełniony (zwraca wartość False). Użycie instrukcji break jest przedwczesnym wymuszeniem zakończenia pętli, a więc komunikat "Pętla zakończona" nie jest wyświetlony.
Wyszukiwanie pierwszego wystąpienia elementu w liście
Napiszemy teraz program, który wypisze indeks pierwszego wystąpienia liczby w zadanej liście. Problem rozwiążemy na dwa sposoby: wykorzystując instrukcje for oraz while. Następnie porównamy działanie obu rozwiązań.
Przygotujemy dwie funkcje:
szukaj_element_for(lista, szukana)szukaj_element_while(lista, szukana).
Przyjmiemy następujące założenia:
parametry funkcji to lista liczb całkowitych i szukana liczba całkowita;
funkcja zwróci za pomocą instrukcji
returnindeks pierwszego wystąpienia szukanej liczby;jeśli funkcja nie znajdzie szukanej liczby, zwróci wartość
-1.
Rozwiązanie wykorzystujące pętlę for
Wynik funkcji jest przechowywany w zmiennej indeks. Na początku tej zmiennej nadajemy wartość -1 (zakładamy, że szukana liczba nie występuje w przeglądanej liście). Następnie tworzymy zmienną i, której przypisujemy wartość 0. Zmienna i przechowuje indeks aktualnie sprawdzanego elementu listy.
Pętla for ze zmienną sterującą element iteruje po kolejnych elementach listy lista. W pętli umieszczona jest instrukcja warunkowa. Instrukcja warunkowa if w pętli sprawdza dwa warunki, które połączone są operatorem and (koniunkcji). Aby instrukcja wewnętrzna została wykonana, muszą być spełnione oba warunki.
Pierwszy warunek to sprawdzenie, czy przeglądany aktualnie element listy jest poszukiwaną wartością przechowywaną w zmiennej szukana.
Drugi warunek to sprawdzenie, czy wartość zmiennej indeks jest równa -1, czyli czy dany element nie został jeszcze znaleziony.
Jeśli oba warunki są prawdziwe, zmiennej indeks przypisywana jest wartość zmiennej i.
Po sprawdzeniu warunku logicznego następuje inkrementacja o 1 zmiennej i.
Funkcja zwraca wartość indeksu szukanego elementu.
Operator += w języku Python oznacza zwiększenie wartości danej zmiennej, np.:
Zwróć uwagę na to, że pętla wykonuje się nadal po znalezieniu pierwszego wystąpienia elementu. Nie jest to efektywne i nie należy do dobrych praktyk programowania. Aby temu zapobiec, możemy dodać instrukcję break w instrukcji warunkowej if po przypisaniu zmiennej indeks wartości zmiennej i. Usuwamy również drugi warunek z instrukcji warunkowej.
Rozwiązanie wykorzystujące pętlę while
Zapoznamy się z przykładem rozwiązania tego samego problemu za pomocą pętli while. Pętla iteruje po kolejnych indeksach listy przechowywanej w parametrze lista. W odróżnieniu od pętli for, pętla while nie zatrzyma się sama, gdy skończą się elementy przeglądanej listy, więc do zmiennej dlugosc przypiszemy liczbę elementów listy lista zwróconą przez funkcję len().
Zmienna i będzie przechowywała indeks aktualnie porównywanego elementu listy. Pierwszy element ma indeks równy 0, dlatego też zmiennej i nadajemy wartość 0. Do elementów listy odwołujemy się przez wskazanie pozycji elementu w liście, na przykład by odwołać się do elementu listy lista o indeksie 3, użyjemy instrukcji lista[3].
W ten sposób uzyskamy dostęp do elementu listy na wskazanej pozycji i (lista[i]). Dlatego przed rozpoczęciem iteracji sprawdzamy długość listy przechowywanej w parametrze lista. Ponownie zmienna i przechowuje indeks sprawdzanego elementu.
Pętla while może zakończyć się w dwóch wypadkach. Pierwszy wypadek to sytuacja, w której po sprawdzeniu całej listy nie znajdujemy szukanego elementu, czyli wartość zmiennej i jest równa liczbie elementów w liście (czyli zmiennej dlugosc). Drugi to sytuacja, w której znajdziemy pierwsze wystąpienie poszukiwanego elementu – pętla zostanie przerwana przez wykonanie instrukcji break.
Pierwszy warunek to sprawdzenie, czy przeglądany aktualnie element listy jest poszukiwaną wartością przechowywaną w zmiennej szukana.
Drugi warunek to sprawdzenie, czy wartość zmiennej indeks jest równa -1, czyli czy dany element nie został jeszcze znaleziony.
Jeśli oba warunki są prawdziwe, zmiennej indeks przypisywana jest wartość zmiennej i, a pętla zostaje przerwana instrukcją break.
Jeśli przynajmniej jeden z warunków nie jest prawdziwy, następuje inkrementacja wartości zmiennej i.
Zadanie to możemy rozwiązać, nie wykorzystując pętli.
Wykorzystujemy metodę index(), która zwraca indeks pierwszego wystąpienia elementu. Najpierw, wykorzystując instrukcję if, sprawdzamy, czy szukana liczba występuje w liście. Jeśli tak, wykorzystujemy metodę index(), by uzyskać indeks jej pierwszego wystąpienia.
Jeśli nie, przypisujemy zmiennej indeks wartość -1, ponieważ liczba nie występuje w liście.
Obliczanie sumy kontrolnej tekstu
Przyjmujemy, że chcemy skontrolować informację, którą wysyłamy mailem. Interesuje nas, czy nie została ona zmieniona w trakcie dostarczania (na trasie poczty elektronicznej są różne serwery, które przekazują wiadomość).
Sprawdzana informacja to zdanie wpisywane na klawiaturze komputera, możemy więc wykorzystać funkcję input().
Wczytanie danych:
W języku Python dane pobrane za pomocą instrukcji input() są ciągiem znaków, a więc typem danych str. Komputery zaś przechowują w swojej pamięci znaki w postaci liczb. Przypomnijmy tablicę podstawowych kodów ASCII:

W języku Python możemy użyć funkcji ord(znak), która zwraca kod ASCII podanego znaku.
Oto przykładowe wartości zwracane przez funkcję ord(). Zawsze zwraca ona liczbę naturalną.
Ponieważ każdemu znakowi w komputerze przypisana jest inna wartość liczbowa, możemy zastosować algorytmalgorytm obliczania sumy wszystkich wartości znaków użytych w tekście. Tak otrzymana liczba to tzw. suma kontrolna naszej informacji.
Jeśli obliczymy taką sumę kontrolną dla słowa Adam, wyniesie ona 371. Możemy przy tym zauważyć, że:
Jeśli zmienimy znak na inny, zmieni się suma kontrolna.
Jeśli dodamy lub usuniemy znak, zmieni się suma kontrolna.
Algorytm działa w czasie liniowym, tzn. im dłuższa informacja, tym dłużej trwa jego wykonanie.
Aktualny algorytm traktuje wyrazy bark i krab tak samo, ponieważ sumuje wartości ASCII bez uwzględnienia pozycji znaku w tekście.
Aby to zmienić, możemy modyfikować wartość znaku na podstawie jego pozycji w tekście. Na przykład możemy pomnożyć wartość ASCII znaku przez jego pozycję w tekście, wtedy nawet drobna zmiana treści pociąga za sobą zmianę wartości sumy kontrolnej. Przeanalizujemy przykład:
Teraz zapiszmy program, który pozwoli zrealizować obliczanie takiej sumy kontrolnej. To tzw. algorytm iteracyjny, czyli powtarzający wielokrotnie te same operacje lub grupy operacji na elementach zbioru danych. W tym wypadku zbiorem danych jest tekst.
Przygotujemy skrypt, który pozwoli zrealizować nasz algorytm. Zapiszmy go jako suma_kontrolna_01.py.
Funkcja wartosc_znaku zwraca wartość uzyskaną przez pomnożenie kodu ASCII podanego znaku przez jego pozycję w podanym przez użytkownika tekście.
Przeanalizuj poprzedni przykład, aby lepiej zrozumieć działanie kodu wewnątrz funkcji.
W wierszach 4–6 nadajemy zmiennym wartości początkowe. Pobieramy łańcuch znaków do zmiennej informacja za pomocą funkcji input(). To jego sumę kontrolną liczymy.
Przyjrzymy się dokładniej pętli for w wierszu 8. Zmienną sterującą jest znak; iterujemy po ciągu znakowym przechowywanym w zmiennej informacja. Wcześniej zdefiniowana zmienna suma_kontrolna zwiększa swoją wartość o liczbę zwróconą przez funkcję wartosc_znaku z każdą następną iteracją. Funkcję wywołujemy dla każdego kolejnego znaku.
Zmienna sterująca znak w pierwszej iteracji przechowuje pierwszy znak ciągu znakowego informacja. Znak ten znajduje się na pozycji 1, czyli wartości początkowej nadanej zmiennej pozycja. Podczas pierwszego przejścia pętli zmienna suma_kontrolna zmieni swoją wartość z 0 na kod ASCII pierwszego znaku pomnożony przez 1 (początkowa wartość zmiennej pozycja).
Na końcu pętli inkrementujemy o 1 zmienną pozycja. Gwarantuje nam to, że razem z przesuwającą się po kolejnych znakach ciągu znakowego zmienną sterującą znak, również wartość pozycji będzie się zmieniać.
W drugiej iteracji wartosc_znaku zostanie wywołana dla drugiego znaku ciągu znakowego i pozycji równej 2. O zwróconą wartość zostanie ponownie zwiększona suma_kontrolona (która po pierwszym przejściu pętli nie wynosi już 0), po czym przejdziemy na trzecią pozycję i trzeci znak ciągu znakowego informacja.
Wykonywanie pętli zakończy się, gdy obliczymy wartość znaku dla ostatniej litery ciągu znakowego informacja.
Na koniec wywołujemy funkcję print().
Sprawdźmy działanie zapisanego kodu. Możemy zauważyć, że zmiana treści informacji zmienia wartość sumy kontrolnej (nawet jeśli tylko zamienimy miejscami litery).
Bez mnożenia kodu ASCII znaku przez jego pozycję w ciągu znakowym dla wyrazów krab i bark otrzymalibyśmy taką samą sumę kontrolną – 416. Wciąż jednak możliwe jest otrzymanie takich samych sum kontrolnych dla różnych słów, np. wiosna oraz bliski:
Dlatego zmodyfikujemy algorytm. Jeśli znak w tekście to samogłoska, wartość zwróconą przez funkcję ord() zwiększamy o 1.
Zastanów się, jak wprowadzić takie rozwiązanie.
Przygotujemy skrypt, który pozwoli nam rozwiązać problem. Zapiszmy go jako suma_kontrolna_02.py.
Przeanalizujemy sposób działania funkcji wartosc_znaku() po wprowadzonych modyfikacjach. Wykonujemy kilka kolejnych kroków:
Obliczamy wartość liczbową znaku, mnożąc jego kod ASCII przez pozycję.
Sprawdzamy, czy znak znajduje się w zbiorze samogłosek (pamiętajmy, że sprawdzamy zarówno duże, jak i małe litery). Operator
inw języku Python sprawdza, czy element z lewej strony znajduje się wśród elementów zbioru wartości z prawej strony.Jesli znak znajduje się w zbiorze (jest samogłoską), zwiększamy (używając operatora
+=) zmiennąwartosco 1.Na końcu zwracamy wartość zmiennej
wartosc.
Sprawdźmy efekt działania skryptu. Możemy zauważyć, że wartość sumy kontrolnej jest inna niż w poprzednim przykładzie. Różni się o 1, bo mamy tylko 1 samogłoskę.
Modyfikacja kodu za pomocą jednej instrukcji warunkowej if pozwoliła uzyskać większą różnorodność sum kontrolnych. Po zmianach suma kontrolna dla słowa wiosna wynosi 2257, a dla słowa bliski wynosi 2256.
Nadal nie jest to jednak idealne rozwiązanie. Otrzymanie identycznych sum kontrolnych dla dwóch różnych wyrazów nadal jest możliwe. Słowa drzewo i kmieć wciąż mają taką samą sumę kontrolną.
Na tym jednak skończymy modyfikowanie algorytmu, ponieważ zaawansowane algorytmy szyfrowania stanowią właściwie osobną gałąż informatyki. Kryptografia w tym kontekście zajmuje się opracowywaniem metod ochrony danych i informacji. Natomiast zapisany algorytm jest prostym przykładem możliwości, jakie dają nam języki programowania.
W testerce możesz przetestować napisany program. Funkcja input() została zastąpiona instrukcją przypisania, w której zmiennej informacja ręcznie przypisujemy wartość. Zwróć szczególną uwagę na działanie pętli for.
Zapisano dwie funkcje. Funkcja wartosc_znaku_1() oblicza sumę kontrolną, mnożąc kod ASCII znaku (ord(znak)) przez jego pozycję w tekście.
Funkcja wartosc_znaku_2 () oblicza sumę kontrolną, mnożąc kod ASCII znaku (ord(znak)) przez jego pozycję w tekście, a następnie zwiększa wartość o 1, jeśli znak jest samogłoską. W programie wyświetlone są sumy kontrolne wyliczone przez każdą z funkcji.
Specyfikacja problemu:
Dane:
informacja– łańcuch znaków
Wynik:
suma kontrolna łańcuchu znaków
informacja
Notatnik
Film
Sprawdźmy, w jaki sposób możemy wykorzystać algorytmy iteracyjne do obliczania wartości słów dla gry podobnej do ScrabbleScrabble.
Utworzymy funkcję licz_scrabble(slowo), której zadaniem będzie obliczenie wartości liczbowej ciągu znaków slowo przy następujących założeniach:
Przyjmujemy, że ciąg znaków składa się co najmniej z jednego znaku.
Słowo składa się tylko z małych liter.
Analizowany tekst nie może zawierać spacji.
Litery ę, ó, ą, ś, ł, ż, ź, ć, ń są warte po 5 punktów.
Litery e, y, u, i, o, a są warte po 2 punkty.
Każda inna litera jest warta 1 punkt.
Jeśli słowo będzie składać się z przynajmniej 11 znaków, ale nie więcej niż 15, dodamy dodatkowe 10 punktów.
Jeśli słowo będzie składać się z przynajmniej 16 znaków, dodamy dodatkowe 20 punktów.
Funkcja
licz_scrabble(slowo)zwróci wynik za pomocą instrukcjireturn.
Zapoznaj się z filmem przedstawiającym kod, który realizuje powyższe założenia, by dowiedzieć się, jaki jest przykładowy sposób wykorzystania instrukcji iteracyjnej w programie w języku Python.

Film dostępny pod adresem /preview/resource/RD56G6XG49E7M
Film przedstawia stosowanie instrukcji iteracyjnej do algorytmów
Przeanalizuj działanie kodu źródłowego wszystkich funkcji użytych w filmie. Możesz sprawdzić samodzielnie ich działanie w testerce poniżej.
Zestaw ćwiczeń interaktywnych
15, 16, 17, 18.Poniżej możesz przetestować powyższe bloki kodu, kopiując je kolejno, a następnie doklejając do testerki umieszczonej pod przykładową listą.
Wykorzystując testerkę i stosując się do jej instrukcji, napisz program, który wypisze wszystkie znaki, jakie występują jednocześnie w dwóch zadanych ciągach znakowych. Znaki należy zapisać w zmiennej wspolne w kolejności ich występowania, a następnie wyświetlić. Jeśli dany znak występuje więcej niż raz, powinien być wypisany tylko raz.
Specyfikacja problemu:
Dane:
tekst1,tekst2– ciągi znakowe
Wynik:
program wypisuje znaki, które pojawiają się w obu ciągach znakowych w kolejności ich występowania w ciągu znakowym
tekst1; jeśli znaki się powtarzają, wypisywane są tylko raz
Zapisz program tak, aby robot zebrał wszystkie jabłka, dotarł do celu (pola z flagą) i wyłożył wszystkie jabłka. Użyj pętli iteracyjnej for ... in range(), a w niej zawrzyj odpowiednie wywołanie funkcji. Na koniec użyj funkcji opróżniającej plecak.
Opis instrukcji, z których można korzystać:
funkcja
move()– robot porusza się o jedno polefunkcja
carries_object()– sprawdzenie, czy robot ma element w plecakufunkcja
object_here()– sprawdzenie, czy na polu z robotem znajduje się jakiś elementfunkcja
take_apple()– robot zabiera element do wirtualnego plecaka, jeśli leży na ziemifunkcja
put_all()– robot wykłada wszystkie elementy z plecaka.
Specyfikacja problemu:
Dane:
losowa liczba jabłek do zebrania z zakresu
<1; 8>
Wyniki:
Robot Reeborg powinien znaleźć się na pozycji x = 10 oraz wyłożyć tam wszystkie jabłka.
Funkcje take_apple() i put_all() są już zdefiniowane.
Słownik
zestaw instrukcji, który służy do rozwiązania problemu lub wykonania zadania; to procedura krok po kroku, która pobiera dane wejściowe, przetwarza je i generuje wynik
wydzielony fragment kodu programu, który posiada pewną funkcjonalność i logiczną całość; pozwala na zwiększenie przejrzystości kodu i jego wielokrotne użycie
gra w układankę słów; autorem jest Alfred Butts; wymyślił ją w 1931 roku, obecnie jest jedną z najpopularniejszych gier słownych na świecie; prawa autorskie do nazwy Scrabble mają firmy Mattel oraz Hasbro
wartość obliczona według specjalnego algorytmu, służy zapewnieniu integralności danych
(ang. string); znakowy typ danych w języku Python
(ang. list); struktura danych przechowująca uporządkowany zbiór wartości w języku Python; elementami listy mogą być różne typy danych; lista może zawierać duplikaty; elementy w liście są indeksowane od 0, co oznacza, że każdy element ma przypisany numer pozycji
Bibliografia
Dokumentacja języka Python, docs.python.org, dostęp 14.03.2024.
Jurkiewicz A., Python 3 - Projekty dla początkujących i pasjonatów, Helion, Gliwice 2021.
Łos K., Python dla nastolatków. Projekty graficzne z Python Turtle, Helion, Gliwice 2022.
Petzold Ch., Kod. Ukryty język komputerów, Helion, Gliwice 2021.
Programowanie w Pythonie z Klubem Młodego Programisty, Platforma OSE IT‑Szkoła, it‑szkola.edu.pl, dostęp 13.03.2024.
Sysło M.M., Algorytmy, Helion, Gliwice 2016.

