poniedziałek, 1 sierpnia 2011

Mega tutorial by Assa.py

Dołączona grafika
Megatutorial by Aссаръеллюсс


Witam w drugim moim wielkim tutorialu!Tym razem jednak nie o AutoIT ,ale o innym już dużo 'doroślejszym' języku skryptowym.

Tuta,pozwólcie,będe pisał partami edytując ten post.
1.Czym jest Python?
Dobra pozwólcie że wylewał się nie będe i przytocze cytat z Wikipedii:

Cytat
Python – interpretowany, interaktywny język programowania stworzony przez Guido van Rossuma w 1990. Python posiada w pełni dynamiczny system typów i automatyczne zarządzanie pamięcią, jest zatem podobny do takich języków, jak Tcl, Perl, Scheme czy Ruby.

Python rozwijany jest jako projekt Open Source, zarządzany przez Python Software Foundation, będącą organizacją non-profit. Standardowa implementacja to tzw. CPython (pisany w C), ale istnieją też inne, takie jak Jython (w Javie), IronPython (na platformę .NET) i PyPy (w Pythonie).


Pewnie (jeżeli dopiero zaczynacie przygodę z programowaniem)większość rzeczy w powyższym cytacie jest nie zrozumiała dla was. Radzę przejść do wiki i poczytać trochę,poklikać itd.Powiem jedynie że Python jest bardzo funkcjonalny,wykonywany dynamicznie i szybki(jak na język skryptowy).

1.1Co możemy w nim napisać?
Wszystko absolutnie wszystko :P
Python posiada mnóstwo frameworków,bibliotek.Ponadto posiada możliwość dołączenia bibliotek napisanych w C(ofc specjalnie przystosowane do Pythona).Dzięki Django możemy w prosty sposób napisać CMSa(System Zarządzania Treścią).

Dobra koniec rozprawiania o tym jaki Python dobry jest.Przejdźmy od słów do czynów!
2.Instalacja Pythona

W tym tucie korzystał będe z ActivePython który nie jest oficjalnie wydany przez python.org.Można go pobrać ze strony:
http://www.activestate.com/activepython/downloads
(ActivePython Community Edition).Ponieważ instalator nie ustawia domyślnie zmiennych środowiskowych musimy ustawić je ręcznie.Wchodzimy więc kolejno:

Panel Sterowania->System->Zakładka Zaawansowane->Zmienne Środowiskowe

Tera powinno wyświetlić nam się okienko edycji zmiennych.Na dole w zmiennych systemowych klikasz Nowa i w okienku które się wyświetliło w polu pierwszym wpisujesz PYTHONPATH a w drugim ścieżke do folderu pythona np. tak: D:\python2.7.Jednak to jeszcze nie koniec.Musimy dodać jeszcze jedną zmienną.Robimy to identycznie jak z PYTHONPATH jednak zamiast PYTHONPATH wpisujemy PYTHONHOME.

Dobra mamy już przygotowane środowisko.
3.Hello World

Każdy skrypt pythona zaczynamy od:
#!/usr/bin/env python

