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)

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