🐍Python🐍 zajęcia 6 + update quizu
pętle WHILE * ciąg Fibonacciego * błądzenie losowe
!! Uważaj - nie nadawaj zmiennej nazwy "max" - może zostać niewłaściwie zinterpretowana
Pętla while
- jeśli to prawda, zrób...
i = 5
while i<0:
print(i) # wynik: 0 1 2 3 4
i += 1
- Pętla
while
wykonuje blok kodu tak długo, jak warunek jest prawdziwy (True
). Gdy warunek staje się fałszywy (False
), pętla się kończy. - sposoby zakończenia pętli:
- i += 1 - zapobiega nieskończonemu wykonywaniu pętli
break
- skrót klawiszowy (np. Ctrl + C w terminalu).
continue
– pomija dalszą część aktualnej iteracji i przechodzi do kolejnej
i = 0
while i < 10:
i += 1
if i == 5:
continue # pomija wypisanie 5
if i == 8:
break # przerywa pętlę przy 8
print(i #wynik: 0, 1, 2, 3, 4, 6, 7
while True:
to popularny sposób tworzenia głównej pętli w programach interaktywnych (np. gry, menu konsolowe).
📌 Kiedy używać while
, a kiedy for
?
while
– gdy nie wiadomo z góry ile razy coś ma się wykonać (np. czekamy na spełnienie warunku).for
– gdy wiadomo ile razy coś ma się wykonać (np. iteracja po elementach listy).
Ciąg fibonacciego
Wzór ciągu Fibonacciego, definiuje się następująco: każdy element ciągu, począwszy od trzeciego, jest sumą dwóch poprzednich. Pierwsze dwa elementy ciągu to zazwyczaj 0 i 1, lub 1 i 1. Zatem, wzór rekurencyjny wygląda następująco: F(n) = F(n-1) + F(n-2), gdzie F(0) = 0, a F(1) = 1 (lub F(0) = 1, F(1) = 1).
🧠 Gdzie spotyka się ciąg Fibonacciego?
- 📐 Złoty podział (np. spirala Fibonacciego)
- 🌻 Wzory w przyrodzie – liście, ananasy, kwiaty
- 🎨 Sztuka i architektura (złota proporcja)
- 📊 Algorytmy: dynamiczne programowanie, struktury danych (drzewa Fibo)
- 🎲 Przykład w uczeniu się rekurencji, iteracji i optymalizacji

import turtle
fibo = [0, 1]
suma_ostatnich = fibo[0] + fibo[1]
# czy zgodzicie sie, ze to powyzej mozna tez zapisac
# jako suma_ostatnich = fibo[-1]+fibo[-2]import turtle
zolwik = turtle.Turtle()
zolwik.speed(4)
zolwik.shape("turtle")
zolwik.pensize(2)
dlugosc_boku = 16
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34....]
fibo = [0, 1]
suma_ostatnich = fibo[-1]+fibo[-2]
# zakladamy, ze liczymy do wartosci mniejszej od 98
gorna_granica = 567
while suma_ostatnich < gorna_granica:
fibo.append(suma_ostatnich)
suma_ostatnich = fibo[-1]+fibo[-2]
print(fibo)
for i in fibo[1:]:
for _ in range(6): # 6 powtórzeń, ponieważ do wyrysowanego kwadratu dodajemy trasę na przeciwlegly kąt kwadratu i ustawienie żółwia w odpowiednim kierunku
zolwik.forward(dlugosc_boku * i)
zolwik.left(90)
zolwik.right(90)
zolwik.exitonclick()
Random walk
- przykład na wykorzystanie pętli while (nie musi on zawsze wykorzystywać tej pętli)
🎯 Do czego wykorzystuje się random walk?
🧪 1. Fizyka i chemia - ruchy cząsteczek w cieczy lub gazie (np. ruchy Browna), modelowanie dyfuzji – jak substancje się rozprzestrzeniają
📈 2. Finanse - modelowanie cen akcji lub walut – zakłada się, że zmieniają się losowo, używany w teorii efektywnego rynku (EMH)
🧠 3. Sztuczna inteligencja i uczenie maszynowe - przeszukiwanie przestrzeni stanów w algorytmach (np. Monte Carlo Tree Search), wstęp do metod eksploracji np. w Reinforcement Learning
📊 4. Symulacje komputerowe - Monte Carlo simulations – do przewidywania wyników procesów losowych, testowanie robustności systemów, np. sieci komputerowych lub biologicznych
🌍 5. Biologia i ekologia - modelowanie migracji zwierząt, opisanie rozmnażania się lub rozprzestrzeniania genów
🧩 6. Grafika komputerowa - Tworzenie tekstur proceduralnych, Symulacja chaosu, dymu, płynów, wzorów naturalnych
🧮 7. Teoria grafów i algorytmy - random walk po grafie – np. używany w algorytmie PageRank Google’a, znajdowanie powiązań między węzłami (np. w sieciach społecznościowych).
import turtle
import random
screen = turtle.Screen()
screen.setup(400, 800)
zolwik = turtle.Turtle()
zolwik.speed(8)
zolwik.shape("turtle")
zolwik.pensize(5)
kolory = [
"CornflowerBlue",
"DarkOrchid",
"IndianRed",
"DeepSkyBlue",
"LightSeaGreen",
"wheat",
"SlateGray",
"SeaGreen",
katy = [0, 90, 180, 270]
odleglosc = 10
#rozwiązanie 1
while True:
zolwik.left(random.choice(katy))
zolwik.forward(odleglosc)
#rozwiązanie 2
# kroki = 0
# maks_krokow = 1000
while kroki <= maks_krokow:
zolwik.setheading(random.choice(katy)) # lepsze niż left() przy 0/90/180/270
zolwik.pencolor(random.choice(kolory))
zolwik.forward(odleglosc)
kroki += 1
turtle.exitonclick()

Program - zgadnij liczbę
# Zasady:
# wersja podstawowa - 10 podejsć
# gra polegająca na odgadnięciu liczby z przedziału 1-100 -> random.rrandint()
# ograniczenie - stosujemy pętle while
# wersja zaawansowana - wybór poziomu trudnosci -(trudniejszym = 3 podejścia)
import random
losowanie = random.randint(1,100)
print(losowanie) # pokazujemy wylosowana liczbę, dla sprawdzenia czy program odpowiednio reaguje
# Wybór poziomu trudności
poziom = int(input("Wybierz poziom: wpisz 1 aby wybrać łatwy wariant / wpisz 2 jeśli chcesz zagrać na trudnym poziomie: ").lower())
if poziom == 1:
podejscia = 10
else:
podejscia = 3
# Kod gry
while podejscia > 0:
wybor_gracza = int(input("Podaj liczbę od 1 do 100: "))
podejscia -= 1
if losowanie == wybor_gracza:
print("Wygrana! Gratulacje")
break
elif wybor_gracza < losowanie:
print("Za mało!")
else:
print("Za dużo!")
if podejscia == 0:
print(f"Przegrana, wylosowaną liczbą było {losowanie}")
break
else:
print(f"Zostało Ci {podejscia} prób.")

Rozwiązanie zadania
- wyszukaj logi z czerwca i z komunikatem ERROR:
#rozwiązanie zadania
logi = [
["[2025-03-25T10:41:50] [WARN] Ciepło tutaj..."],
["[2025-03-25T11:58:50] [INFO] Cośtam liczę."],
["[2025-04-25T20:18:51] [INFO] Zadanie wykonane."],
["[2025-05-25T21:12:52] [ERROR] Bzzzztttt... dzielisz przez zero."],
["[2025-05-25T22:48:50] [INFO] Plik przetworzony."],
["[2025-06-25T01:48:50] [INFO] Połączona z serwisem www."],
["[2025-06-25T05:48:22] [ERROR] Booom... i wybuchło..."],
["[2025-06-25T15:48:31] [WARN] Miejsce na dysku się kończy."],
["[2025-07-25T20:48:50] [ERROR] Zły format pliku."],
["[2025-07-25T21:48:32] [INFO] Przesyłka gotowa."],
["[2025-07-25T22:21:50] [INFO] Program ściągnięty."],
["[2025-07-25T25:48:50] [INFO] A ja liczę i liczę...."],
]
for log in logi:
if "2025-06" in log[0] and "ERROR" in log[0]:
print(log)

Kwestionariusz wykonany z wykorzystaniem pętli while
FUNKCJA ENUMERATE:
- W Pythonie, kiedy używasz funkcji
enumerate()
, możesz dodać argumentstart=1
, który określa, od jakiej liczby zaczyna się numeracja. - Przykład:
owoce = ["jabłko", "gruszka", "banan"]
for i, owoc in enumerate(owoce):
print(f"{i}. {owoc}")
Wynik:

Kwestionariusz:
import random
kwestionariusz = {
"Co niezwykłego jest w odchodach wombatów?": [
("Są zielone jak trawa", -0.5),
("Mają kształt kostki", +1),
("Świecą w ciemności", -0.5)
],
"Jak porusza się kangur, kiedy idzie powoli (nie skacze)?":[
("Chodzi wyłącznie na tylnych łapach",-0.5),
("Chodzi na czterech łapach jak pies", -0.5),
("Opiera się na ogonie jak na trzeciej nodze", +1)
],
"Ile może żyć rekin arktyczny (grenlandzki)?": [
("Ponad 400 lat", +1),
("Około 150 lat",-0.5),
("Do 70 lat",-0.5)
],
"Dlaczego kapibary są często pokazywane w towarzystwie innych zwierząt?": [
("Są niezwykle spokojne i towarzyskie", +1),
("Mają zapach, który przyciąga ptaki",-0.5),
("Mimo, że są bardzo hałaśliwe, ale lubią dzielić się jedzeniem z innymi gatunkami", -0.5)
],
"Dlaczego kuoka nazywana jest „najsłodszym zwierzęciem świata' ": [
("Bo wygląda jakby ciągle się uśmiechała",+1),
("Bo ma miękkie futro i fioletowy język",-0.5),
("Bo daje się głaskać każdemu człowiekowi",-0.5)
],
"Co pomaga panterze śnieżnej przetrwać w zimnym klimacie?": [
("Ma specjalne gruczoły ogrzewające krew",-0.5),
("Ma bardzo gęste, grube futro i szerokie łapy",+1),
("Zapada w sen zimowy na 3 miesiące",-0.5)
],
"Dlaczego alpaki często plują?": [
("Aby wyrazić niezadowolenie lub pokazać dominację", +1),
("Bo mają za dużo śliny", -0.5),
("Bo to sposób, w jaki się porozumiewają z ludźmi", -0.5)
],
"Co wyróżnia żółwia słoniowego z Galapagos?": [
("Potrafi pływać z prędkością 20 km/h", -0.5),
("Ma miękki pancerz, który zmienia kolor", -0.5),
("Jest jednym z największych żółwi lądowych na świecie", +1)
],
"Jak słonie indyjskie okazują emocje?": [
("Przez dotyk, dźwięki i ruchy trąby", +1),
("Przez zmianę koloru skóry", -0.5),
("Poprzez machanie uszami w różne strony", -0.5)
],
"Ile serc ma ośmiornica?" : [
("jedno", -0.5),
("osiem", -0.5),
("trzy", +1)
]
}
### Baza
# Zamieniamy słownik na listę par (pytanie, odpowiedzi), by móc przetasować
pytania_lista = list(kwestionariusz.items())
random.shuffle(pytania_lista)
# Przechodzimy po pytaniach
for numer, (pytanie, odpowiedzi) in enumerate(pytania_lista, start=1):
print(f"\nPytanie {numer}: {pytanie}")
# Tworzymy kopię odpowiedzi i tasujemy ją
odp_tasowane = list(odpowiedzi) # kopia
random.shuffle(odp_tasowane)
# Wyświetlamy odpowiedzi
for i, (tekst, punkty) in enumerate(odp_tasowane, start=1):
print(f" {i}. {tekst}")
Wynik (przetasowane pytania i odpowiedzi):