Jest to odwołanie do interpretera Pythona na systemach *nixowych.Skrypty zapisujemy z rozszerzeniem .py
Do wyświetlania tekstu w konsoli służy funkcja print.Tekst który ma wypisać umiewszczamy między " lub '.Gdy tekst zawiera więcej niż jedną linię używamy """(3x").Skrypty Pythona uruchamiamy za pomocą polecenia(w CMD) :
python nazwa_pliku.py


Jeżeli napisałeś już Hello World'a sam to muszę ci pogratulować:Przeczytałeś mój tekst!Jeżeli nie udało ci się mimo uważnego czytania nie będe się gniewał :P ale jedna uwaga: przyłóż się :P

Dobra kod dla niepewnych:
#!/usr/bin/env python
print "Hello World"


Naszym oczom powinien ukazać się zgrabny napis Hello World!Teraz pora przejść do bardziej zaawansowanych rzeczy.


4.Zmienne
Sposobów przechowywania danych w programach jest całkiem sporo.Mamy bazy danych,stos,tablice...Trzeba jednak przyznać że najczęściej używaną strukturą programistyczną jest zmienna.Czym więc ta zmienna jest?Tutaj znów posłużę się cytatem:



Cytat
Zmienna - konstrukcja programistyczna posiadająca trzy podstawowe atrybuty: symboliczną nazwę, miejsce przechowywania i wartość; pozwalająca w programie odwoływać się przy pomocy nazwy do wartości lub miejsca przechowywania. Nazwa służy do identyfikowania zmiennej w związku z tym często nazywana jest identyfikatorem. Miejsce przechowywania przeważnie znajduje się w pamięci komputera i określane jest przez adres i długość danych. Wartość to zawartość miejsca przechowywania. Zmienna zazwyczaj posiada również czwarty atrybut: typ, określający rodzaj danych przechowywanych w zmiennej i co za tym idzie sposób reprezentacji wartości w miejscu przechowywania. W programie wartość zmiennej może być odczytywana lub zastępowana nową wartością, tak więc wartość zmiennej może zmieniać się w trakcie wykonywania programu, natomiast dwa pierwsze atrybuty (nazwa i miejsce przechowywania) nie zmieniają się w trakcie istnienia zmiennej[1]. W zależności od rodzaju języka typ zmiennej może być stały lub zmienny.

Dobra z powyższego opisu wiemy mniej więcej jak ta zmienna wygląda.W takim C posiada:

typ(np. int)nazwę(tzw.identyfikator)=wartość(np.10)


Ale my nie zajmujemy się C a Pythonem.Pora więc na Pythona:

#!/usr/bin/env python
a = 10
b =1
print a,b

Ten przykład wyjątkowo rozkazuje wam przepisać i uruchomić.Co widzicie?Zapewne jest to 10 1.Zadeklarowaliśmy właśnie 2 zmienne a i b a później je wyświetliliśmy.No cóż jeżeli to nadal was nie przekonało co do przydatności zmiennych to pokaże wam coś jeszcze:

#!/usr/bin/env python
a = '1'
b = '2'
c = 1
d = 2
print a+bprint c+d

Skopiujcie sobie i uruchomcie.Co widzicie?Jeżeli wszystko dobrze poszło jest to na pewno 12 i 3.Drugi wynik zgadza się,ale nie pierwszy.A to dlaczego skoro podaliśmy dobre dane?Po pierwsze zadeklarowaliśmy dwie zmienne tekstowe nie zaś liczby.Po drugie pozornie wykonując dodawanie zastosowaliśmy kontakenacje(więcej info na temat łączenia łańcuchów znaków w tucie psycho:Przeciążanie operatorów).Jak pewnie zauważyliście na łańcuchach znaków(tak nazywa się zmienne tekstowe) jak i na wartościach liczbowych możemy wykonywać działania.Oczywiście na łańcuchach nie wykonamy mnożenia i dzielenia.Zresztą łańcuchom znaków poświęce kolejny rozdział.Jakie obliczenia możemy wykonywać na zmiennych:
#!/usr/bin/env python
a = 2
b = 5
print a+bprint a*bprint a/bprint a%b

Deklarujemy 2 zmienne. Wyświetlamy wynik ich dodawania,mnożenia,dzielenia oraz reszty z dzielenia.Wykonajcie ten skrypt.Zobaczycie wyniki:
7
10
0
2
Zdziwi pewnioe się większość z was wynik dzielenia a/b.Dlaczego jest to zero a nie 0,4?Wynik jest zaokrąglony w dół ponieważ użyliśmy zmiennych całkowitych(integer),a my potrzebujemy typu zm,iennoprzecinkowego(float,double).Takowy deklarujemy tak samo jak w AutoIt czyli:
a = 2.0
b = 5.0

Pamiętajmy żeby liczby zmiennoprzecinkowe zapisywać w notacji amrykńaskiej nie zaś polskiej(chodzi mi o przecinek w notacji polskiej i o kropke w notacji USA).

Warto pamietać o możliwości przypisywania zmiennych do siebie czyli:
b = 10
a = b

4.1Łańcuchy znaków
Oprócz poznanej już wcześniej konkatenacji istnieje jeszcze hmm...obcinanie.Robimy to podając początek napisu który chcemy zostawić(liczymy zawsze od 0!!!) do indeksu litery.Moje mętne tłumaczenia być może mało wam mówią ,ale przykład już na pewno:
#!/usr/bin/env python
a = 'Witaj w swiecie'
print a[0]
print a[0:5]

Pierwszy napis jaki zobaczymy jest to litera W drugi zaś to Witaj.Zastosowaliśmy tuataj operator indeksowania o następującej składni:
nazwa_zmiennej[od:do]

Wyświetlanie łańcuchów wraz z wyświetlaniem zmiennych liczbowych wymaga użycia metody repr().

Oto prosty przykład zastosowania:
a='Twoj szczesliwy numerek to: '

c=7
print a + repr(c)

Składnia repr
repr(nazwa_zmiennej)

Bardzo przydatne jak widzimy ;)
Zamiast repr możemy użyć str o identycznej składni.
4.2Operacje na stringach:

s.capitalize() - zmienia pierwszą literę na dużą
s.center(długość) - Centruje napis w polu o podanej długości
s.count(sub) - zlicza wystąpienie podciągu sub w napisie s
s.encode(kodowanie) - zwraca zakodowaną wersję napisu ('utf-8', 'ascii', 'utf-16')
s.isalnum() - sprawdza czy wszystkie znaki są znakami alfanumerycznymi
s.isdigit() - sprawdza czy wszystkie znaki są cyframi
s.islower() - sprawdza czy wszystkie litery są małe
s.isspace() - sprawdza czy wszystkie znaki są białymi znakami
s.isupper() - sprawdza czy wszystkie litery są duże
s.join(t) - łączy wszystkie napisy na liście t używając s jako separatora
5.Instrukcje sterujące
5.1If...elif...else

5.1.1.If...
Instrukcję if możemy po polsku nazwać ,,jezeli".Istnieją dodatki do if w postaci elif(w C elseif) oraz else.Jeżeli pisałeś np. w AutoIt to zapewne zdziwi cię fakt że nie ma tu prawa bytu instrukcja switch. Jest po prostu zastąpiona szybszym if...elif.Dobra skończmy te formalności i przejdźmy do kodu,ale najpierw mała dygresja:python jest czuły na tzw.białe znaki(spacja,tabulator itd.).Oznaczają one zasięg instrukcji sterujących.

Oto nasz kodzik który wspólnie przeanalizujemy:
a=1
b=2
print "To zobaczymy"
if a==b:
        print "tego już nie zobaczymy"
print "koniec"

Na początku deklarujemy dwie zmienne o różnych wartościach.Później porównujemy te zmienne i jeżeli są równe (==) wtedy wyświetlamy napis "tego już nie zobaczymy".Jak łatwo się domyślić funkcja print zawarta w bloku if.
5.1.2 If...else
Fraza else to rozszerzenie instrukcji if.Możemy ją tłumaczyć tak:jeżeli warunek nie jest prawdziwy wtedy wykonuj instrukcje z bloku else.Tłumaczenie najprostsze na jakie mnie stać:)
Przykład
a=1
b=2
if a==b:
    print "a i be są równe"
else:
    print "a i b nie są równe"

Jak widać wykona się tylko instrukcja print z bloku else czyli a i b nie są równe
5.1.3 If...elif...else
Jak w nagłówku widać do znanej nam już pary wepchnął się elif.Elif znany być może skądinąd jako else if,pozwala nam na sprawdzenie kilku warunków.Przejdźmy do sedna sprawy czyli trafnego przykładu:
a=18
b=14
if a == b:
    print "A jest równe B"
elif a >= b:
    printa "A jest większe lub równe B"
else:
    print "A jest inne"

Pokumbinuj trochę ze zmiennymi a na pewno zrozumiesz sens.
Dodać oczywiście możemy więcej warunków elif. W Pythonie często służy do zasymulowania nieistniejącego w Pythonie Switch'a.
a=18
b=14
if a == b:
    print "A jest równe B"
elif a >= b:
    printa "A jest większe lub równe B"
elif a <= b:
   print "A jest mniejsze lub równe B"
elif a != b:
    print "A nie jest równe B"  #ten warunek został spełniony
else:
    print "A jest inne"

5.2 For

