• Nie Znaleziono Wyników

Ćwiczenia z PYTHONa

N/A
N/A
Protected

Academic year: 2021

Share "Ćwiczenia z PYTHONa"

Copied!
59
0
0

Pełen tekst

(1)

Ćwiczenia z PYTHONa

(2)
(3)

Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki

Instytut Informatyki

Ćwiczenia z PYTHONa

Andrzej Krajka

Lublin 2012

(4)

Instytut Informatyki UMCS Lublin 2012

Andrzej Krajka

Ćwiczenia z PYTHONa

Recenzent:

Opracowanie techniczne:

Projekt okładki:

Praca współfinansowana ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Publikacja bezpłatna dostępna on-line na stronach

Instytutu Informatyki UMCS: informatyka.umcs.lublin.pl.

Wydawca

Uniwersytet Marii Curie-Skłodowskiej w Lublini Instytut Informatyki

pl. Marii Curie-Skłodowskiej 1, 20-031 Lublin www: informatyka.umcs.lublin.pl

email: dyrii@hektor.umcs.lublin.pl

Druk

ISBN: 978-83-62773-xx-x

(5)

Spis treści

1 Wstęp do Pythona 7

2 Struktury danych 15

3 Zaawansowane techniki programowania 21

4 GUI w Tkinterze 25

5 VPython i wizualizacja 37

6 Django 47

6.1. Początek . . . 48

6.2. Blog . . . 49

6.3. Osoba . . . 50

6.4. Rekrutacja . . . 51

6.5. Obsługa bazy danych . . . 53

6.6. Amazon . . . 56

(6)
(7)

Rozdział 1

Wstęp do Pythona

(8)

8 1. Wstęp do Pythona Zad. 1.1. Który ze sposobów zapisu liczby 7 jest poprawny? Co oznaczają pozostałe wyrażenia? Jaki jest ich wynik?

Listing 1.1. Zapis liczb

>>> 7

>>> 7L

>>> . 7

>>> 7 .

>>> 7 ,

>>> 7 . 0

>>> 7 . e−1

>>> 7 e+01

>>> 0 . 7 e−1

>>> 0 . 7 e+1

>>> [ 3 . 0 , 5 . 1 2 , 70e −1][ −1]

>>> i n t ( ' 7 3 2 ' )

>>> i n t ( ' 7 ' )

>>> { 3 : [ 2 , 5 ] , ' a ' : [ 5 , 1 2 ] , 0 : [ 1 , 7 , 6 ] } [ 0 ] [ 1 : 2 : 1 ]

>>> (2+7 j ) . imag

>>> 07

>>> 0xA

>>> 1<<2+3

>>> (1<<2)+3

>>> (1<<2)+(1<<1)+1

>>> 15 & 7

>>> 22 // 3

>>> 21 % 14

Zad. 1.2. Który ze sposobów przedstawienia liczby

12

jest poprawny? Co oznaczają pozostałe wyrażenia? Jaki jest ich wynik?

Listing 1.2. Zapis liczb

>>> 5E−1

>>> (3==3)/2

>>> (3==3) /2.0

>>> 1/2

>>> f l o a t ( 1 ) /2

>>> 5 .

>>> 0 . 5L

>>> 5∗((2 >3) <2)

>>> 1.0>>2

>>> 1 / ( ( ' a'=='A'|2 <3) +1)

Zad. 1.3. Porównywanie typów. Co będzie efektem każdej z tych instruk-

cji?

(9)

9 Listing 1.3. Różne typy danych

>>> import t y p e s

>>> t y p e (12345)

>>> t y p e (44559999999)

>>> t y p e (123L)

>>> t y p e (" Ala i As ")

>>> a=123

>>> t y p e ( a )

>>> a=i n t

>>> t y p e ( a )

>>> a=t u p l e

>>> t y p e ( a )

>>> a

>>> b=t y p e ( a )

>>> t y p e ( b )

>>> t y p e (123+3.5 e −12)

>>> c l a s s a :

d e f __init__ ( s e l f ) : s e l f =("To" ,3)

>>> t y p e ( a )

>>> a =123.55

>>> i s i n s t a n c e ( a , f i l e )

>>> i s i n s t a n c e ( a , s t r )

>>> i s i n s t a n c e ( a , f l o a t )

>>> t y p e ( ' ' )

>>> s = ' xyz '

>>> t y p e ( s )

>>> t y p e (100)

>>> t y p e (0+0 j )

>>> t y p e ( 0 . 0 )

>>> t y p e ( [ ] )

>>> t y p e ( ( ) )

>>> t y p e ({})

>>> t y p e ( t y p e )

Zad. 1.4. Konwersja typów. Jaki typ otrzymamy w wyniku tych konwersji?

Listing 1.4. Konwersja typów

>>> import s y s

>>> a="1234+3.55E11/pow ( 1 0 , 4 ) "

>>> e v a l ( a )

>>> p r i n t complex ( a )

>>> p r i n t chr ( a )

>>> p r i n t a

>>> p r i n t ord ( a )

>>> ord ( a [ 0 ] )

>>> t u p l e ( a )

>>> a="123"

>>> s t r ( i n t ( a ) )

(10)

10 1. Wstęp do Pythona

>>> s t r ( t u p l e ( a ) )

>>> a=3.5 −2.32E−3J

>>> a . r e a l

>>> i n t ( a . r e a l )

>>> complex ( i n t ( a . r e a l ) )

>>> a="10010101"

>>> l=i n t ( a , 2 )

>>> a="2 a f 4 "

>>> l=i n t ( a , 1 6 )

>>> c o e r c e (3 , 7)

>>> c o e r c e ( 2 . 7 , 113L)

>>> c o e r c e (2 , 151L)

>>> c o e r c e (5 j , 15L)

>>> c o e r c e (2.25 −12 j , 230L)

Zad. 1.5. Co będzie efektem tych instrukcji?

Listing 1.5. Operacje na liczbach

>>> a , b , c , d =12 ,0 ,138 ,0.5

>>> a+=2

>>> b−=2

>>> c∗=2

>>> d/=2

>>> a ; b ; c ; d

>>> divmod ( 1 7 , 5 )

>>> a = '12 '

>>> b=i n t ( a )

>>> c=i n t ( a , 7 )

>>> d=i n t ( '1A3 ' , 1 1 )

>>> pow ( 3 , 5 , 7 )

>>> pow ( 3 , 5 )

>>> 243 % 7

>>> (3.0+2.5 e−2 j ) . c o n j u g a t e ( )

>>> d e l a ; d e l b ; d e l c ; d e l d

Zad. 1.6. Co będzie efektem tych instrukcji?

Listing 1.6. Zasięg liczb

>>> 0 . 1 + 0 . 1 + 0 . 1 − 0 . 3

>>> 2000403030 ∗ 392381727

>>> 2000403030 ∗ 3923817273929

>>> 2 e304 ∗ 3923817273929

>>> 2 e34 ∗ 3923817273929

>>> a=2e304 ∗ 3923817273929

>>> b=−a

>>> b

>>> d=a+b

(11)

11

>>> c=1/b

>>> c

>>> import s y s

>>> s y s . maxint

>>> s y s .__doc__

>>> d i r ( s y s )

Zad. 1.7. Co będzie efektem tych operacji?

Listing 1.7. Operacje binarne

>>> b=1

>>> a=64+32+16+8+4+2+1

>>> c =011010

>>> d=001110

>>> a ^ b

>>> c ^ d

>>> a & b

>>> a >> 3

>>> a/pow ( 2 , 3 )

>>> a & b & c & d

Zad. 1.8. Napisz procedurę o nazwie ’compare(a,b)’ porównującą dwa obiek- ty a i b. Procedura ma rozstrzygać, czy:

1. a i b są różnymi wskaźnikami na to samo miejsce w pamięci komputera, a więc czy są to te same obiekty

2. czy a i b mają te same wartości 3. Czy a i b mają te same typy 4. czy a jest instancją b

5. Czy b jest instancją a

