Python zajęcia 5 - pętla for i turtle

📚Biblioteki Python

W Pythonie możemy budować trochę jak z klocków. Python posiada wiele wbudowanych już modułów, stworzonych przez programistów.
Mają wiele zastosowań i możliwości- w tym prezentacje graficzną naszych programów. Ich dostępność i możliwosci dostępność sprawdzamy na PyPI
Biblioteki instalujemy w terminalu
Najprościej i najpewniej instalować za pomocą pip3 (jest mniej awarii)
pip3 install nazwa_modulu


aby użyć zainstalowanej biblioteki musimy ją zaimportować.
Najlepiej na górze kodu (kod czytany jest od góry do dołu) wpisać:

import nazwa_biblioteki

Warto pamiętać, że używanie "gotowców" może powodować wiele problemów bo nie mamy kontroli nad wewnętrznymi zmianami kodu.

więcej zależności == większa szansa na problemy w przyszłosci

Aby sprawdzić szczeguły biblioteki:  lewy ctrl i lewy klawisz myszy

✒️UV/Poetry- tworzenie i zarządzanie zależnosciami w środowiskach :https://python-poetry.org


DRY

DON'T REPEAT YOURSELF

Zasada przypominająca, aby unikać powtórzeń przy kodowaniu


➿Czym są pętle?

Pętle służą nam do wykonywania powtarzalnych czynności. Pozwalają na wielokrotne wykonanie kodu.

🔂Pętla for- wykonaj coś np. 10 razy
🔁pętla while- wykonuj coś tak długo aż spełniony jest jakiś warunek

⏰wybór pętli ma znaczenie dla szybkości działania

🔂Pętla For-
"wykonaj coś tyle razy ile jest elementów w"

-To pętla preferowana- jest szybsza bo Python z założenia wie, ile razy ma wykonać dane połączenie.
-umożliwia nam przemieszczanie się po elementach jakiejś sekwencji. np. po znakach w ciągu znaków, czy elementach listy/krotki (obiekty dla pętli są iterowalne)
-wcięcia oznaczają blok kodu tak jak w przypadku if

for litera in "Robisz.to":
  print(litera)

Żródło ilustracji: https://avendi.edu.pl/python-petle/

Co można robić z pętlą for- przykładowe

=Iterować (przemieszczać się) po kolekcjach= listy, tuple, słownik
-wypisywać liczby od do
-wyświetlać kolejne elementy listy
-wyświetlać klucze słownika

Funkcja range

Funkcja, która generuje nam sekwencje o wybranej przez nas długości. Np. kiedy chcemy coś zrobić 10 razy ale nie mamy gotowej sekwencji składającej się z 10 elementów. Zwraca nam sekwencje liczb całkowitych.
Range działa tylko z liczbami całkowitymi. Jest obiektem, który zwraca kolejne elementy żądanej sekwencji w trakcie swojego iterowania po nim, lecz naprawdę nie tworzy listy więc oszczędzamy miejsce w pamięci.
tworzymy ją aby przejść przez zestaw kodu określoną ilość razy. Zwraca nam sekwencję liczb zaczynajacą się od 0 i zwiększającą się o jeden kończącą się na określonej liczbie.

range(start, stop, krok)

for _ in range(3):
  print("Hello!")

Jeśli nei wykorzystujemy w żaden bezpośredni sposób elementu sekwencji to warto użyć znaku "_" jako nazwy. Dajemy w znać innym użytkownikom kodu jasną informację, że ten element jest nieużywany i służy jedynie do przemieszczania się w pętli.

for i in range(5):
    print(i)

# Wypisze:
# 0
# 1
# 2
# 3
# 4

Jeśli argument funkcji range jest mniejszy od 1 to nic nie zostanie wypisane.

for i in range(3):
    print(f"Zostały {3 - i} soki")
    print("Glup glup glup")

print("Nie ma już soku")

# Wypisze:
# Zostały 3 soki
# Glup glup glup
# Zostały 2 soki
# Glup glup glup
# Zostały 1 soki
# Glup glup glup
# Nie ma już soku

# przy argumencie 0

for i in range(0):
    print(i)

# Nic się nie wypisze

Pętla for - jak to działa

🔂Pętla for- przemieszczanie się po liście/ słowniku

for element in moja_lista:
  print(element)


  moj_slownik={"a":1, "b":2, "c":3}
    for i in moj_slownik:
    print(i)

Pętla wykonuje to samo zadanie dla każdego elementu po kolej

names = ["Ala", "Basia", "Celina"]
for name in names:
    print("Następne imię to " + name)

# Wypisze:
# Następne imię to Ala
# Następne imię to Basia
# Następne imię to Celina

Iteracja po kolekcjach

#iteracja po liście
rosliny = ["monstera", "filodendron", "ceropegia"]
for roslina in rosliny:
    print(roslina)