Jeżeli programowaliście kiedyś w jakimś języku to na pewno spotkaliście się z pętlą for. W Pythonie działa ona trochę inaczej: iteruje po zbiorze. Czyli działa jak foreach w innych językach. Do określenia zbioru liczbowego służy funkcja Range:
Range(1,10)

For ma składnię taką samą jak inne konstrukcje a więc:
for x in Range(1,10):
        print x


wyświetli nam kolejno 10 liczb.
5.2.1 Foreach
For jak już wspomniałem nie jest zwykłym for. Działa jak foreach więc jeżeli mamy np.listę i chcemy wyświetlić jej zawartość piszemy:
lista=['1','2','3'] #itd....
for x in lista:
        print x

Powinno wyświetlić nam zawartość listy.
5.3 While

While to pętla która wykonuje się dopóki jest spełniony warunek. Czym jest warunek wiemy z rozdziału nt. Porównań. Np.
x=10
v=10
while x==10: #wykona się
        print "LOL"

Powyższego kodu nie radzę uruchamiać-zbuguje wam konsole.
5.3.1
Jeżeli potrzebujemy pętli nieskończonej po prostu piszemy:
while True:

lub 
while 1


6.Typy danych
6.1Listy
Listy to najzwyklejsze,znane z innych języków tablice.Dla bardziej zielonych:tablica(Pythonowa lista)to po prostu inny dużo wygodniejszy.Załóżmy że piszemy lottomat porównujący wyniki losowania z dnia 1.1.2001 roku.Po prostu wsadzamy te wyniki do jednej wielkiej listy,a potem szukamy wartości powtarzających się.Cóż może to zły przykład ale napewno lepszy niż tłumaczenie tego typu:
-Po co robić 100 zmiennych o takiej samej zawartości jak możemy użyć tablicy.
Cóż po takim tłumaczeniu sam nie zabardzo wiem o co biega z tymi tablicami.
Pora na przykład:
lista=['Tutorial','example','Coding','Gods']
print lista[0],lista[2],lista[3]


Po uruchomieniu tego kodu zobaczymy napis:
Tutorial Coding Gods

Do elementów tablicy dostajemy się jak już mówiłem poprzez jej indeks.Indeks elementów jest ustalany dla pierwszego elemntu od zera!!!
By dostać się do listy możemy także podawać ujemne indeksy:
lista=['Tutorial','example','Coding','Gods']
print lista[-1]

W efekcie dostaniemy słówko Gods.Podawanie ujemnego indeksu skutkuje wyświetlaniem elemntów listy od tyłu.

6.2Krotki(Tuple)

Krotki to listy o niezmiennej zawartości.Są niemodowalne,możemy jednak wykonywać na nich podobne operacje poza zmienianiem zawartości krotki.
Krotkę tworzymy podobnie jak listę ale zamiast nawiasów kwadratowych wstawiamy okrągłe:<br>
krotka=(1,2,3,4,5,6,7,8,9)
for x in krotka:
        print x

6.3Słowniki
Słowniki to znane z PHP(i perla, tam jednak nazywane "haszami") tablice asocjacyjne.Do jej elementów dostajemy się podając klucz.
Przykład słownika:
numery={ "karol" : 888999 , "kasia" : 999999 }
print numery["karol"]

Gdzie karol i kasia to klucze a numery to wartości kluczy.Wartość podajemy po : (dwukropek)
7.Programowanie obiektowe
7.1 Wstęp.Funkcje
Programowanie obiektowe opiera się na tworzeniu nowych typów danych za pomocą klas. Klasa jak to pięknie napisane było w pewnej książce to: "zbiór danych oraz funkcji które z nich korzystają". O tym czym jest funkcja jeszcze nie powiedziałem. Jest to konstrukcja pozalająca na wywołanie pewnych instrukcji w niej zawartej. Funkcja przyjmuje parametry które pozwalają operować na realnych zmiennych. Moje tłumaczenie pewnie jak zwykle zbyt zawiłe więc zapodam przykład:
def Funkcja(imie ="nikt")
    print imieif __name__ == "__main__":
    Funkcja("Assarelliuss")
    Funkcja()

