R12192efrJ5bH
Grafika przedstawia dwa splecione symbole węży. Jeden jest niebieski, a drugi żółty.

Stosowanie instrukcji iteracyjnej do realizacji algorytmów iteracyjnych w języku Python

Logo języka Python
Źródło: Dnu72, dostępny w internecie: commons.wikimedia.org, licencja: CC BY-SA 4.0.

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.

  1. Interaktywna treść merytorycznaInteraktywna treść merytoryczna

  2. MultimediumMultimedium

  3. Zestaw ćwiczeń interaktywnychZestaw ćwiczeń interaktywnych

  4. SłownikSłownik

  5. BibliografiaBibliografia

Aby zrozumieć poruszane w tym materiale zagadnienia, przypomnij sobie:
Twoje cele
  • Przeanalizujesz i porównasz działanie pętli iteracyjnych w języku Python.

  • Stworzysz algorytmalgorytmalgorytm obliczający sumę kontrolnąsuma kontrolnasumę kontrolną wprowadzanego z klawiatury tekstu.

  • Na podstawie stworzonego algorytmu zapiszesz i uruchomisz program wykorzystujący instrukcje iteracyjne.

  • Zapoznasz się z funkcjąfunkcjafunkcją języka Python służącą zamianie znaków na kody ASCII.

1

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.

Ważne!

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ścielistaliście, krotce, słowniku, ciągu znakówciąg 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:

Linia 1. for element in zbior dwukropek. Linia 2. kratka Instrukcje pętli wykonywane dla każdego elementu zbioru.

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.

Przykład 1

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.

Linia 1. lista znak równości otwórz nawias kwadratowy 1 przecinek 5 przecinek 2 przecinek 7 przecinek 5 zamknij nawias kwadratowy. Linia 2. for liczba in lista dwukropek. Linia 3. print otwórz nawias okrągły liczba zamknij nawias okrągły. Linia 5. kratka Efekt działania programu dwukropek. Linia 6. kratka 1. Linia 7. kratka 5. Linia 8. kratka 2. Linia 9. kratka 7. Linia 10. kratka 5.

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.

Linia 1. lista znak równości otwórz nawias kwadratowy cudzysłów Ala cudzysłów przecinek cudzysłów ma cudzysłów przecinek 13 przecinek cudzysłów lat cudzysłów zamknij nawias kwadratowy. Linia 2. for i in lista dwukropek. Linia 3. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 5. kratka Efekt działania programu dwukropek. Linia 6. kratka Ala. Linia 7. kratka ma. Linia 8. kratka 13. Linia 9. kratka lat.

Podczas pierwszej iteracji zmienna sterująca i jest równa Ala, podczas drugiej ma, podczas trzeciej 13, a podczas czwartej, czyli ostatniej, "lat".

Pętlę for również wykorzystujemy, by iterować po kolejnych znakach łańcucha znaków.

Przykład 2

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.

Linia 1. zdanie znak równości cudzysłów Pętle iteracyjne cudzysłów. Linia 2. for znak in zdanie dwukropek. Linia 3. print otwórz nawias okrągły znak zamknij nawias okrągły. Linia 5. kratka Efekt działania programu dwukropek. Linia 6. kratka P. Linia 7. kratka ę. Linia 8. kratka t. Linia 9. kratka l. Linia 10. kratka e. Linia 11. kratka. Linia 12. kratka i. Linia 13. kratka t. Linia 14. kratka e. Linia 15. kratka r. Linia 16. kratka a. Linia 17. kratka c. Linia 18. kratka y. Linia 19. kratka j. Linia 20. kratka n. Linia 21. kratka e.

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:

Linia 1. for element in range otwórz nawias okrągły start przecinek stop przecinek krok zamknij nawias okrągły dwukropek. Linia 2. kratka Instrukcje wewnętrzne pętli wykonywane dla każdego elementu zbioru.

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).

Przykład 3

Chcemy wyświetlić liczby całkowite z przedziału <0, 10>. Wykorzystujemy do tego funkcję range.

