[ Pobierz całość w formacie PDF ]
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
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
[ Pobierz całość w formacie PDF ]
Tematy
- Strona pocz±tkowa
- !Ken Follett - Zabójcza pamięć, E-booki, Ken Follett - Zabójcza pamięć
- § Szpieg Boga - Gomez-Jurado Juan, ■■ ███████ ■■ e-Booki, ▲ Gomez Jurado Juan
- Philip K. Dick - Za Drzwiami, E-booki, Dick Philip
- Bolesław Prus - Michałko, E-booki, Bolesław Prus
- Henryk Sienkiewicz - Bez Dogmatu, E-booki, Henryk Sienkiewicz
- Bolesław Prus - Lalka, E-booki, Bolesław Prus
- Adam Mickiewicz - Księgi Narodu Polskiego I Pielgrzymstwa Polskiego, E-booki, Adam Mickiewicz
- Alistair Maclean - Mroczny Krzyzowiec, E-booki, Alistair Maclean
- Philip K. Dick - Paszcza Wieloryba, E-booki, Dick Philip
- Agata Christie - Noc W Bibliotece, E-booki, Agata Christie
- zanotowane.pl
- doc.pisz.pl
- pdf.pisz.pl
- mandragora32.opx.pl