Przeanalizujmy:
def-definiuje funkcje o nazwie Funkcja,przyjmującą jako parametr imie. Imie jest parametrem domyślnym, ponieważ gdy go nie podamy zostanie przyjęte imie nikt.
print imie- wyświetla podany parametr. Na tym kończy się definicja funkcji a zaczyna właściwy program.
if __name__ == "__main__": - uruchamia aplikacje. O parametrze __name__ jeszcze sobie powiemy.
Przedostatnia linijka powoduje wywołanie funkcji Funkcja z parametrem Assarelliuss, Czyli wyświetla moje imie :)Ostatnia linijka powinna wyświetlić imie nikt, ponieważ ustawiliśmy takowy jako domyślny:)
7.2 Klasy, czyli nowe typy danych
Programowanie obiektowe polega na tworzeniu nowych typów danych, będących strukturami złożonymi z typów prostych(które nie są obecne w Pythonie, ponieważ interpreter "domyśla się" typów. Nie programującym w językach mocno typowanych trudno będzie zrozumieć tą metaforę). Klasa składa się z pól-zmiennych oraz metod-funkcji. Wyobraźmy sobie robota. Może on wykonywać kilka ruchów za pomocą metod, pola zaś określają jego stan. Metody mogą modyfikować pola, mogą również korzystać z nich. Ważną rzeczą w programowaniu obiektowym jest enkapsulacja danych. Chodzi o to by udostępnić użytkownikowi jedynie interfejs do obsługi klasy nie zaś całej klasy. Sprowadza się to do odpowiednich modyfikatorów dostępu. Pozwalają one na utrzymanie pewnego porządku oraz "czystość" danych. Klasy mogą dziedziczyć po innych klasach, otrzymując część ich metod i pól. 
Dobrze, część teoretyczną mamy już za sobą. Jak więc wygląda przykładowa klasa?


class Forum(object):
        def __init__(self):
                self.uzytkownicy = []
        def dodaj(self, obiekt):
                self.uzytkownicy.append(obiekt)
        def ilosc(self):
                return len(self.uzytkownicy)

7.2.1 __init__
Deklarację klasy rozpoczynamy od słówka class. Myślę że jest to całkiem logiczne :)
Później deklarujemy metodę(jak już mówiłem funkcję w klasie) o bardzo dziwnej nazwie __init__ i podajemy jej jeszcze dziwniejszy parametr- self. Cóż to znaczy?Metoda __init__ musi być w każdej klasie i jest w każdej klasie. Służy ona do inicjalizacji obiektu, czyli tego naszego ciastka(jak pamiętamy klasa jest tylko formą na ciastka). W Pythonie pełni role pseudokonstruktora. Dlaczego pseudo? Nie nazywa się tak jak klasa, jest prywatny(choć może być dziedziczony) i występuje razem z konstruktorem domyślnym, który alokuje pamięć, przygotowuje "teren" pod obiekt. Co także może dziwić, to w nim deklarujemy pola. Python jest na tyle elastyczny że pozwala na deklaracje pól poza konstruktorem. Jednak one i tak będą "wsadzone" do konstruktora. Dlaczego? Ponieważ musimy je zainicjować.
7.2.2 self
Self to synonim obiektu bieżącego. Pozwala nam na odwoływanie się do wnętrza klasy z jej wnętrza, bez ciągłego podawania nazwy klasy. Jeżeli ktoś programował w jakimś innym obiektowym języku niech wie że self jest tym samym co this.
7.2.3 object
Object to klasa po której dziedziczy każda klasa zdefiniowana w Pythonie. Zawiera wiele przydatnych metod jak np. __dict__, __dir__ itd. Po tej klasie możemy dziedziczyć jawnie(explicite) lub nie jawnie(implicite). Standard 2.x.x nakazuje dziedziczenie explicite.
7.3 Obiekt.
Dobrze mamy zdefiniowaną klasę, teraz musimy stworzyć obiekt. Tworzenie obiektu to nic innego jak stworzenie zmiennej. Przyjrzyjmy się przykładowi.
class Forum:
    def __init__(self):
        self.uzytkownicy = []  
        print "Metoda __init__"
    def dodaj(self, obiekt):
        self.uzytkownicy.append(obiekt)
        def ilosc(self):
        return len(self.uzytkownicy)
