Lekcja 5 - pętle (notatki)

Pętle
W informatyce panuje zasada by wyeliminować powtórzenia w kodzie w myśl hasła "Don't repeat yourself" (w skrócie DRY). Temu służą pętle FOR i WHILE.
Pętle for tworzy się zgodnie ze wzorem: for element in ...: W następnej linijce po wcięciu podaje się to co ma nastąpić. W miejsce element wstawia się dowolną wartość, w miejsce wielokropka zmienną (pętla powtórzy się tyle razy ile jest przypisanych do zmiennej elementów) lub ilość powtórzeń jakie ma wykonać pętla.
PRZYKŁADY
moja_lista = [1,2,3,4,5]
for liczba in moja_lista:
print(Hello!)
Jest 5 elementów w zmiennej moja_lista, więc napis Hello zostanie wydrukowany 5 razy.
moj_slownik = {"a":1, "b":2, "c":3}
for klucz in moj_slownik:
print(klucz)
W przypadku gdy użyjemy w pętli słownika wydrukowane zostaną klucze.
for litera in "Robisz.to":
print(litera)
Jeśli nakażemy wydrukowanie elementu z pętli (w tym wypadku liczba), wydrukuje każdy znak z następującego po in stringa "Robisz.to".
Gdy nie korzystamy z tej wartości wyciągniętej ze zmiennej to przyjęło się, że w miejsce elementu wstawiamy znak "podłogi" ("_").
W momencie gdy nie chcemy tworzyć sztucznej listy z 1o elementami by powtórzyła się pętla korzystamy z funkcji range.
for i in range(10):
print(i)
Wydrukuje liczby od 0-9.
for _ in range(3):
print("Hej")
Wydrukuje Hej! trzykrotnie.
Jeśli chcemy wydrukować konkretny zestaw liczb w nawiasie po funkcji range podajmy od jakiej liczby zaczynamy, przed jaką kończymy i co ile się przeskakuje wartości, zgodnie ze wzorem range(start,stop,krok).
for i in range(1,20,2):
print(i)
Wydrukuje: 1 3 5 7 9 11 13 15 17 19
Gdy nie chcemy by drukowało wartości jeden pod drugim, lecz obok siebie rozdzielone spacją lub przecinkami korzysta się z end=" " / end=", ".
for i in range(5):
print(i, end=" ")
ZADANIA
moja_lista = [2,3,4]
a=1
for i in moja_lista:
a *= i
print(a)
Wyświetli się 24, bo najpierw a ma wartość 1 i jest mnożone przez pierwszy element listy tj. 2, potem pętla się powtarza a zostało nadpisane więc ma wartość 2 i zostaje pomnożone przez drugie element listy czyli 3. Potem a, które ponownie zostało nadpisane (czyli ma wartość 6) zostaje pomnożone przez ostatni element listy czyli 4. Ostatecznie zatem a ma wartość 24.
moja_lista = [2,3,4]
for i in moja_lista:
a = 1
a *= i
print(a)
Wyświetli się 4, ponieważ po przeniesieniu "a = 1" do wcięcia pod pętlą wartość a będzie z każdym razem nadpisywana wraz z kolejnym powtórzeniem pętli. Zatem w ostatnim powtórzeniu a będzie miało wartość 1 i zostanie przemnożona przez i, które będzie miało wartość 4. Dlatego ostateczny wynik to 4.
Gotowce
W bibliotece pythona znajduje się wiele "gotowców", które ułatwiają wykonanie wielu czynności, z których wiele wgranych jest już w podstawowej wersji pythona. Choć mogą ułatwić wykonanie wielu zadań należy korzystać z nich z umiarem i rozsądnie, ponieważ nie mając kontroli nad zawartym w nich kodem możemy narobić sobie problemów. Kiedy z nich korzystać? Gdy widzimy, że dane ułatwienie jest wielokrotnie ściągane, kiedy było niedawno aktualizowane a obejście się bez niego przysporzyłoby nam wielu linijek dodatkowego kodowania.
Aby zainstalować moduł, którego nie ma w naszej wersji pythona należy użyć terminalu i wpisać do niego: pip install nazwa_modulu. W momencie gdy chcemy skorzystać z już zainstalowanego modułu wystarczy na początku naszego pliku wpisać: import nazwa_modulu.
Moduł turtle
Jeden z bardziej znanych modułów to tzw. żółwik, który rysuje kształty na ekranie za pomocą kodu. Po wybraniu kształtu naszego "pędzla" czyli żółwika, ustawieniu jego szybkości ("zolwik.speed(...)") oraz opcjonalnie koloru linii ("zolwik.pencolor("...")") i jej grubości ("zolwik.pensize(...)") możemy przejść do kodowania jego ruchu.
import turtle
zolwik = turtle.Turtle()
zolwik.speed(5)
zolwik.shape("turtle")
# Tu wpiszemy kod
turtle.exitonclick()
Przykładowy kod. W miejsce # wpisujemy kod.
Można wykorzystać kilka komend do uruchomienia żółwia: naprzód (".forward(odległość)"), kółko (".circle(promień)"), skręć w prawo (".right(kąt skrętu)"), skręć w lewo (".left(kąt skrętu)") oraz unieś się (".penup()") by nie rysował linii i opadnij (".pendown()") - ponownie rysuje linie.
ĆWICZENIA
for _ in range(4):
zolwik.forward(100)
zolwik.right(90)
Gdy dodamy w miejsce linijki z # w powyższym przykładzie żółwik narysuje kwadracik.
W ten sposób można stworzyć każdy wielokąt foremny
ilosc_bokow = 8
for _ in range(ilosc_bokow):
zolwik.forward(100)
zolwik.right(360/ilosc_bokow)
Wzór na wielokąt foremny - zmieniasz tylko zmienną ilosc_bokow.
Lub wieloczęściową figurę np. rozetę:
ilosc_okreg = 8
for _ in range(ilosc_okreg):
zolwik.circle(40)
zolwik.left(360/ilosc_okreg)
Wzór na rozetę - zmieniasz tylko zmienną ilosc_okreg.
A także bardziej skomplikowane kształty:
for _in range(4):
for a in range(2):
zolwik.forward(100)
zolwik.right(90)
zolwik.forward(100)
zolwik.left(90)
Żółwik narysuje krzyżyk.
ilosc_slupkow = 4
for i in range(ilosc_slupkow):
for _ in range(2):
zolwik.forward(80)
zolwik.left(90)
zolwik.forward(80*(i + 1))
zolwik.left(90)
zolwik.forward(80)
Żółwik narysuje schody
Pamiętajmy że możliwe są różne rozwiązania umożliwiające osiągnięcie tego samego efektu:
ilosc_slupkow = 4
szerokosc_podstawy = 60
for i in range(ilosc_slupkow):
for _ in range(2):
zolwik.forward(szerokosc_podstawy)
zolwik.left(90)
zolwik.forward(szerokosc_podstawy*(i + 1))
zolwik.left(90)
zolwik.forward(szerokosc_podstawy)
Żółwik narysuje schody
ZADANIE
Odtwórz poniższą figurę:
import turtle
zolwik = turtle.Turtle()
zolwik.speed(5)
zolwik.shape("turtle")
rozmiar = 80
for _ in range(8):
for _ in range(4):
zolwik.forward(rozmiar)
zolwik.left(90)
rozmiar +=20
turtle.exitonclick()
Odtwórz poniższą figurę:
import turtle
zolwik = turtle.Turtle()
zolwik.speed(5)
zolwik.shape("turtle")
zolwik.pencolor("green")
zolwik.pensize(3)
ilosc_kwadratow = 15
for _ in range(ilosc_kwadratow):
for _ in range(4):
zolwik.forward(100)
zolwik.right(90)
zolwik.left(360/ilosc_kwadratow)
turtle.exitonclick()