#iteracja po slowniku z użyciem .items()
stolice = {"France": "Paris", "Germany": "Berlin", "Italy": "Rome"}
for kraj, stolica in stolice.items():
    print(f"Stolica {kraj} : {stolica}")
#output to klucz:wartość jeden pod drugim

#iteracja po stringu

for litera in "robiszto":
    print(litera)
#output będzie robiszto- litera po literze w pionie

#zakres liczb z range
for i in range(5):  # range(start, stop, step)
    print(i)
#output to liczby od 0 do 4 w pionie

🐢Moduł turtle🐢

Służy do rysowania proceduralnego, czyli poprzez kod rysowania kształtów na ekranie. Wywodzi się z rozwiązań dla języka "Logo" z lat 60. W bardzo podobny sposób do żółwika działają maszyny sterowane numerycznie (CNC np. frezarka). Sposób tworzenia obiektów w ten sposób wykorzystuje się w architekturze

zazwyczaj jest zainstalowany, można go dodać przez instalacje bibliotek w terminalu : pip install turtle. Moduł może być instalowany z tkinter.
Importujemy go poprzez dodanie import turtle na początku naszego programu

Ważne cechy żółwika:
-nie używamy w zapisie plików słowa TURTLE

Jeśli nasz żółwik nie dziala możemy ćwiczyc online:

Python Sandbox | Turtle Mode

Obsługa żółwia

na początku import
po imporcie
zolwik=turtle.Turtle
to da nam przestrzeń do pracy i naszego żółwika
pod koniec kodu(albo koniec rysowania) dodać
turtle.exitonclick()
To spowoduje, że okno z programem zamknie się jak tylko żółwik skończy swój marsz

Wartości, które wyznaczamy żółwiowi to piksele

👉Sterowanie obiektem żółwik:

.forward(odległość) - żółwik idzie do przodu
.left(kąt) - żółwik w lewo o podany kąt
.right(kąt) idzie w prawo o podany kąt
.circle(promień) - okrąg o podanym promienu
.penup() zowik przemieszcza się bez śladu
.pendown() ponownie rysuje
.backward (odległość). żółwik się cofa

Używając instrukcji circle(promień) możemy narysować okrąg o podanym promieniu. Jeżeli jako drugi argument podamy dodatkowo kąt - circle(promień, kąt), będziemy mogli zamiast pełnego okręgu narysować pewien jego fragment. Na przykład polecenie circle(100, 180) narysuje półkole o promieniu 100.

📂dokumentacja o żółwiku: https://pythonsandbox.com/docs/turtle

🌈Kolory:

"CornflowerBlue",
"DarkOrchid",
"IndianRed",
"DeepSkyBlue",
"LightSeaGreen",
"wheat",
"SlateGray",
"SeaGreen",
"yellow",
"white",
"green"

kwadrat

import turtle
t = turtle.Turtle()
t.speed(5) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.forward(120)
t.right(90)
t.forward(120)
t.right(90)
t.forward(120)
t.right(90)
t.forward(120)
t.right(90)

Turtle idealnie sprawdza się do nauki pętli

sześciokąt - napisany bez pętli i z pętlą for

#sześciokąt napisany bez pętli

import turtle
t = turtle.Turtle()
t.speed(5) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.pensize(5)
t.pencolor("pink")
t.forward(120)
t.right(60)
t.forward(120)
t.right(60)
t.forward(120)
t.right(60)
t.forward(120)
t.right(60)
t.forward(120)
t.right(60)
t.forward(120)
t.right(60)

#sześciokąt z pętlą

import turtle
t = turtle.Turtle()
t.speed(5) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.pensize(5)
t.pencolor("pink")
ilosc_bokow = 6
bok = 50
for _ in range(ilosc_bokow):  
        t.forward(bok)
        t.left(60)

Wypełnianie kolorem🌈

Żółwik może wypełnić kolorem nasze rysunki. Instrukcja:
fillcolor(kolor) -ustalenie koloru wypełnienia
begin_fill()- rozpoczynanie wypełnienia
end_fill() zakończenie wypełnienia

Schody

import turtle
t = turtle.Turtle()
t.speed(5) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.pensize(5)
t.pencolor("pink")
t.forward(10)
wysokosc=[20,40,80,160]

for h in wysokosc:
    for _ in range(2):
        t.forward(50)
        t.left(90)
        t.forward(h)
        t.left(90)
    t.penup()
    t.forward(50)
    t.pendown()

Kwadraty

import turtle
t = turtle.Turtle()
t.speed(5) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.pensize(5)
t.pencolor("pink")

ilosc_kwadratow = 10
bok = 10
zwiekszajo = 20

for _ in range(ilosc_kwadratow):
    bok += zwiekszajo
    for _ in range(4):
        t.forward(bok)
        t.left(90)
    

źródło: https://www.jacektomasiewicz.pl/post/python-turtle-czyli-grafika-zolwia

Jeśli nie działa nam ten moduł w Visual Code Studio możemy skorzystać ze strony :https://pythonsandbox.com/turtle

turtle