if __name__ == "__main__":
    forum = Forum()   

    forum.dodaj("Assa")
    forum.dodaj("Majki")
    forum.dodaj("PsychoBoy")
    """itd"""
    print forum.__dict__

    print forum.ilosc()

7.4 Dziedziczenie
7.4.1 Podstawy

Dziedziczenie to bardzo prosty sposób uzupełniania klas o metody. Klasa dziedzicząca po innej będzie zawierać jej metody, o ile nie są one prywatne. Sprawia to że nie musimy ciągle przepisywać tego samego kodu, jednocześnie pozwalając na tworzenie pewnej hierarchii. Założmy że mamy klasę Zwierzę. Z tej klasy chcemy wyprowadzić klasy Ssak oraz Ptak. Ssaki oraz ptaki mają pewne cechy wspólne jak np. oddychanie czy jedzenie. Bardzo prosto będzie więc zdefiniować je w klasie bazowej Zwierzę.
Przykład:
class Animal(object):
    def Oddychaj(self):
        print "Oddycham"
class Bird(Animal):
    def Lec(self):
        print "Lece"
class Mammal(Animal):
    def Biegnij(self):
        print "Biegne"
if __name__ == "__main__":
    anim=Animal()
    anim.Oddychaj()
    bird=Bird()
    bird.Oddychaj()
    bird.Lec()
    mammal=Mammal()
    mammal.Oddychaj()
    mammal.Biegnij()

Jak widać jest bardzo prosta prezentacja możliwości dziedziczenia. Oczywiście nie należy przesadzać :uśmiech:
7.4.2 Wirtualizacja

Czym było by programowanie obiektowe bez metod wirtualnych? Na pewno nie miałoby tylu zalet :usmiech z jezykiem:. Czym są metody wirtualne? To takie które mogą zastać nadpisane przez metodę innej klasy. W Pythonie nie potrzeba specjalnego określania jakie metody czy klasy są wirtualne. Prosty przykład:


class Animal(object):
    def Oddychaj(self):
        print "Oddycham"
class Fish(Animal):
    def Oddychaj(self):
        print "Oddycham skrzelami"
class Mammal(Animal):
    def Oddychaj(self):
        print "Oddycham plucami"
if __name__=="__main__":
    animal=Animal()
    animal.Oddychaj()
    fish=Fish()
    fish.Oddychaj()
    mammal=Mammal()
    mammal.Oddychaj()


7.4.3 Wielodziedziczenie
Wielodizedziczenie to dziedziczenie z kilku klas. Może być wam znane z języka C++. W Java oraz C# korzysta się z interfejsów, choć ta praktyka robi się coraz popularniejsza wśród programistów C++. Jak wygląda wielodziedziczenie? Prawie tak samo jak zwykłe dziedziczenie z jednej klasy z tymże jednak wyjątkiem, że dziedziczymy z wielu klas :P
Przykład:

7.5 Hermetyzacja
Choć nie istnieje w pełni w Pythonie możemy mieć jej drobną namiastkę. Aby uczynić metodę widoczną jedynie w klasie bazowej wystarczy dodać dwa znaki podkreślenia(__) przed nazwą metody. Sprawi to że metody prywatne nie będą dziedziczone i nie będzie możliwości skorzystania z nich w klasie pochodnej. Pisząc aplikacje dla siebie(tzn. bez przygotowywania interfejsu API dla innych programistów)zazwyczaj hermetyzację się pomija.
Przykład metody prywatnej:

class Foo(object):
        def __private(self): #to metoda prywatna
                pass


Łatwo zauważyć że mamy kilka metod prywatnych które są automatycznie dostarczane do każdej klasy np. pseudo-konstruktor __init__, słownik __dict__ itd. Dwa podkreślenia za nazwą metody są oznaczeniem konwencji przyjętej jeszcze przed wydaniem Python'a.
7.6 Dekoratory
Dekoratory to nic innego jak pewien trik składniowy 
7.7 Pare dobrych zwyczajów