6. Czy któraś z tych zmiennych nie przyjęła wartości None.

Co będzie efektem tych instrukcji?

Listing 1.8. Garbage collection

>>> import copy

>>> a=2

>>> b=3

>>> b=2

>>> compare ( a , b )

>>> a =[1 ,2 ,3]

>>> b =[1 ,2 ,3]

>>> compare ( a , b )

>>> b =[1 ,2 ,3]

>>> a=copy . deepcopy ( b )

>>> compare ( a , b )

>>> b=a

(12)

12 1. Wstęp do Pythona

>>> compare ( a , b )

>>> a =(1 ,2 ,3)

>>> b =(1 ,2 ,3)

>>> compare ( a , b )

>>> a=5

>>> b=1

>>> compare ( a , b )

>>> a =[1 ,2 ,3]

>>> b=a

>>> b [1]=0

>>> p r i n t a

>>> compare ( a , b )

>>> a=3+0J

>>> b=3

>>> compare ( a , b )

Zad. 1.9. Co będzie efektem tych instrukcji?

Listing 1.9. Operatory logiczne

>>> 2==4

>>> p r i n t e v a l ("2=2")

>>> p r i n t a==2

>>> a=2

>>> a==2

>>> 2!=2

>>> 2<>4

>>> p r i n t e v a l ("2><4")

>>> 2<=4

>>> ' Ala ' ! = ' Ola '

>>> ' Ala '>='Ola '

>>> 'A' < 'Aa '

>>> "123" >"14"

>>> 22.0/7 >3.14

>>> (1+2+3+4)∗0xA==0100+6∗6

>>> ' Ala '∗2== ' Ala '+ ' Ala '

>>> 1<=3<7

>>> 1>=1>2

>>> 2==2>1.1>−1>−1000

>>> (1==2)==(2<3)

>>> not 1==1

>>> 1==2 or 1==3 or 1==1

>>> ' Abc'=='Def ' or 7>100 or 1==1

>>> 1==1 and 2==3 and 3==3

>>> F a l s e and F a l s e or True

>>> F a l s e and ( F a l s e or True )

>>> False <12.3 <{ '1 ':1} <[1 ,2 ,3] <" Ala " <(1 ,2)

Zad. 1.10. Co będzie efektem tych instrukcji?

(13)

13 Listing 1.10. Liczby zespolone

>>> 1 j ∗ 1J

>>> 1 j ∗ complex ( 0 , 1 )

>>> 3+1 j ∗3

>>> (3+1 j ) ∗3

>>> (1+2 j ) /(1+1 j )

>>> a =1.5+0.5 j

>>> a . r e a l

>>> a . imag

>>> a =1.5+0.5 j

>>> p r i n t f l o a t ( a )

>>> abs ( a )

Zad. 1.11. Wiedząc, że pierwiastek n-tego stopnia z x równa się x do potęgi 1/n i wykorzystując wiedzę o użyciu liczb zespolonych w Pythonie, wylicz wartość pierwiastka drugiego stopnia z −7.

Zad. 1.12. Używając instrukcji Pythona oblicz resztę z dzielenia 11 przez 7 i zapamiętaj wynik w zmiennej o nazwie Z. Następnie, pojedynczym pole- ceniem Pythona i bez użycia nawiasów, przemnóż zmienną Z przez Z + 1.

Zad. 1.13. Spowoduj pojedynczym poleceniem Pythona, by na ekranie 200 - krotnie wyświetliła się wartość wyrażenia 1.23e + 4 + 45.0 każdorazowo rozdzielona średnikiem.

Zad. 1.14. Napisz skrypt, który zsumuje dwie liczby, nie używając znaku

”+” (w całym skrypcie).

Zad. 1.15. Co będzie efektem działania tych poleceń?

Listing 1.11. Sekwencje mutowalne i niemutowalne

>>> a =[1 ,2 ,3]

>>> p r i n t a

>>> a [2]= ' d '

>>> p r i n t a

>>> a =(1 ,2 ,3)

>>> p r i n t a

>>> a [2]= ' d '

>>> a="abcd "

>>> p r i n t a

>>> a [2]= ' e '

(14)
(15)

Rozdział 2

Struktury danych

(16)

16 2. Struktury danych

Zad. 2.1. Co będzie efektem działania tych poleceń?

Listing 2.1. Przykłady operowania na wszystkich sekwencjach

>>> l e n (" abc ")

>>> t x t =" s t r i n g t o n a p i s "

>>> t x t

>>> l e n ( t x t )

>>> l e n ( t x t ∗20)

>>> t x t ∗2

>>> " abc "[ −1]

>>> " abc "[ −2]

>>> t x t [ 0 ]

>>> t x t [ : 4 ]

>>> t x t [ 5 : 9 ]

>>> t x t [ 5 : 1 0 : 2 ]

>>> t x t [: −9]

>>> t x t [ −12: −5:2]

>>> a = [ 1 , 2 , 3 , 4 , 5 ]

>>> b =( 'a ' , ' b ' , ' c ' , ' d ' , ' e ' )

>>> a

>>> b

>>> a [ −5: −1:2]

>>> b [ 0 : − 2 : 2 ]

>>> a = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 , 1 1 , 1 2 , 1 3 ]

>>> a [ : : 3 ]

>>> a [ : : − 3 ]

>>> a [ 0 : 7 : 3 ]

>>> a [ 7 : 0 : − 3 ]

>>> a [ : 9 : 1 ]

>>> a [ : 9 : − 1 ]

>>> a [ 9 : : 1 ]

>>> a [ 9 : 0 : − 1 ]

Zad. 2.2. Co będzie efektem działania tych poleceń?

Listing 2.2. Operację na łańcuchach

>>> p r i n t " n a p i s "

>>> a=' inny napis '

>>> p r i n t a

>>> a=' n a p i s z " apostrofem " ten '

>>> a=' n a p i s z \ ' apostrofem \ ' ten '

>>> p r i n t a

>>> a=""" Napis w w i e l u l i n i j k a c h

z ' apostrofem ' """

>>> p r i n t a

>>> a=r """ Ten n a p i s t e \ x b f j e s t w i e l o l i n i j k o w y i ma dwie l i n i j k i """

p r i n t a

(17)

17

>>> a=""" Ten n a p i s t e \ x b f j e s t w i e l o l i n i j k o w y i ma dwie l i n i j k i """

>>> p r i n t a

>>> p r i n t s

>>> p r i n t s . c a p i t a l i z e ( )

>>> p r i n t s . c e n t e r (32)

>>> p r i n t s . c e n t e r (64)

>>> p r i n t s . c e n t e r ( 6 4 , ' ∗ ' )

>>> p r i n t s . count ( ' t ' )

>>> p r i n t ( s ∗10) . count ( s )

>>> p r i n t s . f i n d ( 'NAPIS ' )

>>> p r i n t s . f i n d ( ' napis ' )

>>> p r i n t s . i s d i g i t ( )

>>> p r i n t ' 1 8 ' . i s d i g i t ( )

>>> p r i n t ' 1 8 . 2 ' . i s d i g i t ( )

>>> p r i n t ' ' . j o i n ( [ ' ala ' , ' ma' , ' kota ' ] )

>>> p r i n t ' , ' . j o i n ( [ ' ala ' , ' ma' , ' kota ' ] )

>>> p r i n t s . j o i n ( [ ' ∗ ∗ ∗ ' ] ∗ 5 )

>>> p r i n t s . lower ( )

>>> p r i n t s . r e p l a c e ( 'NAPIS ' , ' t e k s t ' )

>>> p r i n t s . r e p l a c e ( ' ','−−−')

>>> p r i n t s . r f i n d ( 'NAPIS ' )

>>> p r i n t ' a l a ma kota ' . r f i n d ( ' a ' )

>>> p r i n t s . r f i n d ( ' napis ' )

>>> p r i n t s . r j u s t (32)

>>> p r i n t s . r j u s t (64)

>>> p r i n t s . r j u s t ( 6 4 , ' . ' )