Linia 1. for i in range otwórz nawias okrągły 0 przecinek 11 przecinek 1 zamknij nawias okrągły dwukropek. Linia 2. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 3. kratka Efekt działania programu dwukropek. Linia 4. kratka 0. Linia 5. kratka 1. Linia 6. kratka 2. Linia 7. kratka 3. Linia 8. kratka 4. Linia 9. kratka 5. Linia 10. kratka 6. Linia 11. kratka 7. Linia 12. kratka 8. Linia 13. kratka 9. Linia 14. kratka 10.

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.

Linia 1. for element in range otwórz nawias okrągły stop zamknij nawias okrągły dwukropek. Linia 2. kratka Instrukcje wewnętrzne pętli wykonywane dla każdego elementu zbioru.

Zmieniony kod:

Linia 1. for i in range otwórz nawias okrągły 11 zamknij nawias okrągły dwukropek. Linia 2. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 3. kratka Efekt działania programu dwukropek. Linia 4. kratka 0. Linia 5. kratka 1. Linia 6. kratka 2. Linia 7. kratka 3. Linia 8. kratka 4. Linia 9. kratka 5. Linia 10. kratka 6. Linia 11. kratka 7. Linia 12. kratka 8. Linia 13. kratka 9. Linia 14. kratka 10.

Wykorzystując zaprezentowane instrukcje, można zapisać kod, który będzie powtarzany określoną liczbę razy.

1
Przykład 4

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:

Linia 1. wybrana podkreślnik liczba znak równości 7. Linia 3. for i in range otwórz nawias okrągły 1 przecinek 11 zamknij nawias okrągły dwukropek. Linia 4. wynik znak równości wybrana podkreślnik liczba asterysk i. Linia 5. print otwórz nawias okrągły wybrana podkreślnik liczba przecinek cudzysłów asterysk cudzysłów przecinek i przecinek cudzysłów znak równości cudzysłów przecinek wynik zamknij nawias okrągły.

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 zmiennej wybrana_liczba przez liczby od 1 do 10)

Wynik:

  • tabliczka mnożenia dla liczby wybrana_liczba

Rphacd73UorjN1

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:

Linia 1. while warunek podkreślnik logiczny dwukropek. Linia 2. kratka Instrukcje pętli wykonywane przecinek jeśli warunek logiczny jest spełniony.

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.

Przykład 5

Ponownie zapisujemy program, który wyświetli liczby od 0 do 10. Tym razem wykorzystujemy pętlę while.

Ważne!

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.

Linia 1. i znak równości 0. Linia 2. while i otwórz nawias ostrokątny 11 dwukropek. Linia 3. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 4. i znak równości i plus 1. Linia 5. kratka Efekt działania programu dwukropek. Linia 6. kratka 0. Linia 7. kratka 1. Linia 8. kratka 2. Linia 9. kratka 3. Linia 10. kratka 4. Linia 11. kratka 5. Linia 12. kratka 6. Linia 13. kratka 7. Linia 14. kratka 8. Linia 15. kratka 9. Linia 16. kratka 10.

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ć.

Przykład 6

Jeśli warunek kontynuacji pętli while zawsze zwraca wartość True, mamy do czynienia z pętlą nieskończoną.

Linia 1. while True dwukropek. Linia 2. print otwórz nawias okrągły cudzysłów To jest pętla nieskończona cudzysłów zamknij nawias okrągły.

W pętli while wykorzystać możemy instrukcję break, która służy do przerwania wykonywania pętli.

Przykład 7

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.

Linia 1. i znak równości 1. Linia 2. while i otwórz nawias ostrokątny 11 dwukropek. Linia 3. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 4. if i znak równości znak równości 5 dwukropek. Linia 5. break. Linia 6. i znak równości i plus 1. Linia 7. kratka Efekt działania programu dwukropek. Linia 8. kratka 1. Linia 9. kratka 2. Linia 10. kratka 3. Linia 11. kratka 4. Linia 12. kratka 5.

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:

Linia 1. i znak równości 1. Linia 2. while i otwórz nawias ostrokątny 11 dwukropek. Linia 3. i znak równości i plus 1. Linia 4. if i znak równości znak równości 5 dwukropek. Linia 5. break. Linia 6. print otwórz nawias okrągły i zamknij nawias okrągły.

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).

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.

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.

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:

Linia 1. while warunek podkreślnik logiczny dwukropek. Linia 2. kratka Instrukcje wewnętrzne pętli wykonywane przecinek jeśli warunek logiczny jest spełniony. Linia 3. else dwukropek. Linia 4. kratka Ten blok wykona się tylko wtedy przecinek gdy pętla zakończy się naturalnie przecinek tj kropka bez użycia break.
Przykład 8

Zapoznaj się z kodem, w którym wykorzystujemy instrukcję while oraz klauzulę else:

Linia 1. i znak równości 1. Linia 2. while i otwórz nawias ostrokątny 11 dwukropek. Linia 3. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 4. i znak równości i plus 1. Linia 5. else dwukropek. Linia 6. print otwórz nawias okrągły cudzysłów Pętla zakończona cudzysłów zamknij nawias okrągły. Linia 7. kratka Efekt działania programu dwukropek. Linia 8. kratka 1. Linia 9. kratka 2. Linia 10. kratka 3. Linia 11. kratka 4. Linia 12. kratka 5. Linia 13. kratka 6. Linia 14. kratka 7. Linia 15. kratka 8. Linia 16. kratka 9. Linia 17. kratka 10. Linia 18. kratka Pętla zakończona.

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.

Linia 1. i znak równości 1. Linia 2. while i otwórz nawias ostrokątny 11 dwukropek. Linia 3. print otwórz nawias okrągły i zamknij nawias okrągły. Linia 4. if i znak równości znak równości 5 dwukropek. Linia 5. break. Linia 6. i znak równości i plus 1. Linia 7. else dwukropek. Linia 8. print otwórz nawias okrągły cudzysłów Pętla zakończona cudzysłów zamknij nawias okrągły. Linia 9. kratka Efekt działania programu dwukropek. Linia 10. kratka 1. Linia 11. kratka 2. Linia 12. kratka 3. Linia 13. kratka 4. Linia 14. kratka 5.

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:

  1. parametry funkcji to lista liczb całkowitych i szukana liczba całkowita;

  2. funkcja zwróci za pomocą instrukcji return indeks pierwszego wystąpienia szukanej liczby;

  3. jeśli funkcja nie znajdzie szukanej liczby, zwróci wartość -1.

Przykład 9

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.

Linia 1. def szukaj podkreślnik element podkreślnik for otwórz nawias okrągły lista przecinek szukana zamknij nawias okrągły dwukropek. Linia 2. indeks znak równości minus 1. Linia 3. i znak równości 0. Linia 5. for element in lista dwukropek. Linia 6. if element znak równości znak równości szukana and indeks znak równości znak równości minus 1 dwukropek. Linia 7. indeks znak równości i. Linia 8. i plus znak równości 1. Linia 10. return f cudzysłów Liczba otwórz nawias klamrowy szukana zamknij nawias klamrowy minus indeks otwórz nawias klamrowy indeks zamknij nawias klamrowy cudzysłów. Linia 12. print otwórz nawias okrągły cudzysłów Wersja z pętlą for cudzysłów zamknij nawias okrągły. Linia 13. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik for otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 14. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik for otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 9 zamknij nawias okrągły zamknij nawias okrągły. Linia 16. kratka przykładowe wyniki. Linia 17. kratka Wersja z pętlą for. Linia 18. kratka Liczba 4 minus indeks 5. Linia 19. kratka Liczba 9 minus indeks minus 1.
Ważne!

Operator += w języku Python oznacza zwiększenie wartości danej zmiennej, np.:

Linia 1. x znak równości 5. Linia 2. x plus znak równości 3. Linia 3. kratka x wynosi 8. Linia 4. y znak równości 5. Linia 5. y znak równości y plus 3. Linia 6. kratka y wynosi 8.

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.