8.Obsługa Wyjątków
Wyjątki-mechanizm obsługi błędów oraz sytuacji wyjątkowych. Wyobraźmy sobie, że pozwalamy na wybranie jakiegoś pliku użytkownikowi(potem będziemy czytać ten plik czy coś na nim robić). Istnieje pewne niebezpieczeństwo, że np. użytkownik poda ścieżkę do nie stniejącego pliku, poda błędną nazwę itd. Większość programów, które tego typu mechanizmy posiadają po podaniu błędnej nazwy czy adresu albo się 'wywalą", albo wyplują błąd, jednak dalej będą działać. Dzieje się tak ponieważ w 1. app programista nie przewidział podania błędnego adresu i system nie mogąc znaleźć pliku wygeneruje błąd(wyjątek), który nieobsłużony "wywali" aplikację. W 2 zaś programista przewidział takową możliwość i dodał obsługę wyjątku.
Prosty przykład(dzielenie przez 0):
if __name__ == "__main__":
    try:
        a=input("Podaj liczbe jaka chcesz podzielic")
        print a/0
    except Exception, e:
        print "Uwaga:", e

try oznacza w którym miejscu może zaistnieć wyjątek.
except przechwytuje wyjątek
Exception to typ wyjątku.
Typy wyjątków:
Exception - Wszystkie wyjątki
SystemExit - Generowany przez sys.exit()
IOError - Błędy związane z operacjami na plikach lub operacjami I/O
EOFError - Zgłaszany po osiągnięciu końca pliku
KeyboardInterrupt - Generowany przez klawisze przerwania (zazwyczaj CTRL+C)
SyntaxError - Błąd składni
Są jeszcze wyjątki generowane przez platformy(.NET, JVM itd.) na jakich są uruchamiane nasze aplikacje.
9.I/O
Operowanie na plikach to bardzo ważna w Pythonie ,jak i w każdym języku, rzecz. Pozwala na pisanie logów, automatyzację pewnych rzeczy, wpisywanie do pliku wyników operacji.
8.1 Otwieranie(txt)
text = open('nazwa_pliku').read()
print text

8.2 Otwieranie(bin)

text = open('plik_binarny', 'rb').read()
print text

8.3 Pisanie do pliku

open('plik_do_zapisu', 'w').write("tekst")
open('plik_binarny_do_zapisu', 'wb').write("dane binarne")



