Python - zajęcia 6

Python - zajęcia 6
Photo by Lautaro Andreani / Unsplash

1) Pętla While

Wydaje polecenie "wykonuj tak długo aż". Pętla ta wykonuje się tak długo jak jakiś warunek jest spełniony.

i = 0
while i < 10:
    print(i)
    i += 1

Ten kod drukuje liczby od 0 do 9.

2) Pętla while - Schemat działania

Diagram pokazuje logikę działania pętli while. Tak długo, jak warunek A zwraca prawdę, wykonuj B.

    1. Start → Przejdź do warunku A.
    2. Sprawdzenie warunku:
      • Jeśli warunek A jest True, przejdź do bloku B.
      • Jeśli warunek A jest False, zakończ pętlę.
    3. Wykonanie bloku B → Wracamy do warunku A i sprawdzamy ponownie.

3) Wychodzenie z pętli

Czasami chcemy wyjść z pętli wcześniej. Przydaje się do tego polecenie break.

i = 100

while True:
    print(i)
    if i == 0:
        break
    i -= 1

Warunek w pętli powyżej zawsze jest spełniony (ustawiliśmy go na True), ale i tak wyjdziemy z pętli przy 0.

  • Przy każdym "obrocie" sprawdzamy if-em, czy mamy 0.
  • Jeśli nie, zmniejszamy i o 1.
  • Jeśli mamy 0, to uruchamia się linijka z break i wychodzimy z pętli.

UWAGA! Można przerwać też wciskając ctrl + c.

4) Klasy

              ┌─────────────────────────────┐
              │   moduł / biblioteka turtle │
              └─────────────────────────────┘
                      /           \
                     /             \
      ┌─────────────────┐        ┌────────────────┐
      │ nowe typy       │        │ różne funkcje  │
      │ (klasy obiektów)│        │ np.            │
      │ - Turtle        │        │ - exitonclick  │
      └─────────────────┘        └────────────────┘
               │
               │
               ↓
  ┌─────────────────────────────────────────────┐
  │ klasa Turtle dostarcza metody dla tego      │
  │ obiektu                                     │
  └─────────────────────────────────────────────┘

5) Rysowanie pajęczyny

import turtle
import random

kolory = [
    "CornflowerBlue",
    "DarkOrchid",
    "IndianRed",
    "DeepSkyBlue",
    "LightSeaGreen",
    "wheat",
    "SlateGray",
    "SeaGreen"
]

zolwik = turtle.Turtle()
zolwik.speed(3)
zolwik.shape("turtle")
zolwik.pensize(2)

for i in range(6, 600, 2):
    # zolwik.pencolor(random.choice(kolory))  # Opcjonalna zmiana koloru
    zolwik.forward(i)
    zolwik.left(59.5)

zolwik.hideturtle()
turtle.exitonclick()
import turtle

zolwik = turtle.Turtle()
zolwik.speed(3)
zolwik.shape("turtle")
zolwik.pensize(2)

for dlugosc_boku in range(6, 600, 2):
    zolwik.forward(dlugosc_boku)
    zolwik.left(59.5)

turtle.exitonclick()

6) Przykłady pętli While dla rysunków z poprzednich zajęć i inne

x = 0
while True:
    x = x + 1
    print(x)

Kod jest teraz aktywną pętlą while, która zwiększa wartość x o 1 w nieskończoność, wypisując kolejne wartości x.

a) rysunek

import turtle

zolwik = turtle.Turtle()
zolwik.speed(1)
zolwik.shape("turtle")

for _ in range(4):
    zolwik.forward(80)
    zolwik.right(90)

turtle.exitonclick()

A teraz to samo ale z pętlą while:

import turtle

zolwik = turtle.Turtle()
zolwik.speed(1)
zolwik.shape("turtle")

i = 0

while i < 4
    zolwik.forward(80)
    zolwik.right(90)
    i += 1

turtle.exitonclick()

