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

Wyszukiwanie z Pythonem

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

Wyszukiwanie i porównywanie pozwalają porządkować nasz świat. W sklepie szukamy największego jabłka, po podliczeniu wyników rozgrywki w grę planszową sprawdzamy, kto zdobył najwięcej punktów, na zawodach sportowych wygrywa ten, kto dalej rzucił albo skoczył. W każdej z tych sytuacji mamy zbiór wartości, które ze sobą porównujemy. W tym materiale opiszemy algorytm wyszukiwania największej wartości spośród pobranych z klawiatury lub podanych w liście.

Która liczba jest większa?

Wyszukiwanie największego (lub najmniejszego) elementu wymaga umiejętności wykonywania porównań, zaczniemy więc od prostego zadania: wypiszemy wartość większej z dwóch pobranych liczb.

Specyfikacja algorytmu:

Dane wejściowe:

  • a, b (a ≠ b) – liczby naturalne

Wynik:

  • max_e – liczba naturalna, wartość większej liczby

Zapoznajmy się z algorytmem przedstawionym za pomocą listy kroków:

  1. Wczytaj a, b.

  2. Jeżeli a jest większe od b, do max_e przypisz a, w przeciwnym razie do max_e przypisz b.

  3. Wypisz max_e i zakończ algorytm.

Napiszemy teraz program, który wykona nasze zadanie.

Do pisania programu użyj dostępnego w swoim środowisku edytora, np. IDLE dołączonego do standardowej instalacji Pythona.

Zacznijmy od pobrania danych.

1
Polecenie 1

Skopiuj kod, wklej do pustego pliku i zapisz pod nazwą max_ab.py.

W pliku max_ab.py poniżej odpowiednich komentarzy dodaj instrukcje pobierające z klawiatury dwie liczby naturalne i zapamiętujące je w zmiennych o nazwach ab. Użyj funkcji input()int().

Linia 1. kratka pobierz liczbę a. Linia 4. kratka pobierz liczbę b. Linia 7. kratka porównanie liczb i przypisanie większej do max podkreślnik e. Linia 10. kratka wypisanie max podkreślnik e. Linia 11. print otwórz nawias okrągły cudzysłów max podkreślnik e znak równości cudzysłów przecinek max podkreślnik e zamknij nawias okrągły.
Ważne!

W języku Python nazwa max jest słowem zarezerwowanym dla funkcji zwracającej maksymalny element z sekwencji, dlatego w programach będziemy używali nazwy max_e.

Pobrane liczby trzeba porównać, potrzebujemy więc instrukcji warunkowej.

Polecenie 2

W programie  max_ab.py dodaj instrukcję sprawdzającą warunek a > b. Jeżeli warunek będzie prawdziwy, do max_e przypisz a, w przeciwnym razie przypisz b. Użyj instrukcji warunkowej if.

Sprawdź działanie programu.

Polecenie 3

Przetestuj program max_ab.py dla dwóch zestawów danych:

Linia 1. kratka Pierwszy zestaw danych. Linia 2. a znak równości 4. Linia 3. b znak równości 10. Linia 5. kratka Drugi zestaw danych. Linia 6. a znak równości 26. Linia 7. b znak równości 4.

Algorytm wyszukiwania największego elementu

Szukanie największej z kilku podanych liczb również polegać będzie na porównywaniu. Pierwszą pobraną liczbę zapamiętamy w zmiennej pomocniczejzmienna pomocniczazmiennej pomocniczej max_e. Każdą następną liczbę będziemy porównywać z wartością max_e i jeżeli będzie większa, jej wartość zapiszemy w max_e. Liczbę pobieranych wartości oznaczymy jako n. Taki sposób znajdowania największej wartości spośród n liczb jest przykładem przeszukiwania liniowegoprzeszukiwanie linioweprzeszukiwania liniowego.

Sformułujmy zadanie: wypisz wartość największej z n pobranych liczb naturalnych.

Specyfikacja algorytmu:

Dane wejściowe:

  • n – liczba naturalna, liczba pobranych liczb

  • a – liczba naturalna, zmienna pomocnicza przechowująca pobraną liczbę

Wynik:

  • max_e – liczba naturalna, wartość największej pobranej liczby

Przeanalizujmy algorytm zapisany za pomocą listy kroków:

  1. Wczytaj n.

  2. Wczytujemy pierwszą liczbę i przypisujemy ją do zmiennej max_e.

  3. Powtórz n - 1 razy:
    3.1. Wczytaj a.
    3.2. Jeżeli a jest większe od max_e, do max_e przypisz a.

  4. Wypisz max_e i zakończ algorytm.

