Jezyki i metody programowania
Transkrypt
Jezyki i metody programowania
Jezyki ˛ i metody programowania Wykład 2 dr hab. Bożena Woźna-Szcześniak [email protected] Instytut Matematyki i Informatyki Akademia Jana Długosza w Cz˛estochowie Wykład na podstawie wykładów dr hab. Andrzeja Zbrzezngo Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python – grafika żółwia Wprowadzenie Grafika żółwia jest popularnym sposobem na wprowadzenie programowania dla dzieci. Była ona cz˛eścia˛ oryginalnego jezyka ˛ 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 dostepna ˛ jest poprzez moduł turtle: import turtle Pełna dokumentacja znajduje sie: ˛ https://docs.python.org/2/library/turtle.html Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python – grafika żółwia Moduł turtle – wybrane metody klasy _Screen Utworzenie okna graficznego – obiektu klasy _Screen, bed ˛ acej ˛ 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˛edne (0.00, 0.00) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python – grafika żółwia Moduł turtle – wybrane metody klasy _Screen Rozpocz˛ecie petli ˛ zdarzeń w oknie graficznym: w.mainloop() Zmiana koloru tła okna graficznego: w.background("lightgreen") w.background(144, 238, 144) Dostepne ˛ nazwy kolorów można znaleźć na stronie: http://www.tcl.tk/man/tcl8.5/TkCmd/colors.htm Dostepne ˛ nazwy kolorów można uzyskać w Linuksie poprzez polecenie: man n colors Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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() Przesuniecie ˛ żółwia w kierunku jego zgodnym z jego orientacja˛ o podana˛ liczbe˛ pikseli: t.forward(200) lub t.fd(200) t.backward(-200) lub t.bk(200) Przesuniecie ˛ żółwia w kierunku przeciwnym do jego orientacji o podana˛ liczbe˛ pikseli: t.backward(200) t.forward(-200) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python – grafika żółwia Moduł turtle – wybrane metody klasy Turtle Zmiana kształtu żółwia: t.shape("turtle") Nazwy dostepnych ˛ kształtów: "arrow", "turtle", "circle", "square", "triangle", "classic" Obrót żółwia w lewo o podana˛ liczbe˛ stopni: t.left(120) lub t.lt(120) Obrót żółwia w prawo o podana˛ liczbe˛ stopni: t.right(120) lub t.rt(120) Ustawienie orientacji żółwia na podana˛ liczbe˛ stopni: t.setheading(0) lub t.seth(0) Pobranie orientacji żółwia: o = t.heading() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python – grafika żółwia Moduł turtle – wybrane metody klasy Turtle Ustawienie predkości ˛ żółwia: t.speed(6) t.speed("normal") Predkość ˛ żółwia może być: liczba˛ całkowita˛ z zakresu od 0 do 10 albo jednym z nastepuj ˛ acych ˛ ł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 wiekszy ˛ od 10, to predkość ˛ jest ustawiana na 0. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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 Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python Funkcje Bardzo cz˛esto 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 sie, ˛ aby uprościć program i zwiekszyć ˛ jego czytelność. Funkcje ukrywaja˛ złożone obliczenia za pomoca˛ jednej instrukcji – wywołania funkcji. Utworzenie funkcji pozwala zmniejszyć program poprzez eliminacje˛ powtarzajacego ˛ sie˛ kodu. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python Funkcje Składnia definicji funkcji jest nastepuj ˛ aca: ˛ def nazwa(argumenty): blokInstrukcji Pierwsza linia funkcji zaczyna sie˛ od słowa kluczowego def a kończy dwukropkiem. Linia ta nazywa sie˛ 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ć sie˛ z dowolnej ilości argumentów oddzielonych przecinkami. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python Funkcje W trakcie wykonywania polecenia def nastepuje ˛ utworzenie obiektu funkcji. Nastepnie ˛ 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 Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python Funkcje Bezpośrednio po nagłówku funkcji może, ale nie musi, wystapić ˛ komentarz dokumentacyjny. Komentarze dokumentacyjne ujmuje sie˛ zazwyczaj w potrójne cudzysłowy, """dzieki ˛ czemu moga˛ one zajmować dowolnie wiele linii. Składnia definicji funkcji uwzgledniaj ˛ aca ˛ komentarz dokumentacyjny jest nastepuj ˛ aca: ˛ def nazwa(argumenty): """Opcjonalny komentarz dokumentacyjny mogacy ˛ zajmować wiele linii""" blokInstrukcji Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python Funkcje Funkcje moga˛ wywoływać inne funkcje: import turtle def draw_rectangle(t, width, height): """Niech żółw t narysuje prostokat ˛ 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) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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 sie˛ 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. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python Funkcje Każda funkcja Pythona posiada wartość zwrotna. ˛ Domyślnie wartościa˛ zwrotna˛ jest None, chyba że z wnetrza ˛ funkcji zostanie zwrócona inna wartość za pomoca˛ instrukcji o nastepuj ˛ acej ˛ składni: return wyrażenie Wykonanie powyższej instrukcji powoduje obliczenia wartości wyrażenia wyrażenie, po czym wartość ta staje sie˛ 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 ˛ funkcje; ˛ bedzie ˛ ona wówczas odrzucona. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ 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 wielokat ˛ 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1 Podstawy jezyka ˛ Python – funkcje Funkcje Aby zwiekszyć ˛ czytelność programu z poprzedniego slajdu przeprowadzimy refaktoryzacje˛ jego kodu źródłowego. Refaktoryzacja to proces wprowadzania zmian w programie, w wyniku którego zasadniczo nie zmienia sie˛ jego funkcjonalność. A zatem, celem refaktoryzacji nie jest wytwarzanie nowej funkcjonalności, ale osiagni ˛ ecie ˛ odpowiedniej, wysokiej jakości organizacji programu. Przykłady circle.py twocircles.py wheeels.py Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP /1