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
840421739.051.png 840421739.062.png 840421739.073.png
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
840421739.081.png 840421739.001.png 840421739.002.png 840421739.003.png 840421739.004.png 840421739.005.png 840421739.006.png 840421739.007.png 840421739.008.png 840421739.009.png 840421739.010.png 840421739.011.png 840421739.012.png 840421739.013.png 840421739.014.png 840421739.015.png 840421739.016.png 840421739.017.png 840421739.018.png 840421739.019.png 840421739.020.png 840421739.021.png 840421739.022.png 840421739.023.png 840421739.024.png 840421739.025.png 840421739.026.png 840421739.027.png 840421739.028.png 840421739.029.png 840421739.030.png 840421739.031.png 840421739.032.png 840421739.033.png
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
840421739.034.png 840421739.035.png 840421739.036.png 840421739.037.png 840421739.038.png 840421739.039.png 840421739.040.png 840421739.041.png 840421739.042.png 840421739.043.png 840421739.044.png 840421739.045.png 840421739.046.png 840421739.047.png 840421739.048.png 840421739.049.png 840421739.050.png 840421739.052.png 840421739.053.png 840421739.054.png 840421739.055.png 840421739.056.png 840421739.057.png 840421739.058.png 840421739.059.png 840421739.060.png 840421739.061.png 840421739.063.png 840421739.064.png 840421739.065.png 840421739.066.png 840421739.067.png 840421739.068.png 840421739.069.png 840421739.070.png 840421739.071.png 840421739.072.png 840421739.074.png 840421739.075.png 840421739.076.png 840421739.077.png 840421739.078.png 840421739.079.png 840421739.080.png
Zgłoś jeśli naruszono regulamin