>>> p r i n t s . s p l i t ( )

>>> f o r wyraz in s . s p l i t ( ) :

p r i n t wyraz . c a p i t a l i z e ( ) . r j u s t (60)

>>> p r i n t '032 −345 −231 '. s p l i t ( ' − ')

>>> p r i n t ( ( s +'\n ' ) ∗10) . s p l i t l i n e s ( )

>>> p r i n t s . swapcase ( )

>>> p r i n t s . t i t l e ( )

Zad. 2.3. Napisz program drukujący znaki UNICODE w zasięgu od kodów 32 do 1970 używając funkcji ’unichr’ zamieniającą kod liczbowy na znak UNICODE.

Zad. 2.4. Co wydrukuje ten program?

Listing 2.3. Formatowanie łańcuchów

>>> k=123

>>> l =12.55321

>>> c=" w i t a j c i e "

>>> d={'u ' : 1 7 , ' v ' : 1 . 2 3 4 5 , ' z ' : ' t u t a j ' }

>>> p r i n t ' l i c z b a l t o %d ' % l

>>> p r i n t '%5d %f ' % ( k , l )

>>> p r i n t '%−07d %E' % ( k , l )

(18)

18 2. Struktury danych

>>> p r i n t '%( v ) 0 . 3 g %(u )−5d ' % d

>>> p r i n t '%0.4 s %2.3 s ' % ( c , d [ ' z ' ] )

>>> p r i n t '%∗.∗ f ' % ( 5 , 3 , l )

>>> p r i n t ' k = %d ' % k

Zad. 2.5. Przeanalizuj program:

Listing 2.4. Szablony

>>> a=u""" Drogi Panie %(nazwisko ) s ,

Prosz \ u0119 wys\ u0142a \ u0107 mi %(przedmiot ) s l u b zap \ u0142aci \ u0107 %(kwota ) 3 . 2 f z \ u0142 .

\ u0141 \ u0105cz \ u0119 wyrazy szacunku i powa\ u017cania Andrzej Krajka

"""

>>> p r i n t a % { ' nazwisko ' : ' Kowalski ' , ' przedmiot ' : ' b l e n d e r ' , \ ' kwota ' : 2 0 0 . 0 0 }

>>>

>>> import s t r i n g

>>> a = s t r i n g . Template ( u""" Drogi Panie $nazwisko ,

Prosz \ u0119 wys\ u0142a \ u0107 mi $przedmiot l u b zap \ u0142aci \ u0107

$kwota z \ u0142 .

\ u0141 \ u0105cz \ u0119 wyrazy szacunku i powa\ u017ania Andrzej Krajka """)

>>> p r i n t a . s u b s t i t u t e ({ ' nazwisko ' : ' Kowalski ' , \ ' przedmiot ' : ' b l e n d e r ' , ' kwota ' : "%0.2 f " % 5 0 . 0 } )

Zad. 2.6. Jaka będzie w każdej chwili wartość list1 i list2?

Listing 2.5. Listy

l i s t 1 =[" aa " , ' bb ' , 2 , 5 . 1 ] l i s t 1 . append ( ' dd ' )

l i s t 1 . append ( [ ' pp ' ] ) l i s t 1 . remove ( [ ' pp ' ] ) l i s t 1 . remove ( 2 ) l i s t 1 . remove ( 2 ) l i s t 1 . pop ( 2 )

l i s t 1 . e x t e n d ( [ ' pp ' ] ) l i s t 1 . i n s e r t ( 2 , 'ww' ) l i s t 1 . r e v e r s e ( ) l i s t 1 . s o r t ( )

l i s t 1 . i n d e x ( ' dd ' ) 2 l i s t 1 +=['hh ' ]

(19)

19

l i s t 1 +='rr ' l i s t 2 =[" cc " , 0 ] l i s t 2 ∗=3 l i s t 1 [ −1:0: −1]

Zad. 2.7. Napisz procedurę sortującą znaki łańcucha w następującej kolej- ności: ”AaBbCc...”.

Zad. 2.8. Napisz program wypisujacy na standardowym wyjściu następu- jący napis: ”Napis zawierający różne dziwne znaczki // \\$ & %”.

Zad. 2.9. Napisz program, który wczytuje z wejścia nieujemną liczbę cał- kowitą n i wypisuje na standardowym wyjściu element ciagu Fibonacciego o indeksie n (lub wszystkie elementy do elementu n włącznie). Ciąg Finonac- ciego zadany jest równaniem rekurencyjnym:





F

0

= 0, F

1

= 1,

F

n

= F

n−1

+ F

n−2

, n ≥ 2.

Zad. 2.10. Uogólnij zadanie 2.9 do uogólnionego ciągu Fibonacciego za- danego wzorem





F

i

= 0, i = 1, 2, 3, . . . p − 1, F

p

= 1,

F

n

=

pk=1

F

n−k

, n ≥ p + 1.

Zad. 2.11. Woda zamarza przy 32 stopniach Fahrenheita, a wrze przy 212 stopniach Fahrenheita. Napisz program ”stopnie.py”, który wyświetli tabelę przeliczeń stopni Celsjusza na stopnie Fahrenheita i na odwrót. Pamiętaj o wyświetlaniu znaku plus/minus przy temperaturze.

Zad. 2.12. (Problem Flawiusza) Ustawiamy n osób w zamkniętym kole i usuwamy z tego koła po kolei co k-tą osobę dopóty dopóki pozostaję co najmniej jedna osoba. Na którym miejscu (numer) ma stać osobą która po- zostanie do końca? Jakie są numery kolejno eliminowanych osób?

Zad. 2.13. Napisz funkcję ’DataDiff ’ która, bez użycia zewnętrznych bi- bliotek wylicza różnicę w ilościach dni pomiędzy dwoma datami zadanymi listami: [dzień, miesiąc, rok]. Lata przestępne są to lata podzielne przez 4 ale niepodzielne przez 100 lub podzielne przez 400.

Zad. 2.14. Napisz program zamieniający dowolną liczbę w liczbę w notacji

rzymskiej oraz program odwrotny - liczba w notacji rzymskiej zamieniona na

liczbę arabską.

(20)

20 2. Struktury danych Zad. 2.15. Napisz funkcję isprime, która dla zadanej liczby naturalnej p testuje, czy ta liczba jest pierwsza.

Zad. 2.16. Napisz funkcję factor1 która dla zadanej liczby naturalnej n zwraca wszystkie dzielniki mniejsze bądź równe od n (bez wykładników) ale większe od 1.

Zad. 2.17. Napisz funkcję factor, która dla zadanej liczby naturalnej n zwraca wszystkie dzielniki pierwsze ≤ n ale większe od 1 (bez wykładników).

Zad. 2.18. Napisz funkcję factorprim, która dla zadanej liczby natural- nej n zwraca wszystkie dzielniki pierwsze n (z wykładnikami, np:

factorprim(300)=[(2,2),(3,1),(5,2)]). Pełna faktoryzacja n

Zad. 2.19. Napisz program, który wczytuje ze standardowego wejścia licz- bę n i wypisuje na standardowym wyjściu wszystkie trójki pitagorejskie (tj.

trójki liczb całkowitych a < b < c takich, że a

2

+ b

2

= c

2

), składające sie z liczb mniejszych od n.

Zad. 2.20. Napisz funkcję euler, która wczytuje ze standardowego wej-

ścia dodatnią liczbę n i wypisuje na standardowym wyjściu wszystkie liczby

mniejszych od n, wzglednie pierwszych z n.

(21)

Rozdział 3

Zaawansowane techniki programowania

(22)

22 3. Zaawansowane techniki programowania Zad. 3.1. Napisz program, który dla dowolnego zadanego słownika dic- tion zwraca słownik w którym kluczami są wartości a wartościami klucze słownika diction. Zrób to kilkoma sposobami.

