Wstęp do Pythona Janusz Szwabiński szwabin@ift.uni.wroc.pl Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.1/36
Wstęp do Pythona Zasoby w sieci Python jako zaawansowany kalkulator Pierwszy program w Pythonie Moduły Wbudowane typy zmiennych Wyrażenie warunkowe, pętle Definiowanie funkcji Czytanie i pisanie do pliku Kilka słów o klasach Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.2/36
Zasoby w sieci Strona główna Pythona http://www.python.org Strona polska Pythona http://www.python.org.pl Narzędzia naukowe dla Pythona http://www.scipy.org/ VPython - wizualizacje 3D http://vpython.org/ Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.3/36
G. van Rossum, Python Tutorial http://www.python.org/doc/2.3.4/tut/tut.html M. Pilgrim, Dive into Python http://diveintopython.org/ A. Downey, J. Elkner, C. Meyers, How to think like a computer scientist http://www.greenteapress.com/thinkpython/ B. Eckel, Thinking in Python http://www.mindview.net/books/tipython Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.4/36
D. Mertz, Text Processing in Python http://gnosis.cx/tpip/ F. Lundh, An introduction to Tkinter http://www.pythonware.com/library/tkinter/introduction/ Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.5/36
Python interpretowany, wysokopoziomowy język programowania darmowy obiektowy dynamiczna semantyka i elegancka składnia bogata biblioteka standardowa idealny do tworzenia skryptów i tzw. błyskawicznego rozwijania aplikacji Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.6/36
Python jako zaawansowany kalkulator Pierwsza sesja w Pythonie: szwabin@defiant : ~ $ python Python 2. 3. 4 ( # 2, Dec 3 2004, 1 3 : 5 3 : 1 7 ) [GCC 3. 3. 5 ( Debian 1 : 3. 3. 5 2 ) ] on linux2 Type " help ", " copyright ", " c r e d i t s " or " l i c e n s e " f o r more information. >>> 2+2 4 >>> x=20 >>> y=2 3 >>> x y 120 >>> _ 1 2. 0 0.1 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.7/36
Operatory arytmetyczne + / Operator przypisania >>> x = y = z = 0 >>> a, b = 1,2 Komentarze >>> 7/3 # d z i e l e n i e calkowite zwraca l i c z b e zaokraglona w dol 2 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.8/36
Liczby zespolone >>> complex ( 2, 3 ) (2+3 j ) >>> 1 j 1 J ( 1+0 j ) >>> a = 1. 5 + 0. 5 j >>> a. r e a l 1. 5 >>> a. imag 0. 5 >>> abs ( a ) 1.5811388300841898 >>> help ( abs ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.9/36
Pierwszy program w Pythonie # rkwad. py # Program o b l i c z a j a c y p i e r w i a s t k i # rzeczywiste trojmianu kwadratowego import math a, b, c = input ( " Podaj wspolczynniki ( a, b, c ) : " ) pd = math. s q r t ( b x1 = ( b+pd)/(2 x2 = ( b pd)/(2 a ) a ) 2 4 a p r i n t "\ npierwiatki wynosza : x1 =", x1, " x2 =", x2 c ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.10/36
Moduły pliki zawierajace instrukcje Pythona definicje z modułu moga być importowane do przegladania modułów służy funkcja dir() >>> import math >>> dir ( math ) [ doc, f i l e, name, acos, asin, atan, atan2, c e i l, cos, cosh, degrees, e, exp, fabs, floor, fmod, frexp, hypot, ldexp, log, log10, modf, pi, pow, radians, sin, sinh, sqrt, tan, tanh ] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.11/36
Sposoby importowania >>> import math >>> a=math. s q r t ( 2 ) >>> import math as m >>> a=m. s q r t ( 2 ) >>> from math import >>> a= s q r t ( 2 ) >>> from math import s q r t as squareroot >>> a=squareroot ( 2 ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.12/36
Łańcuchy znaków >>> s1 = " To j e s t lancuch znakow" >>> s2 = To j e s t inny lancuch znakow >>> s3 = " " " To j e s t lancuch znakow, ktory rozciaga s i e na wiele wierszy " " " >>> s4 = "\" Cytowanie \"" >>> p r i n t s4 " Cytowanie " >>> " Witaj " + " swiecie " Witaj swiecie >>> " Witaj " 3 WitajWitajWitaj Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.13/36
>>> g r e e t = " Witaj " >>> p r i n t g r e e t [ 0 ] W >>> g r e e t [ 2 : 4 ] ta >>> g r e e t [ 2 : ] t a j >>> len ( g r e e t ) 5 >>> p r i n t g r e e t [ 1], g r e e t [ j a >>> s t r ( 1 0 ) 10 >>> eval ( 3 + 4 ) 7 2] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.14/36
Uwaga: łańcuchów znaków w Pythonie nie można modyfikować! >>> s =" Ala ma kota " >>> s [ 0 ] = "O" Traceback ( most r e c e n t c a l l l a s t ) : F i l e "< stdin >", l i n e 1, in? TypeError : o b j e c t doesn t support item assigment >>> Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.15/36
Biblioteka standardowa string: capitalize(s) rfind(s,substring) upper(s) replace(s,old,new) lower(s) strip(s) ljust(s) rstrip(s) center(s) lstrip(s) rjust(s) split(s,char) count(substring,s) join(stringlist) find(s,substring) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.16/36
Złożone typy danych - listy >>> l i s t a =[" a ", " b ", " przyklad " ] >>> l i s t a [ 0 ] a >>> l i s t a [ 2 ] przyklad >>> l i s t a [ 1] przyklad >>> l i s t a. append ( nowy ) >>> l i s t a [ a, b, przyklad, nowy ] >>> l i s t a. i n s e r t ( 2, " t r z e c i " ) >>> l i s t a [ a, b, t r z e c i, przyklad, nowy ] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.17/36
>>> l i s t a. extend ( [ jeden, dwa ] ) >>> l i s t a [ a, b, t r z e c i, przyklad, nowy, jeden, dwa ] >>> l i s t a. index ( t r z e c i ) 2 >>> c in l i s t a False >>> l i s t a. remove ( nowy ) >>> l i s t a [ a, b, t r z e c i, przyklad, jeden, dwa ] >>> l i s t a. pop ( ) dwa >>> l i s t a [ a, b, t r z e c i, przyklad, jeden ] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.18/36
>>> l i s t a +[ inny, element ] [ a, b, t r z e c i, przyklad, jeden, inny, element ] >>> l i =[1,2] 3 [ 1, 2, 1, 2, 1, 2] >>> l i. s o r t ( ) >>> l i [ 1, 1, 1, 2, 2, 2] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.19/36
Mapowanie list: >>> l i = [ 1, 2, 3, 4 ] >>> l i 2 = [ elem >>> l i 2 [ 1, 4, 9, 16] 2 f o r elem in l i ] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.20/36
Złożone typy danych - krotki (ang. tuples) >>> t = ( " a ", " b ", " przyklad " ) >>> t [ 0 ] a >>> t [ 2 ] przyklad >>> t [ 1] przyklad >>> a in t True Krotki nie moga być modyfikowane! >>> t [2]=3 Traceback ( most r e c e n t c a l l l a s t ) : F i l e "< stdin >", l i n e 1, in? TypeError : o b j e c t doesn t support item assignment Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.21/36
Złożone typy danych - słowniki >>> d = { " server " : " d e f i a n t ", " user " : " szwabin " } >>> d { user : szwabin, server : defiant } >>> d [ server ] defiant >>> d [ server ] = voyager >>> d { user : szwabin, server : voyager } >>> d [ uid ]=501 >>> d { uid : 501, user : szwabin, server : voyager } >>> del d [ uid ] >>> d { user : szwabin, server : voyager } Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.22/36
>>> d. c l e a r ( ) >>> d { } >>> d = { " server " : " d e f i a n t ", " user " : " szwabin " } >>> d { user : szwabin, server : defiant } >>> d. keys ( ) [ user, server ] >>> d. values ( ) [ szwabin, defiant ] >>> d. items ( ) [ ( user, szwabin ), ( server, defiant ) ] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.23/36
Pętla while >>> a, b =0,1 >>> while b <10:... p r i n t b,... a, b = b, a+b... 1 1 2 3 5 8 operatoty porównania: < > == <= >= każda sekwencja o długości niezerowej oznacza prawdę Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.24/36
Instrukcja if >>> x = i n t ( raw_input ( " Podaj l i c z b e : " ) ) >>> i f x < 0 :... p r i n t l i c z b a ujemna... e l i f x == 0 :... p r i n t zero... e l s e :... p r i n t l i c z b a dodatnia... Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.25/36
Pętla for Iteracja po elementach sekwencji: >>> a = [ jeden, dwa, trzy ] >>> f o r x in a :... p r i n t x, len ( x )... jeden 5 dwa 3 trzy 4 Iteracja od liczby do liczby z użyciem funkcji range(): >>> f o r i in range ( 1 0 ) :... p r i n t i,... 0 1 2 3 4 5 6 7 8 9 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.26/36
Definiowanie funkcji >>> def f i b ( n ) :... " Ciag Fibonacciego "... a, b = 0, 1... while b < n :... p r i n t b,... a, b = b, a+b... >>> f i b ( 2 0 0 0 ) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.27/36
>>> def f i b 2 ( n ) :... " Wartosci ciagu Fibonacciego "... wynik = [ ]... a, b = 0, 1... while b < n :... wynik. append ( b )... a, b = b, a+b... return wynik... >>> f100 = f i b 2 ( 1 0 0 ) >>> f100 [ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.28/36
Możliwości: domyślne wartości argumentów argumenty kluczowe wywołania funkcji z dowolna liczba argumentów funkcje anonimowe Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.29/36
Czytanie i pisanie do plików szwabin@voyager :~ $ c a t lud. dat 1850.0 1.402 1950.0 2.486 1960.0 3.014 1970.0 3.683 1985.0 4.842 2000.0 6.127 2025.0 8.177 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.30/36
>>> import s t r i n g >>> x = [ ] ; y = [ ] >>> f =open ( lud. dat, r ) >>> l i n e s = f. r e a d l i n e s ( ) >>> f o r l i n e in l i n e s :... xval, yval= l i n e. s p l i t ( )... x. append ( f l o a t ( xval ) )... y. append ( f l o a t ( yval ) )... >>> f. c l o s e ( ) >>> x [ 1 8 5 0. 0, 1 9 5 0. 0, 1 9 6 0. 0, 1 9 7 0. 0, 1 9 8 5. 0, 2 0 0 0. 0, 2 0 2 5. 0 ] >>> y [1.4019999999999999, 2.4860000000000002, 3.0139999999999998, 3.6829999999999998, 4.8419999999999996, 6.1269999999999998, 8.1769999999999996] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.31/36
>>> x = [ 1. 0, 2. 0, 3. 0, 4. 0, 5. 0, 6. 0 ] >>> y=[ i 2 f o r i in x ] >>> f =open ( kwadrat. dat, w ) >>> f o r i in range ( len ( x ) ) :... f. write ( %g %g\n % ( x [ i ], y [ i ] ) )... >>> f. c l o s e ( ) szwabin@voyager : ~ $ c a t kwadrat. dat 1 1 2 4 3 9 4 16 5 25 6 36 Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.32/36
Kilka słów o klasach import s t r i n g c l a s s Data : Klasa do przechowywania danych numerycznych def i n i t ( s e l f ) : s e l f. x = [ ] ; s e l f. y = [ ] def fread ( s e l f, filename ) : Wczytuje dane z pliku s e l f. x = [ ] ; s e l f. y = [ ] f i l e =open ( filename, r ) l i n e s = f i l e. r e a d l i n e s ( ) f o r l i n e in l i n e s : xval, yval= l i n e. s p l i t ( ) s e l f. x. append ( f l o a t ( xval ) ) s e l f. y. append ( f l o a t ( yval ) ) f i l e. c l o s e ( ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.33/36
def f w r i t e ( s e l f, filename ) : Zapisuje dane do pliku f i l e =open ( filename, w ) f o r i in range ( len ( s e l f. x ) ) : f i l e. write ( %g %g\n % ( s e l f. x [ i ], s e l f. y [ i ] ) ) f i l e. c l o s e ( ) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.34/36
>>> from MyData import >>> d = Data ( ) >>> p r i n t d. x, d. y [ ] [ ] >>> d. fread ( lud. dat ) >>> d. x [ 1 8 5 0. 0, 1 9 5 0. 0, 1 9 6 0. 0, 1 9 7 0. 0, 1 9 8 5. 0, 2 0 0 0. 0, 2 0 2 5. 0 ] >>> d. y [1.4019999999999999, 2.4860000000000002, 3.0139999999999998, 3.6829999999999998, 4.8419999999999996, 6.1269999999999998, 8.1769999999999996] Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.35/36
wszystkie składowe klasy pythonowej sa publiczne, a wszystkie funkcje składowe sa wirtualne (w terminologii C++) obiekt w Pythonie nie zawsze oznacza instancję klasy definicje klas musza zostać wykonane, zanim zostana użyte nazwy atrybutów przesłaniaja te same nazwy metod Python wspiera dziedziczenie (również wielorakie) ograniczony mechanizm implementacji zmiennych prywatnych klasy ( element) Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.36/36