Języki i metody programowania Wykład 2 dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Instytut Matematyki i Informatyki Akademia Jana Długosza w Częstochowie hab. Andrzeja Zbrzezngo
Podstawy języka Python grafika żółwia Wprowadzenie Grafika żółwia jest popularnym sposobem na wprowadzenie programowania dla dzieci. Była ona częścia oryginalnego języka programowania Logo zaprojektowanego w 1966 roku przez pracujacego w Massachusetts Institute of Technology Seymoura Paperta. Aby w systemie Ubuntu móc używać grafiki żółwia w Pythonie 3 należy zainstalować pakiet python3-tk: $ sudo apt-get install python3-tk Grafika żółwia w Pythonie dostępna jest poprzez moduł turtle: import turtle Pełna dokumentacja znajduje się: https://docs.python.org/2/library/turtle.html
Podstawy języka Python grafika żółwia Moduł turtle wybrane metody klasy _Screen Utworzenie okna graficznego obiektu klasy _Screen, będacej podklasa klasy TurtleScreen oraz przypisanie odniesienia do tego obiektu do zmiennej: w = turtle.screen() Zmiana tytułu okna graficznego: w.title("plac zabaw dla żółwi") Zmiana rozmiaru okna graficznego: w.setup(0.8, 0.5) 80% szerokości ekranu i 50% wysokości ekranu w.setup(600, 400) szerokość okna 600 pikseli, wysokość okna 400 pikseli Środek okna graficznego ma współrzędne (0.00, 0.00)
Podstawy języka Python grafika żółwia Moduł turtle wybrane metody klasy _Screen Rozpoczęcie pętli zdarzeń w oknie graficznym: w.mainloop() Zmiana koloru tła okna graficznego: w.background("lightgreen") w.background(144, 238, 144) Dostępne nazwy kolorów można znaleźć na stronie: http://www.tcl.tk/man/tcl8.5/tkcmd/colors.htm Dostępne nazwy kolorów można uzyskać w Linuksie poprzez polecenie: man n colors
Podstawy języka Python grafika żółwia Moduł turtle wybrane metody klasy Turtle Utworzenie żółwia obiektu klasy Turtle oraz przypisanie odniesienia do tego obiektu do zmiennej: t = turtle.turtle() Przesunięcie żółwia w kierunku jego zgodnym z jego orientacja o podana liczbę pikseli: t.forward(200) lub t.fd(200) t.backward(-200) lub t.bk(200) Przesunięcie żółwia w kierunku przeciwnym do jego orientacji o podana liczbę pikseli: t.backward(200) t.forward(-200)
Podstawy języka Python grafika żółwia Moduł turtle wybrane metody klasy Turtle Zmiana kształtu żółwia: t.shape("turtle") Nazwy dostępnych kształtów: "arrow", "turtle", "circle", "square", "triangle", "classic" Obrót żółwia w lewo o podana liczbę stopni: t.left(120) lub t.lt(120) Obrót żółwia w prawo o podana liczbę stopni: t.right(120) lub t.rt(120) Ustawienie orientacji żółwia na podana liczbę stopni: t.setheading(0) lub t.seth(0) Pobranie orientacji żółwia: o = t.heading()
Podstawy języka Python grafika żółwia Moduł turtle wybrane metody klasy Turtle Ustawienie prędkości żółwia: t.speed(6) t.speed("normal") Prędkość żółwia może być: liczba całkowita z zakresu od 0 do 10 albo jednym z następujacych łańcuchów znaków: "fastest" : 0 "slowest" : 1 "slow" : 3 "normal" : 6 "fast" : 10 Jeżeli argument metody speed jest mniejszy lub równy od 0.5 lub większy od 10, to prędkość jest ustawiana na 0.
Podstawy języka Python grafika żółwia Przykłady Program p0301-bob.py Program p0302-tess.py Program p0303-tessandbob.py Program p0304-square.py Program p0305-colorsquare.py Program p0306-stamps.py
Podstawy języka Python Funkcje Bardzo często zachodzi potrzeba wielokrotnego wykonania tej samej samej sekwencji instrukcji, ale z drobna różnica, na przykład z inna wartościa poczatkow a. Funkcja to nazwana sekwencja instrukcji realizujaca specyficzne zadanie. Celem definiowania funkcji jest podzielenie programu na fragmenty odzwierciedlajace sposób myślenia o danym problemie. Funkcje stosuje się, aby uprościć program i zwiększyć jego czytelność. Funkcje ukrywaja złożone obliczenia za pomoca jednej instrukcji wywołania funkcji. Utworzenie funkcji pozwala zmniejszyć program poprzez eliminację powtarzajacego się kodu.
Podstawy języka Python Funkcje Składnia definicji funkcji jest następujaca: def nazwa(argumenty): blokinstrukcji Pierwsza linia funkcji zaczyna się od słowa kluczowego def a kończy dwukropkiem. Linia ta nazywa się nagłówkiem funkcji. Nazwa funkcji musi być identyfikatorem (nie może być słowem kluczowym). Lista argumentów może być pusta lub może składać się z dowolnej ilości argumentów oddzielonych przecinkami.
Podstawy języka Python Funkcje W trakcie wykonywania polecenia def następuje utworzenie obiektu funkcji. Następnie do zmiennej, której nazwa jest nazwa funkcji, przypisywane jest odniesienie do obiektu funkcji. Z faktu, że funkcje sa obiektami wynika iż moga być one przechowywane w kolekcjach zbiorów danych i przekazywane jako argumenty do innych funkcji, Przykład Program squares.py
Podstawy języka Python Funkcje import turtle def draw_multicolor_square(t, length): for c in ["red", "purple", "hotpink", "blue"]: t.color(c); t.forward(length); t.left(90) def main(): wn = turtle.screen(); wn.bgcolor("lightgreen") tess = turtle.turtle(); tess.pensize(3) for length in range(20, 200, 10): draw_multicolor_square(tess, length) tess.forward(10); tess.right(18) wn.mainloop() main()
Podstawy języka Python Funkcje Bezpośrednio po nagłówku funkcji może, ale nie musi, wystapić komentarz dokumentacyjny. Komentarze dokumentacyjne ujmuje się zazwyczaj w potrójne cudzysłowy, """dzięki czemu moga one zajmować dowolnie wiele linii. Składnia definicji funkcji uwzględniajaca komentarz dokumentacyjny jest następujaca: def nazwa(argumenty): """Opcjonalny komentarz dokumentacyjny mogący zajmować wiele linii""" blokinstrukcji
Podstawy języka Python funkcje import turtle def draw_square(t, length): """Niech żółw t narysuje kwadrat o boku length""" for j in range(4): t.forward(length); t.left(90) def main(): win = turtle.screen() win.bgcolor("lightgreen"); win.title("kwadrat") bob = turtle.turtle(); bob.color("blue"); bob.pensize(3); draw_square(bob, 150) win.mainloop() main()
Podstawy języka Python Funkcje Funkcje moga wywoływać inne funkcje: import turtle def draw_rectangle(t, width, height): """Niech żółw t narysuje prostokąt o podanej szerokości i wysokości""" for j in range(2): t.forward(width); t.left(90) t.forward(height); t.left(90) def draw_square(t, length): """Niech żółw t narysuje kwadrat o boku length""" draw_rectangle(t, length, length)
Podstawy języka Python Funkcje W celu zapewnienia, że funkcja jest zdefiniowana przed jej pierwszym użyciem, należy rozumieć, w jakiej kolejności wykonywane sa instrukcje. Kolejność wykonywania instrukcji jest nazywana przepływem sterowania. Wykonanie programu zaczyna się zawsze od jego pierwszej instrukcji. Instrukcje sa wykonywane pojedynczo, w kolejności od góry do dołu. Definicje funkcji nie zmieniaja przepływu sterowania programu. Instrukcje wewnatrz funkcji nie sa wykonywane, aż do momentu gdy funkcja zostanie wywołana.
Podstawy języka Python funkcje Niepoprawna kolejność instrukcji import turtle def main(): win = turtle.screen() bob = turtle.turtle() draw_hexagon(bob, 150) win.mainloop() main() def draw_hexagon(t, length): for j in range(6): t.left(60) t.forward(length)
Podstawy języka Python funkcje Poprawna kolejność instrukcji import turtle def draw_hexagon(t, length): for j in range(6): t.left(60) t.forward(length) def main(): win = turtle.screen() bob = turtle.turtle() draw_hexagon(bob, 150) win.mainloop() main()
Podstawy języka Python funkcje Poprawna i polecana kolejność instrukcji import turtle def main(): win = turtle.screen() bob = turtle.turtle() draw_hexagon(bob, 150) win.mainloop() def draw_hexagon(t, length): for j in range(6): t.left(60) t.forward(length) main()
Podstawy języka Python Funkcje Każda funkcja Pythona posiada wartość zwrotna. Domyślnie wartościa zwrotna jest None, chyba że z wnętrza funkcji zostanie zwrócona inna wartość za pomoca instrukcji o następujacej składni: return wyrażenie Wykonanie powyższej instrukcji powoduje obliczenia wartości wyrażenia wyrażenie, po czym wartość ta staje się wartościa zwrotna danej funkcji. Wartość zwrotna może być pojedyncza wartościa badź krotka wartości. Wartość zwrotna może zostać zignorowana przez wywołujacego funkcję; będzie ona wówczas odrzucona.
Podstawy języka Python funkcje import math, turtle def main(): win = turtle.screen(); win.bgcolor("khaki2"); bob = turtle.turtle(); bob.color("blue"); bob.pensize(3); bob.speed(0) draw_circle(bob, 300, 720) win.mainloop() def draw_circle(t, r, n): """Rysuje wielokąt foremny o n bokach""" t.penup(); t.goto(0, -r); t.pendown() length = (2 * math.pi * r) / n for j in range(n): t.left(360 / n); t.forward(length) main()
Podstawy języka Python funkcje Funkcje Aby zwiększyć czytelność programu z poprzedniego slajdu przeprowadzimy refaktoryzację jego kodu źródłowego. Refaktoryzacja to proces wprowadzania zmian w programie, w wyniku którego zasadniczo nie zmienia się jego funkcjonalność. A zatem, celem refaktoryzacji nie jest wytwarzanie nowej funkcjonalności, ale osiagnięcie odpowiedniej, wysokiej jakości organizacji programu. Przykłady circle.py twocircles.py wheeels.py