Zauważmy na początku, że zaprezentowany algorytm wyszukiwania największego elementu jest algorytmem iteracyjnymiteracjaalgorytmem iteracyjnym. Żeby algorytm działał poprawnie w kroku 2 (przed pętlą) przyjmujemy, że pierwsza podana liczba jest największa i przypisujemy ją do zmiennej max_e. Z tego powodu pętla, w której pobieramy i porównujemy kolejne liczby, wykonuje się n‑1 razy.

Przykład 1

Przeanalizujmy algorytm wyszukiwania elementu największego dla n = 5.

Powtórzenie

Pobierana liczba

Porównanie

Działanie

1

4

-

max_e = 4

2

8

8 > max_e

max_e = 8

3

2

2 > max_e

-

4

7

7 > max_e

-

5

10

10 > max_e

max_e = 10

Liczba powtórzeń: 5.
Wynik: max_e = 10

Ważne!

Jeżeli w omawianym algorytmie zmienimy warunek a > max_e na a < max_e lub też zamienimy miejscami porównywane wartości max_e > a, algorytm będzie wyszukiwał element najmniejszy.

Zapis algorytmu w postaci programu

Napiszemy teraz program, który pozwoli na znajdowanie największej z pobieranych liczb.

1
Polecenie 4

Skopiuj poniższy kod, wklej do pustego pliku i zapisz pod nazwą np. max_n.py.

W pliku max_n.py po pierwszym komentarzu dodaj instrukcję, która pobierze z klawiatury dodatnią liczbę naturalną n. Poniżej drugiego komentarza dodaj instrukcję, która pobierze z klawiatury pierwszą liczbę i przypisze ją do zmiennej max_e. Użyj funkcji input()int().

Linia 1. kratka pobierz liczbę n. Linia 4. kratka zainicjuj max podkreślnik e pierwszą pobraną liczbą. Linia 7. kratka pobierz n minus 1 liczb. Linia 10. kratka wypisanie max podkreślnik e. Linia 11. print otwórz nawias okrągły cudzysłów max podkreślnik e znak równości cudzysłów przecinek max podkreślnik e zamknij nawias okrągły.

Pętla

Po pobraniu pierwszej liczby powtarzamy operacje pobierania i porównywania kolejnych liczb. Do zapisania tych operacji w programie będziemy potrzebowali pętli for, która powinna wykonać się n‑1 razy, ponieważ pierwszą liczbę wczytujemy wcześniej. Wewnątrz pętli po pobraniu kolejnej liczby umieścimy instrukcję warunkową, która będzie sprawdzała, czy podana wartość jest większa od zapamiętanej w zmiennej max_e. Jeżeli tak, wartość liczby zapiszemy w max_e.

1
Polecenie 5

W pliku max_n.py pod komentarzem pobierz n - 1 liczb umieść:

  • pętlę, która wykona się n - 1; użyj instrukcji for i in range(),

  • wewnątrz pętli instrukcję, która pobierze liczbę naturalną i zapisze pod nazwą a,

  • wewnątrz pętli instrukcję warunkową przypisującą a do max_e, jeżeli warunek a > max_e będzie prawdą.

Polecenie 6
RsRyI8wXowpMc1

Wyszukiwanie elementu najmniejszego

Wyszukiwanie elementu najmniejszego odbywa się na tej samej zasadzie, jak największego. Wystarczy, że zmienimy warunek sprawdzany w naszym programie, aby wynikiem była najmniejsza wprowadzona wartość.

Polecenie 7

Program max_n.py zapisz pod nazwą min_n.py. Zmień warunek a > max_e na a < min_e. Wszystkie pozostałe wystąpienia ciągu max_e zmień na min_e.

Polecenie 8
R1DzdWiCOYmUL1

Notatnik

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

Animacja (samouczek)

Rh0oCQ7yBndiW
Film pt. Wyszukiwanie najmniejszego i największego elementu w liście.
Polecenie 9

Lista wyników w programie minmax_lista nie musi być generowana przez funkcję z modułu random. Równie dobrze wyniki mogą być pobierane od użytkownika.

Umieść znak komentarza przed instrukcją wyniki = choices(range(51), k = n). Poniżej wstaw pętlę for, w której pobierzesz n liczb od użytkownika i dodasz do listy wyniki.

Wskazówka: przed pętlą for umieść definicję pustej listy: wyniki = []

Polecenie 10

Wykorzystaj program minmax_lista z pętlą for pobierającą liczby od użytkownika. Przetestuj jego działanie, podając następujące dane: 3 5 4 2 4 5.

