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