Linia 1. def szukaj podkreślnik element podkreślnik for otwórz nawias okrągły lista przecinek szukana zamknij nawias okrągły dwukropek. Linia 2. indeks znak równości minus 1. Linia 3. i znak równości 0. Linia 5. for element in lista dwukropek. Linia 6. if element znak równości znak równości szukana dwukropek. Linia 7. indeks znak równości i. Linia 8. break. Linia 9. i plus znak równości 1. Linia 11. return f cudzysłów Liczba otwórz nawias klamrowy szukana zamknij nawias klamrowy minus indeks otwórz nawias klamrowy indeks zamknij nawias klamrowy cudzysłów. Linia 13. print otwórz nawias okrągły cudzysłów Wersja z pętlą for cudzysłów zamknij nawias okrągły. Linia 14. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik for otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 15. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik for otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 9 zamknij nawias okrągły zamknij nawias okrągły.
Przykład 10

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.

Linia 1. def szukaj podkreślnik element podkreślnik while otwórz nawias okrągły lista przecinek szukana zamknij nawias okrągły dwukropek. Linia 2. indeks znak równości minus 1. Linia 3. i znak równości 0. Linia 4. dlugosc znak równości len otwórz nawias okrągły lista zamknij nawias okrągły. Linia 6. while i otwórz nawias ostrokątny dlugosc dwukropek. Linia 7. if lista otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości znak równości szukana and indeks znak równości znak równości minus 1 dwukropek. Linia 8. indeks znak równości i. Linia 9. break. Linia 10. i plus znak równości 1. Linia 12. return f cudzysłów Liczba otwórz nawias klamrowy szukana zamknij nawias klamrowy minus indeks otwórz nawias klamrowy indeks zamknij nawias klamrowy cudzysłów. Linia 14. print otwórz nawias okrągły cudzysłów Wersja z pętlą while cudzysłów zamknij nawias okrągły. Linia 15. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik while otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 16. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik while otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 9 zamknij nawias okrągły zamknij nawias okrągły. Linia 18. kratka Wersja z pętlą while. Linia 19. kratka Liczba 4 minus indeks 5. Linia 20. kratka Liczba 9 minus indeks minus 1.

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.

Przykład 11

Zadanie to możemy rozwiązać, nie wykorzystując pętli.

Linia 1. def szukaj podkreślnik element podkreślnik index otwórz nawias okrągły lista przecinek szukana zamknij nawias okrągły dwukropek. Linia 2. if szukana in lista dwukropek. Linia 3. indeks znak równości lista kropka index otwórz nawias okrągły szukana zamknij nawias okrągły. Linia 4. else dwukropek. Linia 5. indeks znak równości minus 1. Linia 7. return f cudzysłów Liczba otwórz nawias klamrowy szukana zamknij nawias klamrowy minus indeks otwórz nawias klamrowy indeks zamknij nawias klamrowy cudzysłów. Linia 9. print otwórz nawias okrągły cudzysłów Wersja z metodą index otwórz nawias okrągły zamknij nawias okrągły cudzysłów zamknij nawias okrągły. Linia 10. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik index otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 11. print otwórz nawias okrągły szukaj podkreślnik element podkreślnik index otwórz nawias okrągły otwórz nawias kwadratowy 2 przecinek 3 przecinek 3 przecinek 3 przecinek 2 przecinek 4 przecinek 6 przecinek 7 przecinek 7 przecinek 8 przecinek 2 przecinek 4 zamknij nawias kwadratowy przecinek 9 zamknij nawias okrągły zamknij nawias okrągły. Linia 13. kratka Wersja z metodą index otwórz nawias okrągły zamknij nawias okrągły. Linia 14. kratka Liczba 4 minus indeks 5. Linia 15. kratka Liczba 9 minus indeks minus 1.

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().

Przykład 12

Wczytanie danych:

Linia 1. informacja znak równości input otwórz nawias okrągły cudzysłów Podaj informację do przekazania dwukropek cudzysłów zamknij nawias okrągły. Linia 2. kratka sprawdzamy przecinek co wprowadziliśmy. Linia 3. print otwórz nawias okrągły informacja zamknij nawias okrągły.

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:

R1eEIMNAAn5XP1
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0

W języku Python możemy użyć funkcji ord(znak), która zwraca kod ASCII podanego znaku.

Przykład 13

Oto przykładowe wartości zwracane przez funkcję ord(). Zawsze zwraca ona liczbę naturalną.