b) rysunek kwiatu z kółek

import turtle

zolwik = turtle.Turtle()
zolwik.speed(6)
zolwik.shape("turtle")

i = 0
while i < 6:
    zolwik.circle(60)
    zolwik.left(60)
    i += 1

turtle.exitonclick()

c) rysunek kwiatu z kółek ale z parametrem

import turtle

zolwik = turtle.Turtle()
zolwik.speed(6)
zolwik.shape("turtle")

i = 0
ilosc_kolek = 10
kat = 360 / ilosc_kolek

while i < ilosc_kolek:
    zolwik.circle(60)
    zolwik.left(kat)
    i += 1

turtle.exitonclick()

d) przykład z Kahoota 1

n = 5
while n:
    n -= 1
    print(n, end=" ")

Wynik: 4 3 2 1 0

Kod zaczyna z wartością n = 5. W pętli while n:

  • Wartość n jest zmniejszana o 1 przy każdym obiegu (n = n - 1).
  • Aktualna wartość n jest wyświetlana, a argument end=" " powoduje, że liczby są wyświetlane w jednym wierszu, oddzielone spacją.

Pętla kończy się, gdy n osiągnie 0, ponieważ while n działa tylko wtedy, gdy n jest różne od zera (0 traktowane jest jak false).

e) przykład z Kahoota 2

i = 9
while i >= 9:
    print("Hej!")
    i -= 1
    if i == 8:
        break

Wynik:
Hej!

Zmienna i zaczyna się od wartości 9. Pętla while uruchomi się, ponieważ i>=9. Wewnątrz pętli:

    • Najpierw zostanie wyświetlony tekst "Hej!".
    • Następnie i jest zmniejszane o 1, więc i przyjmuje wartość 8.
    • Warunek if i == 8 jest spełniony, więc wykonana zostaje instrukcja break, która przerywa pętlę.

W wyniku tego pętla kończy swoje działanie po pierwszym wykonaniu, a kod wyświetla jednorazowo "Hej!".

f) przykład z Kahoota 3

i = 9
while i >= 9:
    print("Hej!")
    i -= 1
    if i == 8:
        break

Wynik:
Hej!

7) Błądzenie losowe

Prosta symulacja. Zakładamy, że jakiś obiekt przemieszcza się z jednego miejsca w drugie, w sposób losowy. Metoda wykorzystywana do np. sprawdzania ruchu molekuł w gazie, zmian cen na giełdzie, przemieszczania się zwierząt itd.

Możemy wykonać to zadanie za pomocą żółwia. Aby ułatwić sobie zadanie, przyjmijmy, że żółwik może skręcać tylko o 90 stopni, a ślad żółwia też losowo zmienia kolor.

Kolory do Pythona: https://cs111.wellesley.edu/labs/lab02/colors

import random
import turtle

# random walk to po polsku błądzenie losowe
# https://pl.wikipedia.org/wiki/B%C5%82%C4%85dzenie_losowe

screen = turtle.Screen()
screen.setup(1600, 960)
zolwik = turtle.Turtle()
zolwik.shape("turtle")
zolwik.pensize(5)
zolwik.speed(9)

kolory = [
    "CornflowerBlue",
    "DarkOrchid",
    "IndianRed",
    "DeepSkyBlue",
    "LightSeaGreen",
    "wheat",
    "SlateGray",
    "SeaGreen"
]

katy = [0, 90, 180, 270]

while True:
    zolwik.color(random.choice(kolory))
    zolwik.left(random.choice(katy))
    zolwik.forward(30)

8) Ciąg fibonacciego

Kolejna liczba będzie sumą dwóch poprzednich.

fibonacci = [0, 1]  

gorna_granica = 89  

while True:
    kolejna_liczba = fibonacci[-1] + fibonacci[-2]  
    
    if kolejna_liczba > gorna_granica:
        break  
    fibonacci.append(kolejna_liczba)  

print(fibonacci)  

Wynik: 
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]