Projekt "Ściąga"

Z Otwarta edukacja
Skocz do: nawigacja, szukaj

Współtworzenie programów

Praca współczesnego programisty wiąże się z wejściem do społeczności użytkowników wybranego języka programowania. Dotyczy to zwłaszcza takich języków jak Python – które są rozwijane na zasadach otwartych. W razie problemów zawsze można znaleźć forum internetowe, na którym możemy szukać pomocy. Czasem wiąże się to z pewnym stresem – nie brakuje bowiem „mądrali”, którzy wolą komentować w stylu „co za lamerskie pytanie”, niż pomóc. Nie należy się tym zrażać. Należy przestrzegać netykiety, a na pewno znajdziemy rozwiązanie.

Najlepszym sposobem na rozpoczęcie pracy programisty jest udział we wspólnym projekcie. Poziom zaawansowania tego projektu powinien być dostosowany do naszego stopnia zaawansowania. Poniżej opisano zarys projektu dostosowanego do poziomu szkół ponadpodstawowych. Przykład ten (lub jemu podobny) może być rozwijany na lekcjach, stanowiąc okazję do wyjaśnienia stosowania podstawowych konstrukcji języka. Przykład jest realny, użyteczny i zmierza do utworzenia odrębnego, pożytecznego pakietu. Tylko taki przykład pozwala poczuć się prawdziwym programistą.

Ściąga

Tworzymy program będący ściągą z podstawowych pojęć matematyki i fizyki. Wybrano taki przykład, gdyż program ten może być łatwo rozbudowywany przez uczniów – nawet w szkole podstawowej.

Zacznijmy od prostego przykładu zawierającego wyliczenie pola dwóch figur:

 1 #encoding: UTF-8
 2 
 3 print('1 - kwadrat')
 4 print('2 - prostokąt')
 5 wybor=input('wybierz: ')
 6 if wybor==1:
 7   a=input('a=')
 8   print("pole = %s", a*a)
 9 if wybor==2:
10   a=input('a=')
11   b=input('b=')
12   print("pole = %s", a*b)

Z użyciem funkcji możemy kod uprościć następująco:

 1 #encoding: UTF-8
 2 
 3 def kwadrat():
 4   a=input('a=')
 5   print("pole = %s", a*a)
 6 
 7 def prostokat():
 8   a=input('a=')
 9   b=input('b=')
10   print("pole = %s", a*b)
11 
12 print('1 – pole kwadratu')
13 print('2 – pole prostokąta')
14 wybor=input('wybierz: ')
15 if wybor==1:
16   kwadrat()
17 if wybor==2:
18   prostokat()

Czy to jest uproszczenie? Przecież napisaliśmy więcej linijek kodu, niż poprzednio? Kryterium oceny jest czytelność, a nie wielkość. Kod pisze się raz, a czyta go wiele razy!

Funkcje, moduły, pakiety

Dalsza rozbudowa programu powinna prowadzić do zastosowania obiektów, modułów i pakietów – tak jak opisano w rozdziale zatytułowanym „Jak radzić sobie ze złożonością” podręcznika „Uczymy się programować w Pythonie”: https://leanpub.com/pyprog.

Zgodnie z zawartymi tam wskazówkami możemy przekształcić nasz program do postaci:


 1 # -*- coding: utf-8 -*-
 2 
 3 
 4 class podpowiedz:
 5     parametry={}
 6     wynik={}
 7 
 8     def opis(self):
 9         print("""Ta klasa jest pusta.
10         Na niej możesz zbudować pochodne....
11         """)
12         
13     def pobierz_parametry(self):
14       pass
15     
16     def drukuj_wynik(self):
17         print('Wyniki:\n=======')
18         print(self.wynik)
19         print('\n')
20         
21     def licz(self):
22       pass
23     
24     def wykonaj(self):
25         self.opis()
26         print('\nParametry:\n..........')
27         if len(self.parametry)>0:
28           print(self.parametry)
29         else:
30           self.pobierz_parametry()
31         print('\n')
32         self.licz()
33         self.drukuj_wynik()
34         
35         
36 class kwadrat(podpowiedz):
37 
38     def opis(selfself):
39       print("""Pole kwadratu = a*a
40         gdzie a - dlugość boku
41         """)
42         
43     def licz(self):
44       self.wynik={}
45       self.wynik['pole=a*a']=self.parametry['a']**2
46       
47     def wykonaj(self,a):
48       self.parametry['a']=a
49       podpowiedz.wykonaj(self)
50       
51         
52         
53 print('1 - kwadrat')
54 print('2 - prostokąt')
55 wybor=input('wybierz: ')
56 if wybor==1:
57   #v=kwadrat()
58   #v.wykonaj(9)
59   kwadrat().wykonaj(input('bok kwadratu='))
60 elif wybor==2:
61   print("Tego jeszcze nie mamy!")

Dalszy rozwój programu będzie następował w ramach kursu

http://www.otwartaedukacja.pl/moodle/course/view.php?id=15

Przejście od pojedynczego programu do programu złożonego z funkcji, modułów i pakietów to jak inicjacja kodera, który staje się prawdziwym programistą. Koder powinien umieć wiernie przekładać opis na język programu. Decyzje dotyczące struktury programu ograniczone są przez standardy, a jedynie w nazwach zmiennych istnieje większa (choć nie przesadna) swoboda. Środowisko w którym pracuje program wyznaczają zainstalowane pakiety. Gdy samemu tworzymy pakiety, czy nawet moduły lub funkcje możliwe do ponownego wykorzystania – stajemy się twórcą środowiska – nawet jeśli nie decydujemy się na upublicznienie swej pracy.