[Python]Instant Hacking.pdf

(619 KB) Pobierz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Instant Hacking : Nauka programowania na przykładzie Pythona
http://www.linuxpl.org/teksty/python/instant_hacking.html
Instant Hacking
Nauka programowania na przykładzie Pythona
Magnus Lie Hetland
tłum. Wojciech Warczakowski
Jest to krótkie wprowadzenie do sztuki programowania, z wykorzystaniem przykładów
napisanych w języku Python . (Jeśli już wiesz jak programować, a potrzebujesz krótkiego
wprowadzenia do języka Python, możesz skorzystać z mojego artykułu Instant Python .) Artykuł
ten został przetłumaczony na język włoski i obecnie trwa tłumaczenie wersji koreańskiej.
Strona ta nie traktuje o włamywaniu się do systemów komputerowych innych ludzi. Jeśli jesteś
zainteresowany tym tematem zobacz stronę Happy Hacker .
Uwaga : Aby zamieszczone przykłady działały poprawnie pisz je do pliku tekstowego a następnie
uruchamiaj interpreterem; nie próbuj uruchamiać programów w trybie interaktywnym - nie
wszystkie będą działać. (Nie pytaj mnie dlaczego. Sprawdź dokumentację ).
( Pochwała za artykuł. Main Python page )
1. Środowisko
Aby móc programować w Pythonie musisz mieć zainstalowany interpreter. Jest on dostępny na
wielu platformach (włącznie z Macintoshem, Uniksem i Windows). Więcej informacji na ten
temat znajdziesz na stronie Pythona . Powinieneś również mieć edytor tekstowy (np. emacs ,
notepad lub podobny).
2. Czym jest programowanie?
Programowanie komputera oznacza przekazywanie mu zestawu instrukcji mówiących co
powinien zrobić. Program komputerowy bardzo przypomina przepis na ciasto. Przykład [1]:
Sernik na kruchym cieście
Składniki:
Ciasto:
30 dag (1 1/2 szklanki) mąki
13 dag margaryny
5 dag (3 łyżki) cukru
4 żółtka
Masa serowa:
50 dag sera twarogowego tłustego
20 dag (niepełna szklanka) cukru
13 dag margaryny
4-5 jaj
2 dag (1 łyżka) kaszy manny
cukier waniliowy lub esencja zapachowa
Sposób przyrządzenia:
Margarynę posiekać nożem z mąką, a następnie połączyć z żółtkami i
1 z 12
2010-05-23 17:35
855455753.004.png 855455753.005.png 855455753.006.png 855455753.007.png 855455753.001.png 855455753.002.png 855455753.003.png
 