Linia 1. kratka ord otwórz nawias okrągły znak zamknij nawias okrągły minus zamknij nawias ostrokątny kod ASCII. Linia 3. ord otwórz nawias okrągły cudzysłów A cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 65. Linia 4. ord otwórz nawias okrągły cudzysłów a cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 97. Linia 5. ord otwórz nawias okrągły cudzysłów ę cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 281. Linia 6. ord otwórz nawias okrągły cudzysłów Ę cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 280. Linia 7. ord otwórz nawias okrągły cudzysłów d cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 100. Linia 8. ord otwórz nawias okrągły cudzysłów m cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 109.

Ponieważ każdemu znakowi w komputerze przypisana jest inna wartość liczbowa, możemy zastosować algorytmalgorytmalgorytm obliczania sumy wszystkich wartości znaków użytych w tekście. Tak otrzymana liczba to tzw. suma kontrolna naszej informacji.

Przykład 14

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.

Linia 1. kratka ord otwórz nawias okrągły znak zamknij nawias okrągły minus zamknij nawias ostrokątny kod ASCII. Linia 3. ord otwórz nawias okrągły cudzysłów A cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 65. Linia 4. ord otwórz nawias okrągły cudzysłów d cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 100. Linia 5. ord otwórz nawias okrągły cudzysłów a cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 97. Linia 6. ord otwórz nawias okrągły cudzysłów m cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 109. Linia 8. 65 plus 100 plus 97 plus 109 minus zamknij nawias ostrokątny 371.

Aktualny algorytm traktuje wyrazy bark i krab tak samo, ponieważ sumuje wartości ASCII bez uwzględnienia pozycji znaku w tekście.

Linia 1. Podaj informację dwukropek krab. Linia 2. Obliczona suma kontrolna wynosi 416. Linia 3. kratka zmieniona wiadomość. Linia 4. Podaj informację dwukropek bark. Linia 5. Obliczona suma kontrolna wynosi 416.

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:

Linia 1. kratka ord otwórz nawias okrągły znak zamknij nawias okrągły minus zamknij nawias ostrokątny kod ASCII asterysk pozycja znaku w tekście. Linia 3. ord otwórz nawias okrągły cudzysłów A cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 65 asterysk 1. Linia 4. ord otwórz nawias okrągły cudzysłów d cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 100 asterysk 2. Linia 5. ord otwórz nawias okrągły cudzysłów a cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 97 asterysk 3. Linia 6. ord otwórz nawias okrągły cudzysłów m cudzysłów zamknij nawias okrągły minus zamknij nawias ostrokątny 109 asterysk 4. Linia 8. 65 asterysk 1 plus 100 asterysk 2 plus 97 asterysk 3 plus 109 asterysk 4 znak równości 65 plus 200 plus 291 plus 436 minus zamknij nawias ostrokątny 992.

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.

Przykład 15

Przygotujemy skrypt, który pozwoli zrealizować nasz algorytm. Zapiszmy go jako suma_kontrolna_01.py.

Linia 1. def wartosc podkreślnik znaku otwórz nawias okrągły znak przecinek pozycja zamknij nawias okrągły dwukropek. Linia 2. return ord otwórz nawias okrągły znak zamknij nawias okrągły asterysk pozycja. Linia 4. informacja znak równości input otwórz nawias okrągły cudzysłów Podaj informację dwukropek cudzysłów zamknij nawias okrągły. Linia 5. suma podkreślnik kontrolna znak równości 0. Linia 6. pozycja znak równości 1. Linia 8. for znak in informacja dwukropek. Linia 9. suma podkreślnik kontrolna plus znak równości wartosc podkreślnik znaku otwórz nawias okrągły znak przecinek pozycja zamknij nawias okrągły. Linia 10. pozycja plus znak równości 1. Linia 12. print otwórz nawias okrągły cudzysłów Obliczona suma kontrolna wynosi cudzysłów przecinek suma podkreślnik kontrolna zamknij nawias okrągły.

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.

Linia 1. for znak in informacja dwukropek. Linia 2. suma podkreślnik kontrolna plus znak równości wartosc podkreślnik znaku otwórz nawias okrągły znak przecinek pozycja zamknij nawias okrągły. Linia 3. pozycja plus znak równości 1.

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:

Linia 1. Podaj informację dwukropek krab. Linia 2. Obliczona suma kontrolna wynosi 1018. Linia 3. kratka zmieniona wiadomość. Linia 4. Podaj informację dwukropek bark. Linia 5. Obliczona suma kontrolna wynosi 1062.
Linia 1. Podaj informację dwukropek wiosna. Linia 2. Obliczona suma kontrolna wynosi 2254. Linia 3. kratka zmieniona wiadomość. Linia 4. Podaj informację dwukropek bliski. Linia 5. Obliczona suma kontrolna wynosi 2254.

Dlatego zmodyfikujemy algorytm. Jeśli znak w tekście to samogłoska, wartość zwróconą przez funkcję ord() zwiększamy o 1.

Polecenie 1

Zastanów się, jak wprowadzić takie rozwiązanie.

Przykład 16

Przygotujemy skrypt, który pozwoli nam rozwiązać problem. Zapiszmy go jako suma_kontrolna_02.py.

Linia 1. def wartosc podkreślnik znaku otwórz nawias okrągły znak przecinek pozycja zamknij nawias okrągły dwukropek. Linia 2. wartosc znak równości ord otwórz nawias okrągły znak zamknij nawias okrągły asterysk pozycja. Linia 3. if znak in otwórz nawias okrągły cudzysłów eęyuioóaąEĘYUIOÓAĄ cudzysłów zamknij nawias okrągły dwukropek. Linia 4. wartosc plus znak równości 1. Linia 5. return wartosc. Linia 8. informacja znak równości input otwórz nawias okrągły cudzysłów Podaj informację dwukropek cudzysłów zamknij nawias okrągły. Linia 9. suma podkreślnik kontrolna znak równości 0. Linia 10. pozycja znak równości 1. Linia 12. for znak in informacja dwukropek. Linia 13. suma podkreślnik kontrolna plus znak równości wartosc podkreślnik znaku otwórz nawias okrągły znak przecinek pozycja zamknij nawias okrągły. Linia 14. pozycja plus znak równości 1. Linia 16. print otwórz nawias okrągły cudzysłów Obliczona suma kontrolna wynosi cudzysłów przecinek suma podkreślnik kontrolna zamknij nawias okrągły.

Przeanalizujemy sposób działania funkcji wartosc_znaku() po wprowadzonych modyfikacjach. Wykonujemy kilka kolejnych kroków:

  1. Obliczamy wartość liczbową znaku, mnożąc jego kod ASCII przez pozycję.

  2. Sprawdzamy, czy znak znajduje się w zbiorze samogłosek (pamiętajmy, że sprawdzamy zarówno duże, jak i małe litery). Operator in w języku Python sprawdza, czy element z lewej strony znajduje się wśród elementów zbioru wartości z prawej strony.

  3. Jesli znak znajduje się w zbiorze (jest samogłoską), zwiększamy (używając operatora +=) zmienną wartosc o 1.

  4. 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ę.

Linia 1. Podaj informację dwukropek krab. Linia 2. Obliczona suma kontrolna wynosi 1019. Linia 3. kratka zmieniona wiadomość. Linia 4. Podaj informację dwukropek bark. Linia 5. Obliczona suma kontrolna wynosi 1063.

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.

Linia 1. Podaj informację dwukropek wiosna. Linia 2. Obliczona suma kontrolna wynosi 2257. Linia 3. kratka zmieniona wiadomość. Linia 4. Podaj informację dwukropek bliski. Linia 5. Obliczona suma kontrolna 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 drzewokmieć wciąż mają taką samą sumę kontrolną.

Linia 1. Podaj informację dwukropek drzewo. Linia 2. Obliczona suma kontrolna wynosi 2361. Linia 3. kratka zmieniona wiadomość. Linia 4. Podaj informację dwukropek kmieć. Linia 5. Obliczona suma kontrolna wynosi 2361.

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.

1
Przykład 17

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

RdKLZdBI2kQzT1

Notatnik

R1PGeNzTbTJEL
Miejsce na Twoje notatki: (Uzupełnij).
2

Film

