Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie w językach skryptowych 1 Wykład 2: Podstawy Pythona Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka.

Podobne prezentacje


Prezentacja na temat: "Programowanie w językach skryptowych 1 Wykład 2: Podstawy Pythona Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka."— Zapis prezentacji:

1 Programowanie w językach skryptowych 1 Wykład 2: Podstawy Pythona Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka

2 Zawartość wykładu Komentarze Nadawanie nazw zmiennym Wyrażenia Zmienne Instrukcja print Identyfikator obiektu Przegląd typów Operatory logiczne i porównania Typy liczbowe

3 3 Komentarze Rozpoczynamy znakiem # Komentarzem jest teks rozciągający się od # do końca wiersza Komentarz może zajmować cały wiersz Komentarz może być umieszczony na końcu wiersza W komentarzach stosowane są wcięcia o tej samej głębokości co opisywany przez nie kod (nieobowiązkowe) Python nie obsługuje wielowierszowych komentarzy. Każdy komentarz musi mieć własny znak #.

4 4 Nadawanie nazw zmiennym Nazwy nie maja ograniczenia długości Nazwy rozpoczynają się od litery lub znaku podkreślenia, za którymi może występować dowolna liczba liter, cyfr lub podkreśleń. Przykłady: x, _render, The_Bronx. Nazwy niepoprawne: 100domow, %hash, nowa? W nazwach wielkość liter jest istotna Nazwy nie mogą być słowami kluczowymi Pythona Słowa kluczowe: and, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while. Wyświetlanie listy słów kluczowych Pythona: import keyword print keyword.kwlist

5 5 Wskazówki dotyczące nadawania nazw Nazwy stosowane w Pythonie zwykle składają się z małych liter a poszczególne słowa tworzące nazwę są oddzielane znakami podkreślenia: liczba_cyfr Należy unikać rozpoczynania nazw zmiennych od znaku podkreślenia, gdyż w ten sposób często zmienne definiowane są przez system.

6 6 Wyrażenie Jest dozwoloną kombinacją symboli (zmiennych, literałów, obiektów, funkcji, nawiasów, operatorów itd.), która zwraca obiekt po przetworzeniu w interpreterze Pythona. W wyrażeniu mogą być użyte funkcje i operatory wbudowane lub zdefiniowane samodzielnie przez użytkownika. Wyrażenia są klasyfikowane na podstawie typu zwracanego przez nie obiektu lub działania, które wykonują.

7 7 Typy wyrażeń Arytmetyczne – daje w wyniku liczbę Atom – literał, identyfikator, wyświetlanie lub przekształcanie łańcucha: 3.14, x, [1, 2], x Odwołanie do atrybutu – atrybut obiektu: obj.attr Logiczne – Działanie logiczne, które w wyniku daje prawdę lub fałsz: a and b, not x. Wywołanie – wywołuje funkcje lub metodę: len(x), a.append(a) Porównanie – Operacja porównania, która daje w wyniku 1 (prawdę) lub 0 (fałsz): a!=0, x

8 Tworzenie instrukcji z wyrażeń Jedno wyrażenie lub więcej wyrażeń rozdzielonych przecinkami nazywa się listą wyrażeń. Jeżeli lista wyrażeń zostanie użyta jako instrukcja, a nie wejdzie w skład dłuższej instrukcji, to będzie ona nazywana instrukcją z wyrażenia. Jeśli lista wyrażeń zawiera wiele instrukcji, to ich wyniki są wyświetlane w postaci krotki (czyli są ujęte w nawiasy) >>> x = 5 >>> s = "skrzynka" >>> lista = [1, 2, 3] >>> s, lista ('skrzynka', [1, 2. 3])

9 Przypisania wewnątrzwierszowe Można używać wyrażeń jako instrukcji (ale nie odwrotnie!). Python w odróżnieniu od języka C nie obsługuje przypisań wewnątrzwierszowych, które są instrukcjami przypisania użytymi jako wyrażenia. if a = 0 # błąd składniowy if a == 0 # poprawnie