Instant Hacking : Nauka programowania na przykładzie Pythona
http://www.linuxpl.org/teksty/python/instant_hacking.html
cukrem. Ciasto szybko wyrobić ręką i schłodzić w lodówce (co najmniej
30 min). Schłodzone ciasto rozwałkować na grubość 1/2 cm i przenieść
wałkiem na blachę. Ciasto lekko podpiec w gorącym piekarniku (15-20
min). Przyrządzić masę serową: ser przepuścić przez maszynkę.
Margarynę utrzeć z cukrem, żółtkami, kaszą manną i stopniowo dodawanym
serem. Ubić sztywną pianę z białek i delikatnie połączyć z masą
serową. Masę wyłożyć na podpieczony spód i piec 30-40 min w
umiarkowanie gorącym piekarniku.
Oczywiście, żaden komputer tego nie zrozumie... A większość komputerów nie byłaby zdolna do
zrobienia sernika nawet, jeśli zrozumiałyby ten przepis. Zatem, co musimy zrobić, aby przepis
stał się bardziej przyjazny dla komputera? Zasadniczo dwie rzeczy. Musimy (1) mówić w taki
sposób, aby komputer nas zrozumiał, i (2) mówić o rzeczach, które jest on w stanie wykonać.
Pierwszy punkt oznacza, że musimy użyć języka - języka programowania zrozumiałego dla
naszego interpretera (tłum. programu tłumaczącego), a drugi punkt oznacza, że nie możemy
oczekiwać, aby komputer zrobił sernik - ale możemy oczekiwać, aby dodawał liczby i wypisywał
różne teksty na ekranie.
3. Witaj...
Tradycją jest, aby w tutorialach o programowaniu zaczynać zawsze od programu wypisującego
na ekranie "Witaj, świecie!". W Pythonie jest to dość proste:
print "Witaj, świecie!"
Zasadniczo program ten jest podobny do przedstawionego wcześniej przepisu na sernik
(oczywiście jest on znacznie krótszy!). Program mówi komputerowi, co ma zrobić: wypisać na
ekranie "Witaj, świecie!". Łatwizna. A jeśli chcielibyśmy, aby komputer wykonał coś
trudniejszego.
print "Witaj, świecie!"
print "Żegnaj, świecie!"
Niezbyt trudne, nieprawdaż? I niezbyt interesujące... Chcemy zrobić coś ze składnikami , tak jak
w przepisie na sernik. No dobrze - jakie mamy składniki? Mamy ciągi znaków, jak "Witaj,
świecie!" , ale również mamy liczby . Zlećmy, więc komputerowi, aby obliczył nam pole
prostokąta. Musimy, więc dać mu przepis jak powinien to wykonać:
# Pole prostokąta
# Składniki:
szerokosc = 20
wysokosc = 30
# Sposób przyrządzenia:
pole = szerokosc*wysokosc
print pole
Widzisz zapewne podobieństwo (choć niewielkie) do przepisu na sernik. Ale w jaki sposób działa
ten program? Po pierwsze, linie rozpoczynające się # nazywane są komentarzem i są ignorowane
przez komputer. Jednakże, użycie takich komentarzy jest niezwykle ważne dla ludzi, którzy
analizują twoje programy.
Linie takie jak foo = bar nazywane są przypisaniami . Poprzez wyrażenie szerokosc = 20
mówimy komputerowi, że szerokosc od tej chwili będzie równe 20. Co znaczy, że "szerokosc jest
równe 20"? Znaczy to, że zostanie utworzona (bądź ponownie wykorzystana, jeśli już istnieje)
zmienna o nazwie "szerokosc" i zostanie jej nadana wartość 20. Zatem, jeśli później użyjemy tej
zmiennej komputer będzie już znał jej wartość. Dlatego
2 z 12
2010-05-23 17:35
 