Zad. 3.2. Dany jest graf opisany słownikiem w następujący sposób: G = {1 : [2, 4, 5], 2 : [1, 3], 3 : [2], 4 : [1], 5 : [1], 6 : []} (wierzchołek numer ’1’

jest połączony z wierzchołkami ’2’,’4’ i ’5’). Napisz procedurę znajdywania wszystkich wierzchołków osiągalnych z zadanego wierzchołka p, napisz pro- cedurę znajdywania spójności krawędziowej i wierzchołkowej grafu, napisz program znajdujący drogę Hamiltona w grafie.

Zad. 3.3. Napisz program, który dla dowolnego ciągu znaków zlicza ilość samogłosek, spółgłosek dźwięcznych i bezdźwięcznych, polskich diakrytyków, cyfr i innych znaków.

Zad. 3.4. Niech będzie dany zbiór macierzy rzadkich n ×n. Napisz program który przeciąży operacje dodawania i mnożenia takich macierzy.

Zad. 3.5. Zaprojektuj program służący do obsługi prostej bazy danych.

Niech będzie to sklep spożywczy. Program obsługuje następujące funkcje:

• dostawa towaru

• sprzedaż towaru

• stan zapasów

natomiast każdy towar powinien być pamiętany w formie rekordu:

⋆ Numer identyfikacyjny

⋆ Nazwa towaru

⋆ Ilość (dostępna w magazynie)

⋆ Cena sprzedaży netto (plus 22% VAT)

⋆ Data przydatności do spożycia

⋆ Data dostawy

Zad. 3.6. Co będzie wywołane w tym fragmencie programu i dlaczego?

Listing 3.1. Dziedziczenie klas

c l a s s A:

varA = 42

d e f metodal ( s e l f ) :

p r i n t " Klasa A metoda 1"

c l a s s B:

varB = 37

d e f metoda1 ( s e l f ) :

p r i n t " Klasa B metoda1 "

d e f metoda2 ( s e l f ) :

p r i n t " Klasa B metoda2 "

c l a s s C(A,B) : # D z i e d z i c z y po A i B varC =3.3

d e f metoda3 ( s e l f ) :

(23)

23

p r i n t " Klasa C : metoda3 "

c l a s s D: pass c l a s s E(C,D) : pass c = C( )

c . metoda3 ( ) c . metoda1 ( ) c . varB e=B( )

e . metoda1 ( )

Zad. 3.7. Opisz klasę Numb o atrybucie n i metodach

• isprime stwierdzającą czy n jest liczbą pierwszą

• eratostenes tworzącąmetodą Eratostenesą listę liczb pierwszych mniej- szych bądź równych od n,

• factor1 zwracająca listę tych liczb pierwszych, które są dzielnikami n (wykorzystaj eratostenes),.

• factor metodę tworzącą pełną faktoryzację liczby n

• euler metodę tworzącą listę liczb pierwszych względem n i nie większych od n.

Traktuj to zadanie jako połaczenie zadań (2.15)-(2.18) i (2.20).

Zad. 3.8. Opisz klasę obiektów R liczb zadanych w postaci rzymskiej lub arabskiej (tak aby instancje R(

M LIX

) i R(153) obie były prawidłowymi instancjami). Utwórz metody init , toroman, fromroman oraz metody potrzebne do przysłonięcia operacji +,-,* (zob. zad. (2.14)).

Zad. 3.9. Napisz program który opisze trzy klasy: Square, Circle, Trian- gle i dla każdej z tych klas poda metodę obliczenia ich pola powierzchni. Ko- rzystając z tych klas oblicz pole powierzchni obiektów w następującej liście:

list = [Circle(5),Circle(7),Square(9),Triangle(2,14), Triangle(3.5,1.2),Circle(3),Square(12)].

