Polish - Programowanie w Pythonie.pdf
(
9627 KB
)
Pobierz
PORADY
>>
AKTUALNOCI
>>
TEMAT NUMERU
>>
HARDWARE
>>
SOFTWARE
>>
INTERNET I G@D¯ETY
>>
MAGAZYN
Napisz w³asny program do nauki s³ówek!
Wê¿owy ucisk
Przydatnoæ jêzyków obcych docenia dzi chyba ka¿dy.
Warto sobie pomóc we wkuwaniu s³ówek, zaprzêgaj¹c do
tego celu komputer. Jak jednak unikn¹æ kupowania drogich,
epatuj¹cych multimedialnymi wodotryskami aplikacji?
Artur Skura
C
odziennie pojawiaj¹ siê nowe pro-
systemów operacyjnych. Jakby tego
by³o ma³o, Python mo¿e siê pochwaliæ
ogromn¹ bibliotek¹ modu³ów (rozszerzeñ),
dziêki którym prosto i szybko napiszemy
program korzystaj¹cy z baz danych, ser-
wer WWW, klienta poczty elektronicz-
nej czy grup dyskusyjnych. Równie ³a-
two utworzymy aplikacjê do
przetwarzania obrazu i dwiêku czy na-
wet grê zrêcznociow¹.
gramy, maj¹ce za zadanie pomóc
u¿ytkownikowi, umo¿liwiæ mu lep-
sz¹ i wydajniejsz¹ pracê. Czasem jednak
zdarza siê, ¿e nasze potrzeby s¹ na tyle spe-
cyficzne, ¿e nie mo¿emy znaleæ aplikacji,
która w pe³ni spe³nia³aby nasze oczekiwa-
nia. W takiej sytuacji mamy dwa wyjcia: al-
bo zdaæ siê na ³askê producentów oprogra-
mowania i czekaæ na ukazanie siê
odpowiedniego narzêdzia, albo... stworzyæ
je samemu. Jak siê przekonamy, pisanie
w³asnych aplikacji wcale nie jest trudne.
Obecnie bardzo popularne s¹ rodowiska
do szybkiego tworzenia aplikacji, tzw. RAD
(Rapid Application Development), takie jak
Delphi czy Visual Basic. W niniejszym arty-
kule przedstawiê nieco inne podejcie, po-
zwalaj¹ce szybko tworzyæ aplikacje w pe³ni
otwarte i wieloplatformowe. Do tego celu
wykorzystam jêzyk skryptowy Python, dziê-
ki któremu rozwijanie nawet z³o¿onych pro-
jektów staje siê ³atwe i przyjemne.
Komputer belfrem
Z Pythonem zapoznamy siê, pisz¹c krótki,
lecz przydatny program wspomagaj¹cy na-
ukê s³ówek. Jak wiadomo, informacja utrwa-
la siê w pamiêci miêdzy innymi dziêki jej
powtarzaniu. Dlatego ci¹g³y wysi³ek umys³o-
wy, polegaj¹cy na przypominaniu sobie
okrelonego zbioru s³ówek, pozwoli nam je
szybciej zapamiêtaæ. Podejcie to stosuj¹ po-
pularne programy do nauki jêzyków, takie
jak e-Teacher czy bardzo niegdy popularne
SuperMemo. Du¿¹ wad¹ tego rozwi¹zania
jest brak kontekstu: zapamiêtujemy jedynie
s³ówko i jego znaczenie, nie wiemy nato-
miast, jak go u¿yæ. Trudno te¿ wychwyciæ
ró¿ne odcienie znaczeniowe, które wynikaj¹
z zastosowania w konkretnej wypowiedzi.
Mimo to program do nauki s³ówek mo¿e sta-
nowiæ cenn¹ pomoc dydaktyczn¹, zw³asz-
cza dla osób traktuj¹cych go jako narzêdzie
uzupe³niaj¹ce.
Klub mi³oników wê¿y
Sk³adnia Pythona jest bardzo przejrzysta
i prosta. Poniewa¿ sam jezyk nie zawiera
wielu elementów, mo¿na siê nauczyæ w nim
programowaæ w ci¹gu pó³ godziny. Na do³¹-
czonej do pisma p³ycie CD mo¿na znaleæ
przeznaczone dla Windows i Linuksa wersje
Pythona (interpreter wraz z niezbêdnymi bi-
bliotekami i modu³ami, oraz krótkie wpro-
wadzenie do programowania w tym jêzyku.
Przed przyst¹pieniem do pisania aplikacji
nale¿y zainstalowaæ Pythona. Warto te¿
przeczytaæ wspomniane wprowadzenie.
Jedn¹ z najwiêkszych zalet Pythona jest
jego wieloplatformowoæ. Oznacza to, ¿e
mo¿emy napisaæ program pod Windows,
a nasz kolega linuksowiec bez problemu go
u siebie uruchomi. Bêd¹ z niego mogli ko-
rzystaæ równie¿ u¿ytkownicy BeOS-a, QNX-
a, Mac OS-a i wiêkszoci innych popularnych
Okienka i przyciski
Rozwa¿ymy najprostszy model z mo¿liwych:
g³ówne okno (root), na którym znajdzie siê
napis-pytanie (typu Label) i pole do wprowa-
dzania tekstu (Entry). Rzeczywisty program
by³by oczywicie bardziej rozbudowany, jed-
nak naszym celem jest jedynie pokazanie,
jak ³atwo programuje siê w Pythonie. Label
i Entry to angielskie s³owa odpowiadaj¹ce
wymienionym wizualnym komponentom
(zwanym w rodowisku linuksowym widge-
tami), znajomo brzmi¹ce zw³aszcza dla tych,
którzy napisali choæ jeden program w Delphi
czy Visual Basicu. Z kolei nazwa root odnosi
siê do g³ównego okna programu i pochodzi
od korzenia drzewa hierarchii widgetów
w aplikacji.
Do obs³ugi interfejsu wykorzystamy Tkin-
ter. Jest to zestaw pythonowych dowi¹zañ do
popularnej biblioteki widgetów, znanej jako
CHIP
| KWIECIEÑ 2002
PORADY
>>
AKTUALNOCI
>>
TEMAT NUMERU
>>
HARDWARE
>>
SOFTWARE
>>
INTERNET I G@D¯ETY
>>
MAGAZYN
Programowanie w Pythonie
Tk (jeli mamy Windows, nie musimy siê
martwiæ Tk zostanie zainstalowane wraz
z Pythonem. W Linuksie komponent ten
znajduje siê w oddzielnym pakiecie; w in-
nych systemach, takich jak QNX, musimy
ci¹gn¹æ i skompilowaæ Tk samodzielnie).
Równie dobrze moglibymy u¿yæ innego ty-
pu GUI (GTK+, Qt), jednak Tkinter jest naj-
bardziej uniwersalny.
Najprostszy
nym oknie. Bêdzie za to odpowiedzialny na-
stêpuj¹cy fragment kodu:
z pliku tekstowego, wywietalnie wyrazu
lub zwrotu, czekanie na odpowied u¿yt-
kownika i ocen¹ tej odpowiedzi. Wykorzy-
stamy zwyk³e pliki tekstowe, w których
s³ówka przeplataj¹ siê z t³umaczeniami, np.:
tekst = Label(text='Tekst')
tekst.pack()
Jak widzimy, wykorzystalimy funkcjê
pack ()
, która jest odpowiedzialna za u³o-
¿enie danego widgetu w widgecie macierzy-
stym (czyli w naszym przypadku
w g³ównym oknie
root
). Funkcja
pack ()
mo¿e oczywicie przyjmowaæ ró¿ne argu-
menty, dziêku którym mo¿emy wyrówny-
waæ obiekty w widgetach-rodzicach. Na
przyk³ad pisz¹c
pack (side=LEFT)
, wyrów-
nujemy obiekt do lewej. Nastêpnie tworzy-
my pole do wprowadzania tekstu:
dom
house
matka
mother
samolot
plane
d¹b
oak
program
korzystaj¹cy
z Tkinter wygl¹da nastêpuj¹co:
# importujemy modu³ Tkinter
from Tkinter import *
# otwieramy g³ówne okno
root = Tk()
# przejcie do g³ównej pêtli
root.mainloop()
Na usta cinie siê pytanie: A co ze zna-
kami narodowymi?. Jeli planujemy u¿ywaæ
aplikacji na jednej tylko platformie, nie ma
problemu. Jeli jednak mamy Windows,
a zechcemy wymieniaæ bazy s³ówek z kole-
g¹-linuksowcem, trzeba bêdzie u¿yæ prostej
funkcji konwertujacej (takiej jak w progra-
mie za³¹czonym na p³ycie CD), która przeko-
duje wprowadzane znaki z i na ISO-8859-2.
pole = Entry()
pole.pack()
Po zapisaniu powy¿szego skryptu do pli-
ku i uruchomieniu go (poleceniem python
nazwa_pliku) zobaczymy na ekranie jedynie
niewielkie, szare okienko. Aby utworzyæ
okno o rozmiarach 300×300 pikseli i granato-
wym tle, nale¿y skorzystaæ z bardziej rozbu-
dowanej wersji wczeniejszego skryptu:
Takim sposobem otrzymujemy niezwykle
prosty, lecz dzia³aj¹cy interfejs u¿ytkowni-
ka. Byæ mo¿e utworzenie go zajê³o nam nie-
co wiêcej czasu ni¿ przeci¹gniêcie kontrolek
na formularze w Delphi czy Visual Basicu,
nasz skrypt zajmuje jednak o wiele mniej
miejsca i co te¿ nie jest bez znaczenia
mo¿na go utworzyæ w Notatniku, bez ¿ad-
nych dodatkowych narzêdzi. Co wiêcej, zna-
my nasz program od podszewki i mo¿emy
go uruchomiæ na ka¿dej platformie, na któ-
rej wystêpuje Python.
Interfejs mamy gotowy, pora teraz na sa-
m¹ logikê aplikacji, czyli pobieranie s³ówek
Uczmy siê razem
Pora na funcjê, która zajmie siê sprawdza-
niem, czy wprowadzony przez u¿ytkownika
ci¹g znaków odpowiada drugiemu s³owu
z ka¿dej pary z bazy s³ówek. Aby wczytaæ
ca³¹ bazê do pamiêci, wykorzystamy stan-
dardow¹ funkcjê
readlines()
, otworzywszy
uprzednio plik z baz¹ za pomoc¹ funkcji
open()
. Przyda nam siê te¿ zmienna global-
na
licznik
, wskazuj¹ca numer pary s³ówek,
from Tkinter import *
root = Tk()
root['bg']='navyblue'
root['height']=300
root['width']=300
root.mainloop()
32
»
Prawda, ¿e proste? W³aciwoci g³ównego
okna ustawia siê, korzystaj¹c ze zwyk³ych
pythonowych haszy (s³owników), których
klucze i wartoci opisane s¹ w dokumentacji.
Równie¿ i w tym przypadku mo¿emy do-
strzec podobieñstwo do Delphi, tyle ¿e za-
miast
obiekt. w³aciwoæ: = wartoæ
piszemy
obiekt['w³aciwoæ'] =
wartoæ
. Mo¿emy to równie¿ zrobiæ ina-
czej, wykorzystuj¹c funkcjê
geometry ()
,
dziêki której nie tylko ustawimy rozmiar
okna, ale i umiecimy je w ¿¹danym miejscu
na ekranie. Funkcja
geometry ()
przyjmuje
argument w postaci znanej u¿ytkownikom X
Window:
szerokoæ * wysokoæ + wspó³-
rzêdna_x + wspó³rzêdna_y
, przy czym
dwie ostatnie liczby wyznaczaj¹ przesuniê-
cie wzglêdem punktu (0,0), znajduj¹cego siê
w lewym górnym rogu ekranu.
U¿ytkownicy Linuksa
znajd¹ Pythona na p³ytach
ze swoj¹ dystrybucj¹. Rów-
nie¿ osoby korzystaj¹ce
z Windows czy Mac OS nie
powinny mieæ problemów
z instalacj¹ interpretera
i odpowiednich
bibliotek.
Interfejs naszego
programu
bêdzie prosty,
lecz u¿yteczny. Nic zreszt¹
nie stoi na przeszkodzie,
aby usprawniæ dzia³anie
programu.
Jak s³ówka
trafiaj¹ do okienek?
Kolej teraz na tekst (np. s³ówko w obcym jê-
zyku), który ma byæ wywietlany w g³ów-
CHIP
| KWIECIEÑ 2002
PORADY
>>
AKTUALNOCI
>>
TEMAT NUMERU
>>
HARDWARE
>>
SOFTWARE
>>
INTERNET I G@D¯ETY
>>
MAGAZYN
Programowanie w Pythonie
przy której jestemy. Zazwyczaj u¿ywanie
zmiennych globalnych nie jest dobrym po-
mys³em i wykszta³ca z³e nawyki programi-
styczne, jednak w naszym przypadku bêdzie
to najprostsze rozwi¹zanie.
Wykorzystamy jeszcze jedn¹ u¿yteczn¹
funkcjê:
unicode()
. Argumentami tej funk-
cji s¹: ³añcuch znaków, kodowanie i obs³uga
b³êdów (przy czym te dwa ostatnie s¹ opcjo-
nalne). Dziêki tej funkcji mo¿na ³atwo sobie
poradziæ z bazami s³ówek korzystaj¹cych
z ró¿nych kodowañ (np. francuski ISO-
-8859-1 i polski ISO-8859-2).
Jedn¹ z najwiêkszych
zalet aplikacji w Pythonie
jest ich
uniwersalnoæ
.
Program napisany pod
Windows bez problemu
uruchomimy np. pod
Linuksem.
root = Tk()
root.geometry('300x300+20+20')
licznik=1
file=open('dane.txt')
linie = file.readlines()
text=unicode(linie[0],'iso-8859-2')
label = Label(root, text=text)
label.pack()
pole = Entry()
pole.bind('', skok)
pole.pack(side=TOP)
tekst2 = Label(fg = 'blue',
text='OK')
tekst2.pack(side=TOP)
root.mainloop()
Pe³n¹ dokumentacjê
Pythona
i podrêczniki
dla pocz¹tkuj¹cych
u¿ytkowników
znajdziemy na stronie
http://www.python.org/.
siê po
try
zostanie napotkany wyj¹tek, wy-
konywany jest kod w bloku
except
.
+ linie[licznik][:-1],'iso-8859-2'))
# wymazujemy zawartoæ pola
# tekstowego, umo¿liwiaj¹c
# u¿ytkownikowi
# wprowadzenie nowego s³owa
pole.delete(0, len(pole.get()))
Aby nauka
nie posz³a w las...
I oto ca³y program (wersjê gotow¹ do uru-
chomienia mo¿na znaleæ na CD). Rzecz ja-
sna mo¿emy do niego wprowadziæ mnóstwo
usprawnieñ, jednak ju¿ w tej wersji nadaje
siê on do nauki s³ówek. Przy niewielkim wy-
si³ku zaimplementujemy funkcje licz¹ce po-
prawne odpowiedzi i oceniajace nasze postê-
py, okna dialogowe do wyboru ró¿nych baz,
obs³ugê plików dwiêkowych... By zacyto-
waæ ulubione powiedzenie Williama Gatesa:
Ogranicza nas tylko wyobrania.
Fragment ten wymaga krótkiego komenta-
rza: aby program zadzia³a³, nasz plik z dany-
mi musi siê nazywaæ
dane.txt
. Zmienna
li-
nie
to tablica zwieraj¹ca wiersze z bazy
s³owek, do których mo¿emy odwo³ywaæ siê
bezporednio, u¿ywaj¹c sk³adni
linie[nu-
mer_linii]
. Có¿ jednak oznacza tajemnicza
linia
pole.bind('', skok
)? To proste jeli
u¿ytkownik nacinie w tym polu klawisz
[Return] ([Enter]), zostanie wykonana fun-
cja skok. A oto i ona:
# próbujemy przejæ do nastêpnego
# has³a
try:
licznik = licznik + 2
label['text'] = unicode(linie
[licznik -1], 'iso-8859-2')
n
# jesli siê nie uda, koñczymy
except:
sys.exit()
INFO
def skok(event):
Aktualne dystrybucje Pythona
dla ró¿nych systemów
http://www.python.org/ftp/python/
Poprawiony Python dla Windows
http://downloads.ActiveState.com/
ActivePython/windows/2.1/
ActivePython-2.1.1.msi
Tak przedstawia siê nasza funkcja, odpowie-
dzialna za porównywanie wprowadzonego
przez u¿ytkownika tekstu z ³añcuchem po-
branym z bazy.
TkMessageBox. shower-
ror
to prosta funkcja wywietlaj¹ca komuni-
kat o b³êdzie, z charakterystyczn¹ ikonk¹
(patrz: ilustracja u góry strony). W naszym
przyk³adzie przyjmuje dwa argumenty: na-
zwê okna umieszczan¹ na pasku tytu³owym
(Oj!) oraz komunikat o b³êdzie, skonwer-
towany do obiektu typu Unicode.
Blok
try...except
pomaga (podobnie jak
w Delphi) radziæ sobie z wyj¹tkami. Jeli
podczas wykonywania kodu znajduj¹cego
# ze wzglêdu na specyfikê Pythona
# definiujemy wykorzystane
# w programie zmienne jako globalne
global licznik, pole, tekst,
tekst2, linie
# jeli odpowied u¿ytkownika nie
# zgadza siê ze s³owem z bazy,
# wywietlamy komunikat o b³êdzie
if (pole.get()!=linie[licznik]
[:-1]):
tkMessageBox.showerror('Oj!',
unicode('B³¹d, '\
+ 'prawid³owa odpowied brzmi '\
Na p³ycie CD do³¹czonej
do numeru, w dziale Po-
rady | Programowanie
w Pythonie mo¿na znaleæ Pythona dla
ró¿nych systemów, program omawiany
w artykule oraz wprowadzenie do pro-
gramowania w Pythonie.
2002
CHIP
| KWIECIEÑ 2002
Plik z chomika:
grzegorj
Inne pliki z tego folderu:
.NET + Python = IronPython.pdf
(727 KB)
A Learner's Guide to Programming Using the Python Language (2009).pdf
(17233 KB)
A Primer on Scientific Programming with Python, 2nd Edition (2011).pdf
(5083 KB)
A Primer on Scientific Programming with Python, 3rd Edition.pdf
(5392 KB)
Alex Martelli, David Ascber - Python Cookbook.pdf
(1593 KB)
Inne foldery tego chomika:
Agnieszka Nowak-Brzezińska
Beazley.David-Programowanie.Python.2002-iNTERnet
Flask Tutorial
Google Class Python
Jan Jełowicki
Zgłoś jeśli
naruszono regulamin