10.Bonus-Słówko o GUI
Aplikacje w konsoli nie są zbyt funkcjonalne ani interesujące.Warto więc pomyśleć o naucę jakiegoś modułu graficznego.Standardowo posiadamy Tkiner'a(Tk interface).Nie jest to jednak biblioteka łatwa w obsłudze.Zdecydowanie łatwiej uczyć się będzie QT4.Jest to obecnie najpopularniejszy moduł.Jeśli komuś nie idzie nauka QT4 warto zwrócić uwagę na kolejną duża biblioteke tym razem operującą w bardziej standardowy sposób na gui.Jest to wxPython kolejna,przepisana do Python'a biblioteka C++(wxWidgets).Jeżeli interesujemy się pisaniem na Linuxa warto zwrócić uwagę na GTK+.Dla wymagjących-masochistów istnieje Py32WIN.Jest to przepisana do pythona biblioteka WinApi.Z tego co czytałem nie ma częsći funkcji:(

Warto przetestować choć 2 biblioteki by zdobyć trochę doświadczenia.Pamiętaj że wybór należy tylko i wylącznie do ciebie!
#EDIT:Zapomniałem wspomnieć o IronPython i Jython które sprawiają że możemy użyć bibliotek natywnych dla danej platformy: .NET pozwala na skorzystanie z Windows Forms oraz Windows Presentation Foundation a Java na Swing'a oraz AWT(czy jakoś tak)
11.BONUS-Python a Perl
Oba to języki skryptowe. Oba stworzone były głównie pod Linux. Obydwu można użyć do tworzenia stron internetowych. Obydwa posiadają ogromne ilości modułów. Jest za to jedna dość znacząca różnica-składnia. Czytelność obydwu zobrazuje przykład-piosenka 99 Bottles of Beer.
Python:


#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
99 Bottles of Beer (by Gerold Penz)
Python can be simple, too :-)
"""
for quant in range(99, 0, -1):
   if quant > 1:
      print quant, "bottles of beer on the wall,", quant, "bottles of beer."
      if quant > 2:
                suffix = str(quant - 1) + " bottles of beer on the wall."
      else:
                suffix = "1 bottle of beer on the wall."
   elif quant == 1:
      print "1 bottle of beer on the wall, 1 bottle of beer."
      suffix = "no more beer on the wall!"
   print "Take one down, pass it around,", suffix
   print "--"
Perl:

    ''=~(        '(?{'        .('`'        |'%')        .('['        ^'-')
    .('`'        |'!')        .('`'        |',')        .'"'.        '\\
    .'=='        .('['        ^'+')        .('`'        |'/')        .('['
    ^'+')        .'||'        .(';'        &'=')        .(';'        &'=')
    .';-'        .'-'.        '\\        .'=;'        .('['        ^'(')
    .('['        ^'.')        .('`'        |'"')        .('!'        ^'+')
   .'_\\{'      .'(\\      .';=('.      '\\$=|'      ."\|".(      '`'^'.'
  ).(('`')|    '/').').'    .'\\"'.+(    '{'^'[').    ('`'|'"')    .('`'|'/'
 ).('['^'/')  .('['^'/').  ('`'|',').(  '`'|('%')).  '\\".\\"'.(  '['^('(')).
 '\\"'.('['^  '#').'!!--'  .'\\$=.\\"'  .('{'^'[').  ('`'|'/').(  '`'|"\&").(
 '{'^"\[").(  '`'|"\"").(  '`'|"\%").(  '`'|"\%").(  '['^(')')).  '\\").\\"'.
 ('{'^'[').(  '`'|"\/").(  '`'|"\.").(  '{'^"\[").(  '['^"\/").(  '`'|"\(").(
 '`'|"\%").(  '{'^"\[").(  '['^"\,").(  '`'|"\!").(  '`'|"\,").(  '`'|(',')).
 '\\"\\}'.+(  '['^"\+").(  '['^"\)").(  '`'|"\)").(  '`'|"\.").(  '['^('/')).
 '+_,\\",'.(  '{'^('[')).  ('\\$;!').(  '!'^"\+").(  '{'^"\/").(  '`'|"\!").(
 '`'|"\+").(  '`'|"\%").(  '{'^"\[").(  '`'|"\/").(  '`'|"\.").(  '`'|"\%").(
 '{'^"\[").(  '`'|"\;).(  '`'|"\/").(  '['^"\,").(  '`'|('.')).  ','.(('{')^
 '[').("\["^  '+').("\`"|  '!').("\["^  '(').("\["^  '(').("\{"^  '[').("\`"|
 ')').("\["^  '/').("\{"^  '[').("\`"|  '!').("\["^  ')').("\`"|  '/').("\["^
 '.').("\`"|  '.').("\`"|  ')."\,".(  '!'^('+')).  '\\",_,\\"'  .'!'.("\!"^
 '+').("\!"^  '+').'\\"'.  ('['^',').(  '`'|"\(").(  '`'|"\)").(  '`'|"\,").(
 '`'|('%')).  '++\\$="})'  );$:=('.')^  '~';$~='@'|  '(';$^=')'^  '[';$/='`';
12.BONUS-IDE do Pythona 
Każdy początkujący programista dochodzi w końcu do wniosku że zbyt dużo czasu poświęca na rzeczy mało związane z kodowaniem jak np. uruchamianie programów z lini poleceń czy pisanie make'a. Wtedy warto ściągnąć edytor który zawiera wszystko to czego potrzebuje programista oraz pomaga w pisaniu kodu.
IDE jakie polecam do Python'a:
Eclipse wraz z wtyczką PyDev(link, PyDev),
Editra z wtyczkami PyStudio, Launcher itd(link).,
VS 2010 (Od edycji Professional) PyTool's(link),
wbudowane w Pythona, nieskomplikowane IDLE.
Są to sprawdzone i przetestowane przeze mnie środowiska. Obecnie sam aktywnie korzystam z Eclipse ;).
Źródła
www.pl.wikipedia.org
http://www.python.rk.edu.pl/
Poradnik w trakcie pisania:)
#EDIT-Poprawiłem resztę. Teraz pozwolę sobie wyczyścić temat z niepotrzebnych postów 
Dołączona grafikaTen utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 3.0 Unported.

Brak komentarzy:

Prześlij komentarz

Popularne posty