10 Tworzenie zmiennych Zmienna rozpoczyna swoje istnienie w momencie, gdy po raz pierwszy zostanie jej przypisana wartość za pomocą instrukcji przypisania. Instrukcja ta wiąże nazwę zmiennej z obiektem. Python nie przypisuje zmiennym domyślnych wartości, zatem próba użycia nazwy, która nie została zdefiniowana, kończy się pojawieniem wyjątku >>> x Traceback (most recent call last): File " ". line 1. in ? NameError: name 'x' is not defined >>> x = 5 >>>x 5

11 Zmienne Zmienne w języku Python nie są przyporządkowane poszczególnym typom danych, zatem każda zmienna może reprezentować dowolny obiekt: liczbę, listę itd. Python zachowuje ślad typów danych wewnętrznie. Zmienne przechowują odwołania do obiektów, które są wskaźnikami do obiektów istniejących w pamięci. >>> s = tekst" >>> lst = [1, 2, 3] >>> num = 10.5 >>> x = 10 * num >>> tup = ("jeden", "dwa", 3) >>> diet = { 1: "jeden", 2: "dwa" }

12 Przypisywanie wielu wartości target1, target2,...= expr1, expr2... target1, target2,... to zmienne, którym przypisywane są wartości wyrażeń, expr1 expr2,... odpowiednio. Liczba wyrażeń musi być taka sama jak liczba zmiennych docelowych. target, target2... = seq. target1, target2,... to zmienne, którym przypisywana jest wartość, zaś seq jest sekwencją (łańcuchem, listą lub krotką) z liczbą pozycji równą liczbie zmiennych docelowych. >>> s, lista = "tekst", [1, 2, 3] >>> s 'tekst' >>> lista [1, 2, 3] >>> num, x = 10.5, 10 * num Traceback (most recent call last): File " ", line 1. in ? NameError: name 'num' is not defined >>> s, t, r = 1, 2, 3, 4 Traceback (most recent call last): File " ", line 1, in ? ValueError: unpack tuple of wrong size >>> s, t, r = [1, "dwa", 3.0] >>> s, t, r (1, 'dwa, 3.0) >>>x, y, z = "ABC" >>>x, y, z ('A, 'B, 'C') >>> a, b, c, d = range(4) >>> a,b,c,d (0, 1, 2, 3)

13 Przypisanie wartości wielu zmiennym i zamiana wartości zmiennych target1 = target2 =…= expr >>> x = y = z = 0.0 >>> x, y, z (0.0, 0.0, 0.0) >>> a = b = c = None >>> a, b, c (None, None, None) >>> x = 1 >>> y = 2 >>> x, y = y, x >>> x, y (1, 2)

14 Usuwanie zmiennych >>> x = y = z = "Python" >>>> x,y,z ('Python', 'Python', ' Python ') >>> del x, y >>> x, y, z Traceback (most recent call last): File " ". line 1, in ? NameError: name 'x' is not defined >>> dir() #wypisuje wszystkie aktualnie zdefiniowane zmienne [ _builtins_', '_doc_', '_name_', 'z'] Instrukcja del usuwa tylko zmienną, a nie wskazywany przez nią obiekt. Dzieje się tak dlatego, że inne zmienne mogą się odwoływać do tego samego obiektu. Python utrzymuje wewnętrznie ślad obiektu i usuwa obiekt automatycznie, gdy nie jest on już używany.

15 Instrukcja print print expr1, expr2,… Pobiera ona listę wyrażeń i wykonuje następujące operacje: oblicza wartość każdego wyrażenia jako obiektu; przekształca wewnętrznie każdy obiekt na poprawnie sformatowany łańcuch wyjściowy poprzez wywołanie funkcji str() wpisuje każdy łańcuch wyjściowy do standardowego wyjścia (rozdziela je pojedynczymi spacjami); dopisuje na końcu danych wyjściowych znak nowego wiersza. >>> print "x">>> a, b = 5, 10 x>>> print "a" + "b", a + b >>> print "x", "y" ab 15 x, y >>> print "a * b =", a * b >>> "x", "y"a * b = 50 ('x', 'y')>>> print a, "\n\n", b 5 10

16 Instrukcja print Skrypt: y, z = "xxx", "yyy", "zzz" print x, y, z, 5 * 10 print x, print y, z, print 5 * 10 Wynik: xxx yyy zzz 50 xxx, yyy, zzz, 50 print "x" + 2 #błąd nie można łączyć liczb i łańcuchów print "x" +str(2)

17 Identyfikator obiektu >>> a = "UFO" >>>id(a) >>> id(7 - 7) >>> id(None) Zmienne odwołujące się do tego samego obiektu nazywa się aliasami, natomiast o obiekcie mówi się, że jest utożsamiany. >>> a ="UFO" >>> b = a >>> print a, b UFO >>> print id(a), id(b) >>> a= "IFO" >>> print a, b IFO UFO >>> print id(a), id(b) >>> a = "UFO" >>> print id(a)

18 Obiekty zmienne i niezmienne Zmiany wprowadzane w jednym aliasie będą widoczne w innych tylko wtedy, gdy utożsamiany obiekt będzie mógł być modyfikowany w miejscu. Operacja przeprowadzana w miejscu zmienia wartość istniejącego obiektu bez tworzenia nowego. Zmiana w miejscu może dotyczyć tylko obiektów zmiennych. Przykładowo liczby i łańcuchy znaków są niezmienne. >>> x = [1, 2, 3]#lista to obiekt zmienny >>> y = x >>> print x, y [1, 2, 3] >>> x[1] = "dwa" >>> print x, y [1, 'dwa', 3] >>> x = [4, 5, 6] >>> print x, y [4, 5, 6] [1. 'dwa', 3]

19 Powiązanie zmiennej z istniejącym obiektem >>> a = 0 >>> b = 0 >>> print id(a), id(b) >>> x = [1, 2, 3] >>> y = [1, 2, 3] >>> print id(x), id(y)

20 Określanie typu obiektu Typ obiektu ustala sposób jego wewnętrznej reprezentacji w Pythonie. Typ określa zakres wartości, które może przybierać obiekt oraz operacje, którym obiekt może być poddawany. Obiekty zwykłych liczb całkowitych mogą na przykład reprezentować tylko liczby całkowite od pewnej wartości minimalnej do maksymalnej i obsługiwać operacje arytmetyczne (ale nie operacje łańcuchowe, takie jak na przykład łączenie). Typ obiektu podobnie jak jego tożsamość (identyfikator) nie zmienia się przez cały czas jego istnienia. type(expr) >>> x = 123>>>x = [1, "dwa", 3.0]>>> type(x) >>> x = "poetycki">>> x = 3.0>>> type(x)

21 Sprawdzanie identyczności typów obiektów type(expr1) == type(expr2) >>> a = "Python" >>> b = "Ruby" >>> lista = [1, "dwa", 3.0] >>> type(a) == type(b) 1 >>> type(a) = type(lista) 0 >>> type(a) == type(lista[1]) 1 >> type(a) != type(1) 1 >>> typed(1) = typed(1.0) 0 >>> typed(1) = type("1") 0 >>> type(a) == type(b) != type(lista)

22 Lista standardowych typów obiektów dir(types)

23 Lista, Krotka, Słownik Lista – uporządkowana sekwencja obiektów dowolnego typu. Listy można modyfikować, pomniejszać, powiększać lista = [1, "dwa", 3.0] Krotka – niezmienna, uporządkowana sekwencja obiektów różnych typów. krotka = (1, "dwa", 3.0) Słownik – sekwencja obiektów. Każdy obiekt jest osiągalny za pomocą unikalnego identyfikatora zwanego kluczem. Słowniki są zmienne, mogą być powiększane, pomniejszane i modyfikowane. d = {"jeden": "one", "dwa": "two"}

24 Standardowe nazwy typów BufferTypeObiekt bufora zwrócony przez buffer() BuiltinFunctionTypeFunkcja wbudowana, taka jak na przykład ranget() lub math.sqrt() BuiltinMethodTypeTo samo, co BuiltinFunctionType ClassTypeKlasa zdefiniowana przez użytkownika CodeTypeSkompilowany kod bajtowy zwrócony przez compile() ComplexTypeLiczba zespolona DicttypeSłownik DictionaryTypeTo samo, co DictType - Słownik EllipsisTypeObiekt Ellipsis (wielokropki) używany w rozszerzonym wycinaniu FileTypeObiekt otwartego pliku, taki jak na przykład sys.stdout FloatTypeLiczba zmiennoprzecinkowa FrameTypeObiekt ramki wykonania FunctionTypeFunkcje zdefiniowane przez użytkownika i funkcja lambda InstanceTypeEgzemplarz klasy zdefiniowanej przez użytkownika IntTypeLiczba całkowita zwykła LambdaTypeTo samo, co FunctionType ListTypeLista LongTypeLiczba całkowita długa MethodTypeMetoda egzemplarza klasy zdefiniowanej przez użytkownika ModuleTypeModuł NoneTypeObiekt pusty None SliceTypeRozszerzony wycinek zwrócony przez slice() StringTypeŁańcuch (ciąg znakowy) TracebackTypeŚlad stosu wyjątku, taki jak na przykład sys.last_traceback TupleTypeKrotka TypeTypeObiekt typu zwrócony przez type UnboundMethodTypeTo samo, co MethodType UnicodeTypeŁańcuch Unicode XrangeTypeZwrócone przez xrange()

25 Sprawdzanie typu obiektu >>> from types import * >>> x = 1 >>> type(x) == IntType 1 >>> type(1.0) = FloatType 1 >>> type(None) = NoneType 1 >>> type([]) != ListType 0 >>> type(id) == BuiltinFunctionType >>> type(type) == BuiltinFunctionType 1 >>> a = type(" ") >>> type(a) = TypeType 1

26 Wyrażenia logiczne Mogą przybierać jedną z dwóch wartości: prawda lub fałsz Fałsz w Pythonie: 0, 0.0, 0L, 0 + 0Jliczba 0 ""Pusty łańcuch ()pusta krotka []pusta lista {}pusty słownik Nonepusty obiekt Wyrażenia prawdziwe to takie, których wartości są różne od wymienionych w tabeli.

27 Operatory logiczne xyx and yx or ynot x FFxy1 TFyx0 FTxy TTyx >>> not -4 0 >>> not "UFO" 0 >>> not "", not 0, not None (1, 1, 1) >>> not [""], not ({},), not [None] (0, 0, 0)

28 Uwagi dotyczące operatorów logicznych Wynik wyrażenia logicznego można przypisać do zmiennej: >>>country = s or "Polska" Wielokrotne operacje logiczne: >>> "a" and "b" and [1, 2, 3]# zwraca ostatni obliczony argument [1, 2, 3] >>> "a" and "b" and [] and "c" [] >>> "a" or "b" or [] 'a' >>> 0 or "" or () or [] # zwraca ostatni obliczony argument [] >>> 1 and "a" or "b" 'a' >>> "a" and "" or "b" 'b' Priorytet operacji logicznych: not, and, or

29 Uwagi dotyczące operatorów logicznych Jeśli drugi operand w wyrażeniu and lub or jest funkcją lub metodą, to nie będzie ona wywoływana podczas obliczania wartości takiego wyrażenia, jeśli jego wartość da się określić na podstawie pierwszego operandu. Listy, krotki lub słowniki, które zawierają fałszywe wartości, są traktowane jako prawdziwe. Na przykład lista [""] jest prawdziwa, ponieważ zawiera jedną pozycję. Egzemplarze klasy domyślnie są prawdziwe, chociaż można im nadać wartość fałszywą za pomocą specjalnej metody _nonzero_()

30 Operatory porównania OperatorOpis Większy >=Większy lub równy ==Równy !=Nierówny isTożsamościowa równość obiektu is notNierówność obiektu inNależy (członkostwo) not inNie należy Zwracaj liczbę całkowita 0 lub 1

31 Operatory porównania >>> a = 1 >>> a > 5, 5 > b, b == 10 >>> b = 10 (0, 0, 1) >>> a == b >>> a > 5 > b0 >> a >> a < 10 == b (1, 1)1 >>> a >> (a == 1) and (b >= 5)1 >>> (a != 1) or (b >= 5) 1 Uwaga: Sposób porównywania obiektów zależy od ich typu. Na przykład liczby są porównywane arytmetycznie, a łańcuchy są porównywane na podstawie liczbowych odpowiedników ich znaków. Obiekty różnych typów zawsze są przy porównaniu traktowane jako nierówne, zaś liczby (całkowite, całkowite długie, zmiennoprzecinkowe i zespolone) są przed porównaniem przekształcane do wspólnego typu.

32 Testy identyczności obiektów >>> a = b = "UFO" >>> a is b 1 >>>lista1 = [1, 2, 3] >>> lista2 = [1, 2, 3] >>> lista1 is lista2 0 >>> lista3 = [lista1, 4, 5] >>> lista4 = [-1, 0, lista1] >>> lista3[0] is Iista4[-1] 1 >>> x = None >>> y = None >>> x is y is None 1 Porównanie a is b jest równoważne porównaniu id(a) == id(b).

33 Operatory in i not in Operatory in i not in służą do określenia tego, czy obiekt należy do danej sekwencji. Sekwencją jest łańcuch, lista lub krotka. >>> lista = [1, "dwa", 3.0, ""] >>> str1 = "" >>> str2 = "dwa" >>> str3 = "ABC" >>> str4 = "ABC\n" >>> 5 in lista, 3 in lista, str2 in lista (0, 1, 1) >>> "" in lista 1 >>> "" in str2 Traceback (most recent call last): File " ", line 1, in ? TypeError: 'in ' requires character as a leftoperand >>> "a" not in str3, "A" in str3, "\n" in str4 (1, 1, 1) >>> 3.00 in (1, 2, 3, 4) 1

34 Porównania kaskadowe x <= y < z jest realizowane: (x <= y) and (y < z) Porównywane są tylko operandy sąsiadujące ze sobą, zatem w wyrażeniu a c a nie jest porównywane z c. Porównania kaskadowe mogą mieć dowolną długość, lecz niejawna obecność operatora and oznacza, że obliczenia zatrzymają się natychmiast po stwierdzeniu tego, czy prawdziwość całego wyrażenia może być jednoznacznie określona, >>> d < e < f < g # f i g nie będą obliczane gdy d < e będzie fałszywe

35 Priorytety operatorów OperatorOpis (), [], {}, ''Krotka, lista, słownik, przekształcanie łańcucha x.attr, x[i], x[i-j], f() Atrybut, indeks, wycinanie, wywołanie funkcji +x, -x, ~xJednostronna identyczność, jednostronne zaprzeczenie, jednostronne odwrócenie bitów **Podniesienie do potęgi (kojarzone od prawej do lewej) *, /, %Mnożenie, dzielenie, reszta z dzielenia (modulo) +, -Dodawanie, odejmowanie >Przesunięcie bitowe &Bitowe AND ^Bitowe XOR |Bitowe OR, >=, ==, !=, Operatory porównania Is, is not, in, not in notLogiczne NOT andLogiczne AND orLogiczne OR lambdaWyrażenie lambda

36 Kojarzenie operatorów (łączność operatorów) Kojarzenie określa kolejność obliczeń w wyrażeniu wtedy, gdy sąsiednie operatory mają jednakowe pierwszeństwo. W Pythonie jest stosowana zasada kojarzenia od strony lewej do prawej dla wszystkich operatorów oprócz operatora ** (potęgowanie), który jest kojarzony od strony prawej do lewej.

37 Typy liczbowe TypPrzykłady Liczba całkowita zwykła , 0, 38 Liczba całkowita długa-1L, 0L, L Liczba zmiennoprzecinkowa -2.5E4, , 10e2 Liczba zespolona -6+3j, 2.0J, J

38 Błąd zaokrąglenia >>> >>> >>> Występujące tu różnice są spowodowane tym, że Python (podobnie jak inne języki programowania) do wewnętrznej reprezentacji liczb w systemie dziesiętnym używa systemu dwójkowego. Niestety większość ułamków dziesiętnych nie da się dokładnie przedstawić w reprezentacji dwójkowej, zatem występują niewielkie różnice nazywane błędami reprezentacji lub błędami zaokrągleń. Taka sytuacja wynika z zasady działania (i z kompromisu między szybkością a dokładnością) i nie należy jej traktować jako błąd. Python zaokrągla liczby zmiennoprzecinkowe do 17 cyfr znaczących, co stanowi wystarczającą dokładność w większości zastosowań. Jeżeli jest potrzebna podwyższona dokładność, można się posłużyć klasą FixedPoint, którą można pobrać ze strony ftp://ftp.python.org/pub/python/contrib09-Dec-1999/DataStructures/FixedPoint.pyftp://ftp.python.org/pub/python/contrib09-Dec-1999/DataStructures/FixedPoint.py.

39 Uwagi dotyczące pracy z liczbami Wartości w systemie ósemkowym z zerem na początku: Wartości w systemie szesnastkowym z 0x lub 0X na początku: 0xffff Nie należy rozpoczynać liczby dziesiętnej zerem by Python zinterpretuje ja jako ósemkową. Aby określić największą dopuszczalną wartość liczby całkowitej: import sys print sys.maxint Największa co do wartości bezwzględnej wartość liczby ujemnej wynosi - maxint-1. Obliczenia wykorzystujące tylko liczby całkowite są wykonywane znacznie szybciej niż obliczenia z użyciem liczb zmiennoprzecinkowych. W przypadku operacji (takich jak na przykład zliczanie, numerowanie lub indeksowanie) zawsze należy stosować liczby całkowite.

40 Uwagi dotyczące pracy z liczbami c.d. Aby wydzielić część rzeczywistą liczby zespolonej z, należy użyć z.real. Część urojona jest zapisywana jako z.imag. Przy zapisie liczb całkowitych długich należy używać litery L, bowiem mała litera l może być czasem mylona z cyfrą 1. Odpowiednikiem zwykłych liczb całkowitych jest typ long w języku C, zaś liczb zmiennoprzecinkowych typ double w języku C.

41 Uwagi dotyczące pracy z liczbami c.d. Operacje wykonywane z użyciem zwykłych liczb całkowitych nie dadzą wyniku w postaci liczby długiej, jeśli będzie on za duży, by przechować go jako liczbę całkowitą zwykłą. Trzeba wtedy oznaczyć jeden z operandów jako liczbę długą, w przeciwnym wypadku Python wywoła wyjątek OverflowError. Perl automatycznie dokonuje przekształcenia łańcuchów na liczby w operacjach arytmetycznych (na przykład 5 + "5" daje w Perlu 10, zaś w Pythonie powoduje powstanie wyjątku TypeError). >>> * Traceback (most recent call last): File " ", line 1. in ? OverflowError: integer multiplication >>> * L L >>> import sys >>> sys.maxint

42 Zasady rozszerzania typów Jeżeli w wyrażeniu arytmetycznym występuje mieszanka typów, Python przekształca wszystkie liczby na najbardziej złożony typ operandu występującego w tym wyrażeniu i zwraca wynik tego właśnie typu. Jeżeli jeden operand jest liczbą zespoloną, to drugi jest przekształcany na liczbę zespoloną; w innym wypadku jeśli jeden operand jest liczbą zmiennoprzecinkową, to drugi jest przekształcany na liczbę zmiennoprzecinkową; w innym wypadku jeśli jeden operand jest liczbą całkowitą długą, to drugi jest przekształcany na liczbę całkowitą długą; w innym wypadku jeśli obydwa operandy są liczbami całkowitymi zwykłymi, żadne przekształcenie nie jest wymagane.

43 Funkcja coerce coerce() – pokazuje w jaki sposób Python przekształca liczby coerce(x,y), w którym x i y reprezentują liczby różnych typów. Python zwraca w wyniku dwupozycyjną krotkę zawierającą argumenty przekształcone w wymuszony sposób do wspólnego typu za pomocą reguł podanych na poprzednim slajdzie. Na przykład coerce(1, 2.5) daje w wyniku (1.0, 2.5).

44 Operatory bitowe i przesunięcia OperatorDziałanie ~xOdwraca bity w x x<>nPrzesuwa x w prawo o n bitów x & yBitowe AND argumentów x i y x ^ yBitowe XOR argumentów x i y x | yBitowe OR argumentów x i y

45 Operatory przypisania przyrostowego OperatorWartość przypisana do x x+= yx powiększone o y x-= yx zmniejszone o y x*= yx pomnożone przez y x /= yx podzielone przez y x**= yx podniesione do potęgi y x%= yreszta pozostała z dzielenia x / y x|=yx lub bitowe z y x&=yx i bitowe z y x^=yx XOR bitowe z y x>>=yx przesunięte o y bitów w prawo x<<=y x przesunięte o y bitów w lewo Python nie dysponuje operatorami ++, --

46 x=x+1 czy x+=1? Przypisanie przyrostowe przedstawione w postaci x = x + 1 nie jest dokładnie tym, co przypisanie w postaci x += 1. To pierwsze oblicza x dwukrotnie: pierwszy raz podczas wyliczania wartości prawej strony i drugi raz podczas przypisywania wyniku do x umieszczonego po lewej stronie. Drugie przypisanie tylko raz oblicza x w miejscu, co znaczy, że Python oszczędza czas i pamięć, modyfikując jedynie pierwotny obiekt x.

47 Jawne przekształcanie typów int(), long(), float(), complex() >>> x = 0 >>> int(x), long(x), float(x), complex(x) (0, 0L, 0.0, 0j) >>> x = 1 >>> int(x), long(x), float(x), complex(x) (1, 1L, 1.0, (1+0j)) >>> x = 1.5 >>> int(x), long(x), float(x), complex(x) (1, 1L, 1.5, (1.5+0j)) >>> x = "1" # łańcuch całkowitoliczbowy" >>> int(x), long(x), float(x), complex(x) (1, 1L, 1.0, (1+0j)) >>> x = "1.5" # łańcuch zmiennoprzecinkowy" >>> float(x), complex(x) (1.5, (1.5+0j)) >>> y = L >>> float(y) # utrata dokładności e+023 >>> oct(256), hex(256) ('0400', '0x100') >>> str(1), str(1.5), str(1/3.3) ('1'. '1.5'. ' ') >>> float('1.0') 1.0 >>> int('1.0') …ValueError: invalid literal for int() '1.0'

48 Funkcje matematyczne w Python abs(x) Wartość bezwzględna x cmp(x,y) -1 dla x y max(xi, x2...) Największy z argumentów min(xi,x2…) Najmniejszy z argumentów round(x[,n]) x zaokrąglone do n cyfr od kropki dziesiętnej >>> round(0.5) 1.0 >>> round(-0.5)

49 Przykład >>> abs(-4), abs,(0.0), abs(99L) (4, 0.0, 99L) >>> cmp(-4, -5), cmp(0, 0.0), cmp(5*2, 5/0.1) (1, 0, -1) >>> max(-4, -5, 0) 0 >>> min(-4, -5, 0) -5 >>> lista1 = [1, 2, 3] >>> lista2 = [4, 5, 6] >>> max(lista1), max(lista2), max(lista1, lista2) (3, 6, [4, 5, 6]) >>> min(lista1), min(lista2), min(lista1, lista2) (1, 4, [1, 2, 3]) >>> stri1= "abcABC" >>> str2 = "xyzXYZ" >>> max(str1), max(str2), max(str1, str2) ('c', 'z', 'xyzXYZ') >>> min(str1), min(str2), min(str1, str2) ('A', 'X', 'abcABC') >>> x = >>> round(x), round(x, 2), round(x, -3) ( , , ) >>> x = >>> round(x), round(x, 2), round(x, -3) ( , , )

50 moduł math FunkcjaZwraca ceil(x)Zaokrąglenie x w górę (do najbliższej liczby całkowitej, nie mniejszej niż x) exp(x)e x floor(x)Zaokrąglanie, w dół (do najbliższej liczby całkowitej, nie większej od x) log(x)Logarytm naturalny liczby x modf(x)Część całkowita i część ułamkowa x w postaci dwupozycyjnej krotki. sqrt(x)Pierwiastek kwadratowy z x dla x 0

51 Przykład >>> import math >>> math.ceil(-5.5), math.ceil(1.99) (-5.0, 2.0) >>> math.floor(-5.5), math.floor(1.99) (-6.0, 1.0) >>> x = 1 >>> math.exp(x), math.log(x) ( , 0.0) >>> math.exp(1) == math.e 1 >>> x = >> math.log(math.exp(x)) >>> math.cos(math.pi) >>> math.modf(4.5) (0.5, 4.0) >>> math.sqrt(1), math.sqrt(2) (1.0, ) >>> math.sqrt(-1) Traceback (most recent cali last): File " ". line 1. in ? ValueError: math domain error >>> import cmath >>> cmath.sqrt(-1) 1j

52 Uwagi do operacji z modułu math Python wywołuje wyjątek ValueError, jeśli argument wykracza poza dziedzinę funkcji. Wyjątek OverflowError pojawia się wtedy, gdy wynik jest zbyt duży, by można go było zachować w prostej liczbie całkowitej lub zmiennoprzecinkowej (na przykład jak w przypadku math.exp( 1000)). Moduł math definiuje przydatne stałe zmiennoprzecinkowe: math.pi; math.e Moduł math definiuje także zwykłe funkcje trygonometryczne i hiperboliczne: acos(x), asin(x), atan(x), atan2(y, x), cos(x), cosh(x), sin(x), sinh(x), tan(x) i tanh(x). Wielkości x i y oznaczają kąty wyrażone w radianach. Funkcji modułu math nie można używać z liczbami zespolonymi. Do obsługi liczb zespolonych należy użyć funkcji z modułu cmath W przypadku zaawansowanych metod numerycznych do operacji wykonywanych na macierzach oraz do obliczeń naukowych należy użyć wersji Numeric Python. Większość funkcji z modułu math ma swoje odpowiedniki w pliku math.h w standardowej bibliotece języka C.

53 moduł random Funkcja Zwraca seed([x]) Ustawia wartość pocztową liczby całkowitej używanej jako podstawa w generatorze liczb losowych. Funkcję tę należy wywołać przed wywołaniem innej funkcji modułu random. Zwraca None randrange ([start,]stop[,step]) - Losowo wybrany element z range(start, stop, step) choice(seq) Losowo wybrana pozycja z listy, krotki lub łańcucha shuffle(Ist) Losowe przemieszczanie w miejscu pozycji listy. Zwraca None random() Losowa liczba zmiennoprzecinkowa r [0,1) uniform(x,y) Losowa liczba zmiennoprzecinkowa r [x,y)

54 random, wskazówki Identyczne wartości początkowe dają identyczne sekwencje liczb losowych. Jeśli nie zostanie wywołana funkcja seed(), Python sam wygeneruje wartość początkową na podstawie czasu systemowego. Liczby generowane przez komputer są liczbami pseudolosowymi. Teoretyczne właściwości liczb pseudolosowych w Pythonie powodują, że nie są one przydatne do celów kryptograficznych (patrz: rozdział 15. podręcznika systemowego Python Library Reference).

55 random przykład >>> import random >>> random.seed() >>> random.random() >>> random.random() >>> lista = range(5) >>> lista [0, 1, 2, 3, 4] >>> random.shuffle(lista) >>> lista [4, 3, 0, 2, 1] >>> random.choice(lista) 3 >>> random.choice("AbCdE\n") 'd' >>> random.choice("AbCdE\n") '\n' >>> random.randrange(6, 10) 9 >>> random.randrange(-10, -6) -10 >>> random.uniform(0, 1) >>> random.uniform(-5, -4)


Pobierz ppt "Programowanie w językach skryptowych 1 Wykład 2: Podstawy Pythona Opracował: Dr inż.. Marcin Janaszewski Katedra Informatyki Stosowanej Politechnika Łódzka."

Podobne prezentacje


Reklamy Google