Sprawdźmy, w jaki sposób możemy wykorzystać algorytmy iteracyjne do obliczania wartości słów dla gry podobnej do ScrabbleScrabbleScrabble.

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:

  1. Przyjmujemy, że ciąg znaków składa się co najmniej z jednego znaku.

  2. Słowo składa się tylko z małych liter.

  3. Analizowany tekst nie może zawierać spacji.

  4. Litery ę, ó, ą, ś, ł, ż, ź, ć, ń są warte po 5 punktów.

  5. Litery  e, y, u, i, o, a są warte po 2 punkty.

  6. Każda inna litera jest warta 1 punkt.

  7. 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.

  8. Jeśli słowo będzie składać się z przynajmniej 16 znaków, dodamy dodatkowe 20 punktów.

  9. Funkcja licz_scrabble(slowo) zwróci wynik za pomocą instrukcji return.

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.

1
RD56G6XG49E7M1
Film przedstawia stosowanie instrukcji iteracyjnej do algorytmów
1
Przykład 18

Przeanalizuj działanie kodu źródłowego wszystkich funkcji użytych w filmie. Możesz sprawdzić samodzielnie ich działanie w testerce poniżej.

Linia 1. def wartosc podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły dwukropek. Linia 2. if znak in cudzysłów ęóąśłżźćń cudzysłów dwukropek. Linia 3. return 5. Linia 4. elif znak in cudzysłów eyuioa cudzysłów dwukropek. Linia 5. return 2. Linia 6. else dwukropek. Linia 7. return 1. Linia 9. def licz podkreślnik punkty otwórz nawias okrągły slowo zamknij nawias okrągły dwukropek. Linia 10. wartosc znak równości 0. Linia 11. ile podkreślnik znakow znak równości len otwórz nawias okrągły slowo zamknij nawias okrągły. Linia 12. for znak in slowo dwukropek. Linia 13. if znak znak równości znak równości cudzysłów cudzysłów or znak in cudzysłów 0123456789 cudzysłów dwukropek. Linia 14. print otwórz nawias okrągły cudzysłów Słowo zawiera błędny znak – dyskwalifikacja kropka Wynik dwukropek 0 pkt kropka cudzysłów zamknij nawias okrągły. Linia 15. return 0. Linia 16. wartosc plus znak równości wartosc podkreślnik znaku otwórz nawias okrągły znak zamknij nawias okrągły. Linia 18. if ile podkreślnik znakow zamknij nawias ostrokątny 10 dwukropek. Linia 19. if ile podkreślnik znakow zamknij nawias ostrokątny 15 dwukropek. Linia 20. wartosc plus znak równości 20. Linia 21. else dwukropek. Linia 22. wartosc plus znak równości 10. Linia 24. print otwórz nawias okrągły cudzysłów Za słowo cudzysłów przecinek slowo przecinek cudzysłów uzyskujesz cudzysłów przecinek wartosc przecinek cudzysłów pkt kropka cudzysłów zamknij nawias okrągły. Linia 25. return wartosc.
R4mg6eVZNG6681
Polecenie 2
RpP7FawlGzqbY
Polecenie 3
R1RIS6oBbvaog
Polecenie 4
ROZOZ9PHEP3TD
3
Dla zainteresowanych
Polecenie 5
R17UZLNH91XXV

Zestaw ćwiczeń interaktywnych

1
Pokaż ćwiczenia:
R1Q8SBCJ8H77N
Ćwiczenie 1
Wskaż, który z podanych fragmentów pętli wypisze liczby 15, 16, 17, 18.
R59OMTssltq3Q1
Ćwiczenie 2
Uzupełnij stwierdzenie. Każdemu 1. str, 2. liczbowa, 3. float, 4. klawiszowi, 5. rzeczywista, 6. znakowi w komputerze przypisana jest inna wartość 1. str, 2. liczbowa, 3. float, 4. klawiszowi, 5. rzeczywista, 6. znakowi.
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0.
RDSeDZBNcJYQl1
Ćwiczenie 3
Połącz w pary poniższe elementy. kolekcja Możliwe odpowiedzi: 1. in, 2. ord(), 3. element, 4. "ABCDEFG", 5. for pętla iteracyjna Możliwe odpowiedzi: 1. in, 2. ord(), 3. element, 4. "ABCDEFG", 5. for zmienna sterująca Możliwe odpowiedzi: 1. in, 2. ord(), 3. element, 4. "ABCDEFG", 5. for operator Możliwe odpowiedzi: 1. in, 2. ord(), 3. element, 4. "ABCDEFG", 5. for funkcja zwracająca kod numeryczny znaku Możliwe odpowiedzi: 1. in, 2. ord(), 3. element, 4. "ABCDEFG", 5. for
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0.
R1dsvVABAHr031
Ćwiczenie 4
Wstaw w odpowiedniej kolejności poszczególne elementy pętli iteracyjnej. 1. if, 2. in, 3. element, 4. [1, 2, 3, 4], 5. return, 6. for, 7. else, 8. print(), 9. then, 10. : 1. if, 2. in, 3. element, 4. [1, 2, 3, 4], 5. return, 6. for, 7. else, 8. print(), 9. then, 10. : 1. if, 2. in, 3. element, 4. [1, 2, 3, 4], 5. return, 6. for, 7. else, 8. print(), 9. then, 10. : 1. if, 2. in, 3. element, 4. [1, 2, 3, 4], 5. return, 6. for, 7. else, 8. print(), 9. then, 10. : 1. if, 2. in, 3. element, 4. [1, 2, 3, 4], 5. return, 6. for, 7. else, 8. print(), 9. then, 10. :
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0.
RmUkiK7PgBBvI
Ćwiczenie 5
Rozwiąż krzyżówkę i odczytaj hasło.
31
Ćwiczenie 6
R17NnbJemhxmb2
Przeanalizuj kod i wskaż, którym fragmentem kodu należy go uzupełnić, by po uruchomieniu program wyświetlił oczekiwany wynik.
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0.

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ą.

R1WuYoxPr56pE
31
Ćwiczenie 7
Rns7rPI06xPTQ
Przeanalizuj kod i wskaż, którym fragmentem kodu należy go uzupełnić, by po uruchomieniu program wyświetlił oczekiwany wynik.
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0.
R1VdU3YvgJ0eo1
311
Ćwiczenie 8

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

Linia 1. Ciąg znakowy 1 dwukropek cudzysłów na pięciu wzgórzach piętrzy się rzym cudzysłów. Linia 2. Ciąg znakowy 2 dwukropek cudzysłów kartagina cudzysłów. Linia 4. Wynik dwukropek cudzysłów naigrt cudzysłów.
RKtRolarlK9aE1
311
Ćwiczenie 9

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 pole

  • funkcja carries_object() – sprawdzenie, czy robot ma element w plecaku

  • funkcja object_here() – sprawdzenie, czy na polu z robotem znajduje się jakiś element

  • funkcja take_apple() – robot zabiera element do wirtualnego plecaka, jeśli leży na ziemi

  • funkcja 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()put_all() są już zdefiniowane.

R152CIZjrYLQF
Gra multimedialn przedstawia w górnej części prosty tor w formie poziomej planszy z dziesięcioma polami, ponumerowanymi od 1 do 10. Na pierwszym polu stoi robot, a na polach dwa, cztery, siedem i osiem znajdują się czerwone jabłka oznaczone liczbą „jeden”. Na ostatnim, dziesiątym polu widnieje flaga w szachownicę, symbolizująca metę. Oś pozioma oznaczona jest jako x, a pionowa jako y równe jeden. Poniżej widoczne jest okno edytora, które przedstawia zapis początkowego kodu źródłowego programu. def take_apple(): if object_here(): take() def put_all(): while carries_object(): put() # tu uzupełnij kod: for krok in range()
Źródło: Adam Jurkiewicz, licencja: CC BY 3.0.
4

Słownik

algorytm
algorytm

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

funkcja
funkcja

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

Scrabble
Scrabble

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

suma kontrolna
suma kontrolna

wartość obliczona według specjalnego algorytmu, służy zapewnieniu integralności danych

ciąg znaków
ciąg znaków

(ang. string); znakowy typ danych w języku Python

lista
lista

(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

5

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.