Zad. 3.10. Napisz program który opisze trzy klasy: BankAccount, Inte- restAccount, ChargingAccount (konto bankowe, ROR - rachunek ban- kowy, rachunek debetowy, - dwa rodzaje kont bankowych. Niech BankAc- count ma metody

⋆ deposit - wpłata na konto

⋆ withdraw - wypłata z konta

⋆ accountinfo - informacja o stanie konta

⋆ percent - jeśli jest ostatni dzień miesiąca to dopisz procent

⋆ transfer - możliwość przelewu na inne konto

⋆ history - wydruk operacji z bue zącego miesiąca

oraz atrybuty

(24)

24 3. Zaawansowane techniki programowania . amount - aktualna kwota

. t - lista zawierająca datę operacji, jej rodzaj i kwotę - utrzymywana przez miesiąc

. licz - licznik ilości wszystkich operacji wykonanych na tym koncie Niech konta InterestAccount, ChargingAccount dziedziczą po Ban- kAccount odpowiednie metody

Zad. 3.11. Niech w zmiennej dirname będzie nazwa przeszukiwanego ka- talogu, text łańcuch tekstowy a pattern maska zbiorów. Wydrukuj te zbiory z katalogu dirname których nazwy spełniają warunki maski pattern i które zawierają tekst text.

Zad. 3.12.

Utwórz moduł snapshot o następujących funkcjach:

• menu - główne menu programu

• createmigawka - parametrem jest ścieżka do katalogu i nazwa pliku migawki

• listmigawka - parametrem jest rozszerzenie plików migawek a efektem wyświetlenie wszystkich plików migawek z podanego katalogu

• comparemigawka - parametrem są dwie nazwy plików a efektem lista różnic pomiędzy dwoma migawkami (lista nowo dodanych i usuniętych plików)

• showpomoc - Wyświetla tekst pomocy

• invalidWybor - obsługa błędów

• archiveZip - zarchiwizuj stare pliki migawek

(25)

Rozdział 4

GUI w Tkinterze

(26)

26 4. GUI w Tkinterze

Zad. 4.1. Zaprojektuj następujący widget:

Rysunek 4.1. Etykiety i przyciski

Zad. 4.2. Zaprojektuj następujący widget:

Rysunek 4.2. Pola tekstowe

Zad. 4.3. Zaprojektuj następujący widget:

Rysunek 4.3. Geometria grid

Zad. 4.4. Przetestuj różne położenia dwóch grup przycisków zgrupowanych w dwóch ramkach w zależności od różnych orientacji w geomatrii pack, np.:

Rysunek 4.4. Geometria pack

(27)

27 Zad. 4.5. Stosując geometrię place zaprojektuj prostą przeglądarkę do mak- symalnie 10 zdjęś.

Rysunek 4.5. Geometria place i przeglądarka

Zad. 4.6. Zaprojektuj cztery otwierające się okna różnych typów:

Rysunek 4.6. Okna

Zad. 4.7. Przetestuj różne opcje ramek, border i button uzyskując zbliżomy

efekt:

(28)

28 4. GUI w Tkinterze

Rysunek 4.7. Buttony i ramki

Zad. 4.8. Zaprojektuj prosty kalkulator korzystając z geometrii pack, przy- ciski cyfr, -, . oraz operacji +.-.*.,/,= i klawisza CLR do wycierania okna kalkulatora.

Rysunek 4.8. Kalkulator

Zad. 4.9. Zaprojektuj następujący radiobutton:

Rysunek 4.9. Radiobutton

Zad. 4.10. Zaprojektuj następujący checkbutton:

(29)

29

Rysunek 4.10. Checkbutton

Zad. 4.11. Zaprojektuj następujące menu dla zbiorów:

Rysunek 4.11. Menu dla zbiorów

Zad. 4.12. Przetestuj różne możliwości menu:

Rysunek 4.12. Menu

Zad. 4.13. Stosując widget Message wyświetl następujący tekst:

(30)

30 4. GUI w Tkinterze

Rysunek 4.13. Message

Zad. 4.14. Stosując widget Text wyświetl i popraw następujący tekst:

Rysunek 4.14. Text

Zad. 4.15. Stosując widgety Canvas i Menu spróbuj zaprojektować coś po-

dobnego:

(31)

31

Rysunek 4.15. Canvas

Zad. 4.16. Stosując widgety Canvas i Scale spróbuj zaprojektować dyna- micznie zmieniającą się (promień) kulę:

Rysunek 4.16. Canvas

Zad. 4.17. Korzystając z obiektu Tkintera Listbox wyświetl wykaz litera- tury do przedmiotu Python i Django:

1. Altom T., Mitch Chapman, Programming with Python, Prima.

2. Alchin M., Pro Django. 2009 by Marty Alchin.

3. Ayman H., Django 1.0 Web Site Development, 2009 Packt Publishing.

4. Beazley D.: Python. Essential Reference. 3Ed., Sams Publishing 2006.

5. Benett J., Practical Django projects, 2Ed, Apress 2009.

6. Brown M., Python Annotated Archives, McGraw Hill.

7. Chun W. J.: Core Python Programming, O’Reilly & Ass. Inc. 2002.

(32)

32 4. GUI w Tkinterze

8. Dayley B., Python. Rozmówki. Helion SA 2007.

9. Deitel H. M., Deitel P. J., Liperi J.P. i inn. Python How to Program, c⃝Copyright 1992-2002 by Deitel & Associates, Inc.

10. Dokumentacja biblioteki PMW: http://pmw.sourceforge.net/doc/index.html 11. Dokumentacja techniczna PYTHONa: http://docs.python.org/index.html.

12. Eckel B., Thinking in Python, Design Patterns and Problem-Solving Tech- niques, (wersja internetowa)

13. Flynt C., Tcl/Tk a Developers Guide, 2Ed, 2003 Elsevier Science (USA) 14. Ford M. J., Muirhead Ch., Iron Python in Action. 2009 by Manning Publi-

cations Co.

15. Forcier J., Bissex P., Chun W., Python i Django. Programowanie aplikacji webowych. Helion S.A. 2009.

16. Grayson J.E., Python and Tkinter Programming, 2003-2010 Manning Pu- blications Co.

17. Hammond M.A.R, Python Programming on Win32. O’Reilly.

18. Harms D., McDonald K., The Quick Python Book. Manning.

19. Himstedt T., M¨anzel K., Mit Python programieren (Programming with Py- thon) Dpunk.Verlag.

20. Holovaty A., Kaplan-Moss J.: The Definitive Guide to django. Apress 2009.

21. Internetowy manual Vpythona: http://vpython.org/index.html 22. Internetowy podręcznik Tkintera:

http://www.astro.washington.edu/users/rowen/TkinterSummary.html

23. Jonas Ch. A., Drake F. L.Jr., Python and XML, O’Reilly Media Inc 2002.

24. Jones C.A., Python & XML, O’Reilly 2002.

25. Juneau J., Baker J., Ng V., i inn. The Definitive Guide to Jython. Python for the JavaT H Platform. 2010 Apress.

26. Kędzierski P., Język Python. http://www.python.org.pl/view/kursy/jezykpython.pdf 27. Krajka A., Python. Podstawy języka i aplikacje internetowe. Wyd. UMCS,

Lublin 2012.

28. van Laningham I., Teach yourself Python in 24 hours. Sams.

29. Lundh F., An introduction to Tkinter. 1999 by Frederik Luhn http://www.pythonware.com/library/an-introduction-to-tkinter.htm

30. Lungh F., Ellis M., Python Imaging Library Overview, http:// www.pythonware.com/

media/data/pil-handbook.pdf

31. von L¨owis M., Fischbeck N., Das Python-Buch (The Python Book, Addison Wesley Longman,)

32. Lutz M., Programming Python, 3Ed, O’Reilly 2006.

33. Lutz M., Ascher D., Learning Python. O’Reilly 1999.

34. McGrath S., XML Processing with Python, Prentice Hall.

35. Maliński P., Ćwiczenia praktyczne Django. Helion 2009.

36. Maliński P., Podstawy Pythona. http://www.python.rk.edu.pl/w/p/podstawy/

37. Martelli A., Python in Nutshell, O’Reilly 2003.

38. Martelli A., Ascher D., Python Cookbook, O’Reilly 2002.

39. Maruch S., Maruch A., Python for Dummies, John Wiley & Sons c⃝2006.

40. Marzall A., Gracia I., Introduction a la programación con Python y C. 2002 de Andr´es Marzal Varó & Isabel Gracia Luengo

(33)

33

41. Młotkowski M,. Wykłady Internetowe: http://www.ii.uni.wroc.pl/ marcin- m/dyd/python/

42. Norton P., Samuel A., Aitel D., I inni,: Beginning Python. Wiley Publ. Inc.

2005.

43. Opis biblioteki NumPy: http://www.scipy.org/Tentative NumPy Tutorial 44. Ousterhout, J., Tcl and Tk Toolkit, Addison Wesley Longman

45. Penzilla’s net PYTHON tutorial: http://www.penzilla.net/ tutorials/ pytho- n/index.shtml

46. Pilgrim M., Warszk, Kieć P. i in. Zanurkuj w Pythonie, Wikimedia Foun- dation Inc. 2005-2008.

47. Python Documentation: http://www.python.org/doc/

48. Python Tutorials na http://www.tutorialspoint.com/index.htm

49. Raines P., Tcl/Tk pocket reference, 1998 O’Reilly Media Inc. Sebastopol 50. Raines P., Tranter J.: Tcl/Tk in a nutshell. A desktop quick reference. 1999

O’Reilly Media Inc. Sebastopol

51. van Rossum G.: Przewodnik po języku Python. 2.3Ed. Copyright c 2001 Python Software Foundation (http://docs.python.org.pl/tut/tut.html)

52. Scheible J., Tuulos V., Mobile Python. Rapid Prototyping of Applications on the Mobile Platform. 2007 John Wiley & Sons.

53. Shipman J. W., Tkinter 8.4 reference: a GUI for Python, New Mexico Tech CC. http://ibiblio.org/g2swap/byteofpython/read/index.html

54. Swacha J.: Kurs programowania w języku Python. (http://uoo.univ.szczecin.pl/ ja- kubs/)

55. Swaroop P.H., A Byte of Python, http://ibiblio.org/g2swap/ byteofpytho- n/read/index.html, 2003-2005 Swaroop CH

56. Waters A., van Rossum G., Ahlstrom C., Internet Programing with Python, Henry Holt & Co./M&T Books/MIS:Press/IDG Books

57. Welch, B. B., Jones K., Hobbs J.: Tcl and Tk, 4Ed, 2003 Pearson Education Inc.

58. Zbiór aplikacji Vpythona: http://mientki.ruhosting.nl/data www/pylab works/

pw application vpython3.html

efekt powinien być taki:

Rysunek 4.17. Canvas

(34)

34 4. GUI w Tkinterze Zad. 4.18. Zaprojektuj następującą (bardziej zaawansowaną) wyszukiwar- kę do zdjęć:

Rysunek 4.18. Canvas

Zad. 4.19. Zaprojektuj stoper do pomiaru czasu:

Rysunek 4.19. Timer

Zad. 4.20. Używając bibliotek: xml.dom.minidom oraz idlelib.TreeWidget

zaprojektuj w widgecie Canvas drzewo katalogów:

(35)

35

Rysunek 4.20. Tree

Zad. 4.21. Napisz program wyświetlający fonty dostępne w Pythonie na danym komputerze:

Rysunek 4.21. Fonty

Zad. 4.22. Jak w Tkinterze dostać się do okna standardowego wyboru ko-

lorów?

(36)

36 4. GUI w Tkinterze

Rysunek 4.22. Kolory

(37)

Rozdział 5

VPython i wizualizacja

(38)

38 5. VPython i wizualizacja Zad. 5.1. Zaprojektuj program badajacy przechodzenie światła przez dwie soczewki i wklęsłe lustro (tak jak na rysunku).

Rysunek 5.1. Załamanie światła

Zad. 5.2. Napisz prosty program w VPYTHONie pokazujący kierunek ru- chu:

Rysunek 5.2. Kierunek ruchu

(39)

39 Zad. 5.3. Napisz prosty program w VPYTHONie pokazujący ruch kuli o następującym równaniu:

{

x = sin(z), y = cos(2z),

i płynnie zmieniającym się kolorze





red = cos(z), green = sin(z), blue =

1−cos(z)2

, z niebieskim śladem:

Rysunek 5.3. Ruch kuli

Zad. 5.4. Napisz prosty program w VPYTHONie (visual.graph) rysujący

wykres funkcji y = 5cos(2x) ∗ exp

−0.2x

w przedziale (0, 8) :

(40)

40 5. VPython i wizualizacja

Rysunek 5.4. Wykres

Zad. 5.5. Napisz prosty program w VPYTHONie przedstawiający ruch jednego obiektu względem drugiego

Rysunek 5.5. Księżyc

Zad. 5.6. Napisz program ilustrujący zachowanie mrówki Langtoma. Na kwadracie 100 × 100 w losowym miejscu znajduje się mrówka. W każdym kroku iteracji mamy wyróżnioną jedną komórkę (i, j) oraz kierunek ruchu mrówki (N,E,S lub W). Każda komórka jest żywa (1) lub martwa (0). W każdym kroku mrówka przechodzi do następnej komórki wg. kierunku ruchu i

• jeśli komórka jest martwa (0) to ożywa (1) i kierunek ruchu mrówki zmienia się o 90

o

w lewo

• jeśli komórka jest żywa (1) to mrówka ją zjada (0) i obraca się o 90

o

w

prawo

(41)

41

Rysunek 5.6. Mrówka Langtoma

Zad. 5.7. Napisz prosty program w VPYTHONie przedstawiający ruch sprężyny. Modelem fizycznym jest prawo Hooke’a: Zależność F = −kx jest znana jako prawo Hooke’a. Prawo to dotyczy sprężyn i innych ciał sprężystych, pod warunkiem, że deformacja nie jest za duża.

Samą zmianę kształtu ciała stałego, nazywamy odkształceniem, albo deformacją i jest to świadectwo działania sił na to ciało. Wzór F = −kx należy czytać następująco: W zakresie niewielkich defor- macji zmiana długości pręta (Hook swe badania przeprowadzał na kawałku pręta) o stałym przekroju jest wprost proporcjonalna do wartości sił przyłożonych do jego końców (przyłożone siły mają taką samą wartość). natomiast model matematyczny zjawiska to: Z II prawa dynamiki Newtona

F = −kx = am = dv

dt m = d

2

x dt

2

m, a stąd

a

t

= kx

t

m , △v

t

= a

t

△t, △x

t

= v

t

+ a

t

( △t)

2

2 .

(42)

42 5. VPython i wizualizacja

Rysunek 5.7. Sprężyna

Zad. 5.8. Napisz program ilustrujący grę w życie Conwaya. Otoczeniem danej komórki nazywamy wszystkie komórki mające co najmniej jeden punkt wspólny z daną. Każda komórka może być żywa lub martwa. Gra w życie zadana jest:

⋆ przed ukośnikiem umieszcza się te liczby komórek w sąsiedztwie, dla których żywe komórki przeżywają (dla reguły Conwaya będzie to 23 - czytaj 2,3);

⋆ następnie umieszcza się ukośnik: /;

⋆ po ukośniku umieszcza się te liczby komórek w sąsiedztwie, dla których martwe komórki ożywają (dla reguły Conwaya będzie to 3);

a ponadto zadajemy p - prawdopodobieństwo, że wybrana komórka jest żywa.

Na płaszczyźnie 100 × 100 losujemy stan komórek a następnie wykonujemy

symulację.

(43)

43

Rysunek 5.8. Gra w życie

Zad. 5.9. Jednowymiarowe AK zadaje się poprzez podanie jak się zacho- wuje dana komórlka w otoczeniu innych Np.

x 111 110 101 100 011 010 001 000

f(x) 0 0 1 0 1 1 1 0

DEC 0 0 32 0 8 4 2 0

więc powyższy automat to AK46

DEC

. Napisz program króry w oparciu o zadaną tablicę tab[100] lub p (losowo wybrane komórki) oraz regułę np.

35

DEC

wykona 100 ruchów AK i przedstawi to na wykresie.

(44)

44 5. VPython i wizualizacja

Rysunek 5.9. AK

Zad. 5.10. Napisz program symuujący ruch planet wokół naszego układu słonecznego. Model matematyczny zjawiska to

Rysunek 5.10. Prawa Keplera

gdzie

t

dt = 360

o

period ,

(45)

45

r

t

= a 1 − e

2

1 − ecos(θ

t

)

r = [ar

t

cos(θ

t

), br

t

sin(θ

t

), 0]

gdzie a - wielka półoś elipsy, c

2

− a

2

− b

2

- ogniskowa, e =

ac

- mimośród orbity, a płaszczyzna ruchu jest jeszcze obrócona o kąt inclination wokół osi OY i o kąt lap wokół osi OZ. Dane poszczególnych planet przedstawiamy w tabelce:

Planeta e a R period inclination lap

Merkury 0.206 0.39 4840 88 7.0 10.1

Wenus 0.007 0.72 12230 225 3.4 177.4

Ziemia 0.017 1.0 12756 365 0.01 23.5

Mars 0.093 1.52 6800 687 1.8 25.1

Jowisz 0.048 5.2 142796 4332 1.3 3.1

Saturn 0.055 9.52 120660 10756 2.5 26.7

Uran 0.048 19.16 52400 30707 0.7 97.8

Neptun 0.008 30.07 50460 60223 1.7 29.6

Rysunek 5.11. Układ słoneczny

(46)
(47)

Rozdział 6

Django

(48)

48 6. Django Zadania w poszczególnych podrozdziałach należy wykonywać kolejno, przy następnym zadaniu zakładamy, że wszystkie poprzednie zostały wyko- nane.

6.1. Początek

Zad. 6.1. Załóż szkielet prostego projektu w katalogu C : \W orkspace\Django\proj1 Rozwiązanie zadania 6.1.

Listing 6.1. Pierwszy projekt

C: \ Workspace\Django> C: \ Python27\python C: \ Python27\ Lib \ s i t e − packages \ django \ bin \ django−admin . py s t a r t p r o j e c t proj1

Zad. 6.2. Załóż szkielet prostego aplikacji ”app1” w projekcie ”proj1”.

Rozwiązanie zadania 6.2.

Listing 6.2. Pierwsza aplikacja

C: \ Workspace\Django\ proj1> C: \ Python27\python manage . py startapp app1

Zad. 6.3. Skonfiguruj bazy danych, język i interfejs zmieniając w pliku

”settings.py”. Baza danych ma być ”sqlite3”, nazwa ”baza” strefa czasowa

’Europe/Warsaw’ język ’pl’ a pliki graficzne w katalogu ”grafika”. Dodaj panel administratora (hasło: ADMIN, passowrd: PASS).

Rozwiązanie zadania 6.3.

Listing 6.3. Pierwsza aplikacja

s e t t i n g s . py

DATABASE_ENGINE = ' s q l i t e 3 ' DATABASE_NAME = " baza "

DATABASE_USER = ' ' DATABASE_PASSWORD = ' ' DATABASE_HOST = ' ' DATABASE_PORT = ' '

TIME_ZONE = ' Europe/Warsaw ' LANGUAGE_CODE = ' pl '

TEMPLATE_DIRS = { ' g r a f i k a ' ,

INSTALLED_APPS={}

. . .

' django . admin . contrib ' ,

(49)

6.2. Blog 49

' app1 ' , . . . }

C: \ Workspace\Django\ proj1> C: \ Python27\python manage . py syncdb u r l s . py

from django . conf . u r l s . d e f a u l t s import ∗ from django . c o n t r i b import admin

admin . a u t o d i s c o v e r ( ) u r l p a t t e r n s = p a t t e r n s { " .

( r '^ admin / ( . ∗ ) ' , admin . s i t e . root ) , }

C: \ Workspace\Django\ proj1> C: \ Python27\python manage . py r u n s e r v e r

Zad. 6.4. Utwórz dwie podstrony w projekcie ”proj1”:

• Podstronę ”hello” drukującą napis

Witam Szanownego Uczestnika Kursu: PYTHON i DJANGO

• oraz stronę ”data” o strukturze:

Teraz jest 10 kwiecień 2012 roku godz. 8:30.

Rozwiązanie zadania 6.4.

Listing 6.4. Dwie podstrony

views . py

from django . http import HttpResponse import datetime

def h e l l o ( r e q u e s t ) :

return HttpResponse ("Witam Szanownego Uczestnika Kursu : PYTHON i DJANGO") def data ( r e q u e s t ) :

x1=datetime . datetime . now ( )

x1="<html><body>Teraz j e s t %s </body></html>" % x1 return HttpResponse ( x1 )

u r l s . py

from proj1 \ views import h e l l o , data u r l p a t t e r n s = p a t t e r n s { ' ' ,

( r '^/ h e l l o /$ ' , h e l l o ) , ( r '^/ data /$ ' , data ) , }

6.2. Blog

Zad. 6.5. Zlecenie Ponieważ dręczą nas w dzień i w nocy różne myśli

(sądzimy, że bardzo cenne i wartościowe) postanowiliśmy założyć własny

(50)

50 6. Django blog (w zasadzie pamiętnik), do którego chcielibyśmy tylko sami dodawać wpisy. Blog powinien wyświetlać nasze wpisy chronologicznie w odwrotnej chronologii (od najnowszych do najstarszych). Chcemy to zrobić najprościej jak się da.

6.2.1. Założenia projektu

Wpisy dodawać będziemy co pewien czas korzystają z panelu admini- stratora (lub bazy SQLITE3). Każdy wpis składa się z tytułu, daty i treści. Nie przewidujemy żadnej grafiki.

6.2.2. Projekt 1. Utwórz projekt.

2. Ustawienia lokalne i tworzenie panelu administratora w pliku settings.py.

3. Weryfikacja panelu admina i fizyczne utworzenie tabel w konsoli.

4. Preanalizuj możliwości panelu admina.

5. Zarejestruj aplikację blog pisząc w settings.py:

6. Utwórz model interesujących Cię danych w pliku models.py.

7. Udostępnij utworzone tabele Adminowi.

8. Klikając na Blog posts opcję dodaj utwórz kilka wpisów w blogu.

9. Tworzenia widoku - utwórz szablony i plik html.

10. Połącz utworzone w HTML i JAVASCRIPT strony z projektem za pomocą pliku views.py.

11. Ustaw porządek wyświetlania wpisów blogu.

Sprawdź efekt na stronach http://localhost:8000/admin/blog/blogpost/

i http://localhost:8000/blog/.

6.3. Osoba

Zad. 6.6. Zlecenie

Zlecenia nie mamy, chcielibyśmy pobawić się bazą danych dotyczących osób. W szczególności chcemy:

1. Założyć prostą stronę /hello o treści: Hello świecie!!! Zapraszamy

szanownego uczestnika kursu do pracy. Wy jesteście naszym Kapitałem Ludzkim!!!

2. Utwórz stronę /tekst zawierającą dłuższy (3-4 strony) tekst ASCII.

3. Utwórz stronę /person pokazującą wszystkie rekordy bazy danych Per- son o strukturze:

• imie - łańcuch znaków

• nazwisko - łańcuch znaków

(51)

6.4. Rekrutacja 51

• dataur - Data

• foto - Obrazek

• wzrost- liczba dziesiętna

• admail - Email

• odsyl - odsyłacz Odsyłaczami odsyl niech będą odsyłacze do stron /hello i /tekst, fotografie niech będą dowolnymi zdjęciami, dla kontra- stu na stronie zamieść jedno stałe zdjęcie. Wypełnij bazę danych dwoma rekordami (za pomocą panelu Admina lub SQLITE3). Stronę tą umieść po utworzeniu aplikacji proj1.

4. Zaprojektu adresy URL tak aby wpisując odpowiedni numer po nazwie osoba pokazujemy tylko informacje dotyczące osoby o tym numerze, np.:

http://localhost:8000/osoba02 pokaże drugą osobę z bazy.

5. Zaprojektuj strony o nazwiach tekst/pdf i hello/pdf produkujące za- wartość stron /tekst i /hello w formacie PDF (ADOBE ACROBAT).

Zrób to jednym widokiem.

6. Zrób formularz w oparciu o bazę Person i na stronie /formxx gdzie xx to dwucyfrowy numer wyświetl tę stronę, dorzuć do niej dwa pola do wpisywania tekstu i prycisk Submit. Jak wygląda odwrotna komunikacja od szablonu (html) do programu Pythona?

6.4. Rekrutacja

6.4.1. Cel i wymagania systemu informatycznego

System wstępnie nazwany REKRUTACJA. Głównym jego celem jest rejestracja i wyszukiwanie w sposób efektywny i wygodny zgłoszeń kandy- datów do pracy w firmie.

6.4.2. Zadania stawiane przed systemem

1. Umożliwienie gromadzenia danych o kandydatach System pozwoli na wprowadzanie nowych zgłoszeń i kandydatów oraz łatwe uzupełnianie, zmianę i usuwanie tych danych.

2. Przeglądanie danych o kandydatach

3. Wyszukiwanie zgłoszeń i kandydatów spełniających określone kryteria.

System umożliwi wyszukiwanie kandydatów według różnorodnych kry- teriów:

- Numeru oferty

- Daty oferty

- Stanowiska

- Działu

- Lokalizacji

(52)

52 6. Django - Nazwiska

- Znajomości języków obcych

- Znajomości programów komputerowych

Możliwa jest dowolna kombinacja tych kryteriów.

4. Generowanie raportów dotyczących rekrutacji pracowników

6.4.3. Dane wprowadzane do systemu

1. Dane osobowe i adresowe:

- Rok urodzenia - Ukończone szkoły

- Doświadczenie zawodowe - Znajomość języków obcych

- Znajomość programów komputerowych - Płeć

- Prawo jazdy

- Stosunek do służby wojskowej - Stan cywilny

- Zdjęcie

2. Dane dotyczące zgłoszenia:

- Numer zgłoszenia

- Data przyjęcia zgłoszenia

- Stanowisko o jakie się ubiega kandydat - Lokalizacja miejsca pracy

- Dział w którym kandydat chce pracować 3. Biblioteki

- Języki obce

- Programy komputerowe - Stanowiska

- Lokalizacje

- Działy

(53)

6.5. Obsługa bazy danych 53 6.4.4. Schemat encji

Rysunek 6.1. Schemat encji

Kandydat dołącza do dokumentacji swoje zdjęcie.

6.4.5. Opis interfejsu użytkownika

Dodawanie, modyfikowanie i usuwanie kandydatów. Wyszukiwanie w ba- zie danych kandydatów.

Zaimplementuj to w DJANGO, utwórz odpowiednie formularze.

6.5. Obsługa bazy danych

Zad. 6.7. Stosując widoki generyczne zaprojektuj bazę danych class Paste(models.Model):

1. content - pole tekstowe nieograniczonej wielkości 2. title - pole tekstowe maksymalnej długości 30 3. syntax - pole liczba całkowita z wyborem:

(0, ”Plain”),

(1, ”Python”),

(2, ”HTML”),

(54)

54 6. Django (3, ”SQL”),

(4, ”Javascript”), (5, ”CSS”),

4. poster - pole tekstowe maksymalnej długości 30 5. timestamp - pole typu Data/Godzina

Rysunek 6.2. Baza PASTE

Stosując widoki generyczne object detail i object list i create object utwórz trzy strony:

1. Stronę przeglądającą rekordy PASTEBIN:

Rysunek 6.3. Ekrany PASTE

Zwróć uwagę na przyciski Add one i List all.

(55)

6.5. Obsługa bazy danych 55 2. Po najechaniu na dowolny rekord i kliknięciu otrzymujemy obraz

Rysunek 6.4. Ekrany PASTE

3. Natomiast po najechaniu na przycisk Add one otrzymujemy ekran:

Rysunek 6.5. Ekrany PASTE

4. Spróbuj to wszystko zaprojektować bez używania szablonów generycz- nych natomiast używając formularzy.

5. Zaprojektuj formularz nakładający filtr (wyszukiwanie) w bazie PA- STEBIN. Niech elementem wyszukiwawczym będzie

Data

(56)

56 6. Django Syntax

Title

tekst zawarty w polu Content

6.6. Amazon

Zad. 6.8. Zlecenie Otrzymaliśmy zlecenie na stworzenie sklepu interneto- wego od ważnego, ale wybrednego klienta. Ponieważ projekt ma pozwalać na dowolną rozbudowę i modyfikację w przyszłości, zdecydowaliśmy się nie ko- rzystać z gotowych rozwiązań. Nie chcemy też utrudniać sobie życia, wiążąc się z mniej elastycznymi środowiskami pracy, a z drugiej strony zależy nam na wykonaniu podstawowej, funkcjonalnej wersji witryny w czasie niewiele dłuższym od tego jaki możemy poświęcić na zajęciach kursu!

6.6.1. Założenia projektu

Nasz klient chciałby w pierwszej wersji uwzględnić podstawowe funk- cjonalności - gotowe do edycji strony statyczne (strona główna, informacje dotyczące firmy itp.) oraz możliwość samodzielnego dodawania produktów z ceną, opisem i zdjęciem. Do tego przydatne będzie również zastosowanie podziału wszystkich oferowanych towarów na kategorie oraz obsłuuga ko- szyka i formularza zamówienia, wraz z opcją wysłania szczegółów zlecenia na adres e-mail. Otrzymamy na wstępie także przygotowany przez grafika szablon HTML z CSS.

6.6.1.1. Przygotowanie środowiska.

Pytania:

(1) Czy i w jakiej wersji Python [2.7]

(2) Jakie potrzebne dodatkowe biblioteki [PIL,reportlab]

(2) Czy i w jakiej wersji Django [1.4] (może być być Pylon czy Turbogear) (3) Jaki wybrać serwer [wbudowany] (np. Apache, Lightbot)

(4) Rodzaj współpracującej bazy danych [SQLite 3] (PostgreSQL, My- SQL, Oracle)

(5) Rodzaj wyszukiwarki internetowej [Firefox] (Opera, Google Chrome, Internet Explorer)

6.6.1.2. Posiadane dane.

Klient dostarczył nam przygotowany wcześniej szablon strony:

Listing 6.5. Plik base.html

<html>

<head>

(57)

6.6. Amazon 57

<t i t l e >S k l e p i k z koszulkami </ t i t l e >

<l i n k r e l =" s t y l e s h e e t " type="t e x t / c s s "

h r e f ="{{ MEDIA_URL }}main . c s s " />

</head>

<body>

<div id="content">

<h1>S k l e p i k z koszulkami </h1>

<div id="basket"><a h r e f ="/ s k l e p / koszyk/">Koszyk ( 0 )</a></div>

<div id="menu"><a h r e f ="/">Strona glowna</a> |

<a h r e f="s k l e p / produkty/">Produkty</a></div>

<div id="main">

{% block main_box %}{% endblock %}

</div>

<div id="f o o t e r"><a h r e f ="/o−f i r m i e /">O f i r m i e </a></div>

</div>

</body>

</html>

Jak widać, poszczególne bloki mają identyfikatory (np. main box) i mogą zawierać domyślną treść, która będzie użyta, jeśli szablon szczegółowy jej nie zmieni. Element {{MEDIA URL}} zostanie w trakcie renderowania za- stąpiony adresem URL folderu z plikami statycznymi. Szablony szczegółowe będziemy tworzyli w miarę potrzeb.

6.6.2. Czynności wstępne

Zad. 6.9. Środowisko Utwórz katalog Django i utwórz projekt o nazwie amazon oraz aplikację w tym projekcie o nazwie sklep . Skonfiguruj adresy url i ustawienia settings.py oraz utwórz panel Admina.

6.6.3. Uruchomienie serwera i edycja

Zad. 6.10. Serwer i dane statyczne Uruchom serwer i korzystając z panelu Admina utwórz dokument statyczny dla strony głównej.

6.6.4. Tworzenie i walidacja modelu

Najpierw zwróćmy uwagę na różnice pomiędzy aplikacją a projektem.

Projekt jest to kod specyficzny dla pewnego portalu, a aplikacja to jedynie

pewna część funkcjonalności systemu, która bardzo często może być współ-

dzielona przez wiele projektów. Przykładem tak rozumianej aplikacji jest

wykorzystywany już przez nas panel administracyjny. Aplikacja została już

utworzona w etapie 1 bata amazon.bat poleceniem python manage.py

startapp sklep. Django, zgodnie z podanymi przez nas parametrami, utwo-

rzy folder zawierający podstawowy szkielet aplikacji.

(58)

58 6. Django Zad. 6.11. Tworzenie i walidacja modelu Utwórz dwie klasy: class Kategoria(models.Model):

nazwa - pole tekstowe class Produkt(models.Model):

nazwa - pole tekstowe opis - pole tekstowe cena - liczba dziesiętna

dostepne od - pole data/godzina

kategorie - relacje M<->M z bazą Kategoria obrazek - pole na obrazek

...

6.6.5. Widok - lista produktów

Zad. 6.12. Widok - lista produktów Utwórz ”witrynę” dla kupujących konfigurując adres url, utwórz szablon szczegółowy witryny produktów oraz dowiąż go przez adresy url.

6.6.6. Obsługa zamówienia i koszyka

Na tym etapie realizacji naszego projektu sprzedawca może już wprowa- dzać dane produktów, a użytkownicy je przeglądać. Klienci nie mają jednak nadal dostępu do mechanizmu dodawania towarów do koszyka i składania zamówienia. Czas zatem rozpocząć ostatni etap prac nad sklepem.

Zad. 6.13. Zamówienie i koszyk Poinformuj użytkownika ile ma pro-

duktów w koszyku (w pliku context processors.py w folderze sklep) uak-

tualniając również plik settings.py oraz plik base.html. Na ekranie pod-

glądu koszyka dodaj formularz danych adresowych. Utwórz widoki dotyczą-

ce dodawania produktu do koszyka, wyświetlania zawartości koszyka wraz z

formularzem i wysyłki zamówienia jako wiadomości e-mail oraz adekwat-

nie uaktualnij urls.py oraz settings.py. Utwórz odpoweidnie szablony za-

mówienia (zamowienie.txt) i koszyka (koszyk.html). Skonfiguruj serwer

poczty SMTP uruchom serwer i zobacz efekt.

(59)

6.6. Amazon 59

Rysunek 6.6. Widok użytkownika

Cytaty

Powiązane dokumenty

Dla dodatniej liczby naturalnej n znaleźć wzór na największą potęgę liczby pierwszej p dzielącą n!4. Rozłożyć na czynniki pierwsze

Krawędzi, które łączą wierzchołki należące do różnych kawałków, jest dokładnie n k − 1, a ponieważ poddrzewa połączone takimi krawędziami składają się z

Pokazać, że dla każdej liczby naturalnej n &gt; 1 istniej¸ a co najmniej trzy różne liczby pierwsze maj¸ ace w zapisie dziesi¸etnym po n

Dla podanych a, b, c podać takie d, aby istniał czworokąt wy- pukły o bokach długości (z zachowaniem kolejności) a, b, c, d, w który można wpisać okrąg.. Dla podanych a, b,

W dowolnym n-wyrazowym postępie arytmetycznym o sumie wyrazów równej n, k-ty wyraz jest równy 1.. Dla podanego n wskazać takie k, aby powyższe zdanie

[r]

23. Dana jest liczba rzeczywista a. Niech P będzie dowolnym punktem wewnątrz czworokąta wypukłego ABCD. Udowod- nij, że środki ciężkości trójkątów 4P AB, 4P BC, 4P CD, 4P

Niezbyt typowy wykład. poniedziałek, 23