Odpowiedz na pytanie o to, które wystąpienie elementu największego znajduje algorytm, jeżeli element ten powtarza się na liście.

3

Zestaw ćwiczeń interaktywnych

Ri6eYMKfEIfz7
Ćwiczenie 1
Zaznacz poprawną odpowiedź.
Algorytm wyszukiwania liniowego polega na: Możliwe odpowiedzi: 1. porównywaniu kolejnych elementów zbioru z elementem szukanym, 2. porównywaniu wybranych elementów zbioru z elementem szukanym, 3. przeglądaniu elementów w losowej kolejności
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RNv2urOVEnBtS
Ćwiczenie 2
Uporządkuj podane instrukcje zgodnie z algorytmem wyszukiwania największego elementu pobieranego z klawiatury. Elementy do uszeregowania: 1. a = int(input("Podaj liczbę: ")), 2. max_e = int(input("Podaj liczbę: ")), 3. max_e = a, 4. if a > max_e:, 5. for i in range(5):
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RrmfIloQVYBBF
Ćwiczenie 3
Dlaczego w algorytmie wyszukiwania największego elementu korzystamy z pętli? Zaznacz poprawne stwierdzenia. Możliwe odpowiedzi: 1. ponieważ powtarzamy operację porównywania kolejnych liczb, 2. tylko za pomocą pętli możemy wczytać listę liczb, 3. w każdym wykonaniu pętli wykonujemy operację przypisania, 4. ponieważ w pętli możemy odczytywać kolejne elementy listy
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RIEq8a6K9d7de
Ćwiczenie 4
Zaznacz poprawną odpowiedź.
Ile razy wykona się pętla szukająca największego elementu w liście o rozmiarze n? Możliwe odpowiedzi: 1. n-1 razy, 2. n razy, 3. n-2 razy
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RVF5Nmo3ZIcUt
Ćwiczenie 5
Przeanalizuj działanie algorytmu wyszukiwania największego elementu dla listy: [5, 9, 2, 9, 1, 9]. Wpisz, jaki będzie indeks największego znalezionego elementu. W razie problemów, prześledź kod z polecenia 5.
Źródło: Robert Bednarz, licencja: CC BY 3.0.
R1FNJEJiSUxCP
Ćwiczenie 6
Zaznacz poprawną odpowiedź.
Która operacja jest najważniejsza w algorytmie wyszukiwania największego elementu? Możliwe odpowiedzi: 1. porównywanie, 2. iterowanie, 3. przypisanie, 4. indeksowanie
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RCmfv4altgBSq
Ćwiczenie 7
Zaznacz instrukcję, która zmieni działanie algorytmu wyszukiwania największego elementu w liście tak, że wyszukiwany będzie element najmniejszy. Możliwe odpowiedzi: 1. if wyniki[i] < max_e, 2. for i in range(n, 0, -1), 3. wyniki[i] = max_e
Źródło: Robert Bednarz, licencja: CC BY 3.0.
11
Ćwiczenie 8

Opis problemu:

W liście n liczb całkowitych należy znaleźć element najmniejszy.

Specyfikacja problemu:

Dane wejściowe:

  • liczby – lista zawierająca liczby całkowite

  • n – liczba elementów listy

Wynik

  • najmniejsza liczba z listy

Ćwiczenie wykonaj w testerce.

RADjCS04XmgTf1
R1P3QOzReQuCp
11
Ćwiczenie 9

Opis problemu:

W liście n liczb całkowitych należy znaleźć elementy najmniejszy i największy, a następnie wypisać je w postaci krotki.

Specyfikacja problemu:

Dane wejściowe:

  • liczby – lista zawierająca liczby całkowite

  • n – liczba elementów listy

Wyniki:

  • najmniejsza i największa liczba z listy wypisane w postaci krotki

Ćwiczenie wykonaj w testerce.

R1ODB7lKB0Rqd1
R1W1rNVdcyKtX

Słownik

iteracja
iteracja

wielokrotne powtarzanie operacji; algorytmy, w których iteracja służy znalezieniu wyniku, nazywamy iteracyjnymi

przeszukiwanie liniowe
przeszukiwanie liniowe

najprostszy algorytm wyszukiwania informacji w zbiorze elementów, polega na porównywaniu klucza, np. szukanej wartości, z każdym kolejnym elementem zbioru

zmienna pomocnicza
zmienna pomocnicza

zmienna tymczasowo przechowująca pośredni wynik obliczeń lub jakąś wartość