Instant Hacking : Nauka programowania na przykładzie Pythona
http://www.linuxpl.org/teksty/python/instant_hacking.html
szerokosc*wysokosc
jest w zasadzie tym samym co
20*30
które z kolei równe jest 600. Wartość ta następnie zostaje przypisana zmiennej "pole". Ostatnie
wyrażenie programu wypisuje na ekran wartość zmiennej "pole"
600
Uwaga: W niektórych językach już na początku programu musisz powiedzieć komputerowi
jakich zmiennych będziesz używał (jakich składników użyjesz do przygotowania sernika) - w
Pythonie zmienne możesz wymyślać w trakcie pisania programu.
4. Komunikacja z komputerem
Teraz możesz już przeprowadzać zarówno proste, jak i dość zaawansowane obliczenia. Na
przykład, chcesz obliczyć pole koła zamiast prostokąta:
promien = 30
print promien*promien*3.14
Jednak program ten, podobnie jak poprzedni, jest mało interesujący - przynajmniej moim
zdaniem. Jest on mało elastyczny. No bo, co będzie jeśli interesujące nas koło ma promień 31
stopni? Czy komputer może o tym wiedzieć? Sytuacja przypomina trochę przepis na sernik:
"Masę serową wyłożyć na podpieczony spód i piec 30-40 min. w umiarkowanie gorącym
piekarniku." Skąd możemy wiedzieć czy po 30 minutach sernik jest już upieczony? Musimy to
sprawdzić . W jaki sposób komputer dowie się o promieniu naszego koła? Musi nas o to zapytać...
My zaś musimy w programie powiedzieć mu, aby zapytał się o promień:
promien = input("Jaki jest promień?")
print promien*promien*3.14
input jest funkcją . (Niedługo nauczysz się tworzyć własne funkcje. input jest funkcją
wbudowaną w język Python.) Zwykłe napisanie
input
nie zrobi wiele... Musisz wstawić parę nawiasów na końcu słowa input. Zatem input() powinno
zadziałać - po prostu funkcja będzie czekać, aż użytkownik wpisze promień. Jeśli w nawiasy
funkcji wpiszemy pytanie "Jaki jest promień?" program stanie się przyjaźniejszy dla
użytkownika. To co wpisujemy w nawiasy funkcji nazywane jest parametrami . Wpisanie pytania
do funkcji input powoduje wypisanie tegoż pytania na ekranie i oczekiwanie odpowiedzi od
użytkownika.
Ale w jaki sposób odpowiedź trafia do zmiennej promien ? Funkcja input , kiedy zostanie
wywołana, zwraca wartość (tak jak inne funkcje). Nie musisz wykorzystywać tej wartości,
jednak w naszym przypadku chcemy z niej skorzystać. Zatem poniższe dwa wyrażenia mają
całkiem różne znaczenie:
foo = input
bar = input()
foo zawiera funkcję input dosłownie ją samą (zatem możesz użyć takiego wyrażenia foo("Ile
masz lat?") ; takie zjawisko nazywane jest dynamicznym wywołaniem funkcji), podczas gdy
bar zawiera to, co wpisze użytkownik jako odpowiedź.
3 z 12
2010-05-23 17:35
 
Instant Hacking : Nauka programowania na przykładzie Pythona
http://www.linuxpl.org/teksty/python/instant_hacking.html
5. Sterowanie
Możemy już pisać programy wykonujące proste działania (arytmetyczne i drukujące) jak również
komunikujące się z użytkownikiem. Jest to użyteczne, jednak nadal jesteśmy ograniczeni do tzw.
sekwencyjnego wykonania programu - rozkazy w programie wykonywane są w określonym
porządku. Przepisy na ciasta są pisane właśnie w takim sekwencyjnym lub liniowym porządku. A
gdybyśmy chcieli powiedzieć komputerowi w jaki sposób powinien sprawdzić, czy sernik jest już
upieczony? Jeśli jest, powinien go wyciągnąć z piekarnika, w przeciwnym razie powinien go
pozostawić w piekarniku na kolejne pięć minut. W jaki sposób to zrobimy?
To czego potrzebujemy nazywa się sterowaniem programem. Program może wykonać dwa
działania - albo wyciągnąć sernik z piekarnika, albo pozostawić go. Możemy wybierać, a
warunkiem jest, czy sernik jest już upieczony, czy nie. Technika ta nazywana jest warunkowym
wykonaniem programu. Program może wyglądać tak:
temperatura = input("Jaka jest temperatura sernika?")
if temperatura > 30:
print "Sernik jest już upieczony."
else:
print "Musisz troszkę poczekać na sernik."
Znaczenie programu powinno być oczywiste: Jeśli temperatura jest wyższa niż 30st.C, wówczas
wypisz komunikat mówiący użytkownikowi, że sernik jest już upieczony, w przeciwnym razie
powiedz użytkownikowi, że musi jeszcze troszkę poczekać.
Uwaga: Wcięcia w języku Python są ważne. Bloki w wykonaniu warunkowym (i pętle oraz
definicje funkcji - patrz niżej) muszą mieć wcięcia (wcięcia z tą samą liczbą białych znaków;
jeden <tab> liczy się jako 8 spacji) aby interpreter wiedział, w którym miejscu rozpoczynają się,
a w którym kończą. Wcięcią również czynią program bardziej czytelny dla ludzi.
Wróćmy do naszych obliczeń pola. Czy widzisz, co ten program robi?
# Program obliczający pole
print "Witamy w programie obliczającym pole"
print "------------------------------------"
print
# Wydrukuj menu:
print "Wybierz figurę:"
print "1 Prostokąt"
print "2 Koło"
# Czekaj na wybór użytkownika:
figura = input("> ")
# Oblicz pole:
if figura == 1:
wysokosc = input("Wpisz wysokość: ")
szerokosc = input("Wpisz szerokość: ")
pole = wysokosc*szerokosc
print "Pole wynosi", pole
else:
promien = input("Wpisz promien: ")
pole = 3.14*(promien**2)
print "Pole wynosi", pole
Nowe rzeczy w tym przykładzie...
1.
print użyte samo drukuje pustą linię
2.
== sprawdza, czy dwie rzeczy są równe, w przeciwieństwie do = , które przypisuje wartość
z prawej strony do zmiennej po lewej stronie. Jest to ważna różnica !
4 z 12
2010-05-23 17:35
 
Instant Hacking : Nauka programowania na przykładzie Pythona
http://www.linuxpl.org/teksty/python/instant_hacking.html
3.
** jest pythonowskim operatorem potęgowania - dlatego promień podniesiony do
kwadratu jest zapisany jako promien**2
4.
print może wydrukować więcej niż jedną rzecz. Po prostu oddziel te rzeczy przecinkami.
(Na ekranie będą one oddzielone pojedynczą spacją.)
Program ten jest dosyć prosty: Pyta o liczbę, która mówi mu, czy użytkownik chce obliczyć pole
prostokąta, czy koła. Następnie, korzysta z if -wyrażenia (wykonanie warunkowe), aby
zdecydować, który blok wykorzystać do obliczenia pola. W zasadzie te dwa bloki są takie same
jak te, które używaliśmy w poprzednich przykładach. Zauważ, że komentarze czynią kod
bardziej czytelnym. Można powiedzieć, że pierwszym przykazaniem programowania jest
"Będziesz pisał komentarze!". W każdym bądź razie - jest to pożądany nawyk.
Ćwiczenie:
Rozszerz program o opcję obliczania pola kwadratów, tak aby użytkownik podawał długość
jednego boku. Jest jedna rzecz, którą musisz wiedzieć, aby wykonać to ćwiczenie - jeśli masz
więcej niż dwa wybory, możesz zapisać to w taki sposób:
if foo == 1:
# Zrób coś...
elif foo == 2:
# Zrób coś innego...
elif foo == 3:
# Zrób coś zupełnie różnego...
else:
# Jeśli żaden z warunków nie został spełniony...
elif jest tajemniczym kodem, który oznacza "else if" :) . Zatem, jeśli foo równa się jeden, zrób
coś; w przeciwnym razie, jeśli foo równa się dwa, zrób coś innego, itd. Możesz chcieć dodać do
programu również inne opcje - jak trójkąty lub wielokąty. Wszystko zależy od ciebie.
6. Pętle
Sekwencyjne i warunkowe wykonania są tylko dwoma z trzech fundamentalnych elementów
budujących program. Trzecim jest pętla . Proponowałem wcześniej rozwiązanie sprawdzające,
czy sernik upiekł się. Jednak nie było ono dosyć wystarczające. No bo, jeśli sernik nie będzie
gotowy, to jak następnym razem sprawdzimy czy już się upiekł. Skąd będziemy wiedzieć ile razy
musimy to sprawdzać? Prawda jest taka, że nie będziemy wiedzieć. Powinniśmy móc zlecić
komputerowi, aby sprawdzał sernik do czasu, aż będzie on upieczony. W jaki sposób to zrobić?
Zgadłeś - użyjemy pętli, lub wykonania powtarzanego .
Python ma dwa rodzaje pętli: while -pętle i for -pętle. For-pętle są chyba najprostsze. Na
przykład:
for jedzenie in "ciasto", "jajka", "pomidory":
print "Kocham", jedzenie
Co oznacza: dla każdego elementu w liście "ciasto", "jajka", "pomidory" wypisz tekst, że
go kochasz. Block wewnątrz pętli jest wykonywany raz dla każdego elementu, i za każdym
razem, bieżący element jest podstawiany do zmiennej jedzenie (w tym przypadku). Inny
przykład:
for liczba in range(1,100):
print "Witaj, świecie!"
print "Tylko", 100 - liczba, "pozostało..."
print "Witaj, świecie"
print "To był ostatni... Fju!"
Funkcja range zwraca listę liczb w podanym przedziale (włącznie z pierwszą, bez ostatniej... W
tym przypadku, [1..99]). Zatem, parafrazując:
5 z 12
2010-05-23 17:35
 
Zgłoś jeśli naruszono regulamin