Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie w językach skryptowych

Podobne prezentacje


Prezentacja na temat: "Programowanie w językach skryptowych"— Zapis prezentacji:

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

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 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 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 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 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 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<y<z, m is n, s not in t Wyświetlanie – Krotka, lista lub słownik: (1,2), (3,), [1,2], {„a”:1, „b”:2} Lambda – Forma lambda: lambda x: x*x Wycinanie – Zakres pozycji w sekwencji: x[2:4], x[-3:], x[:5] Subskrypcja – pozycja w sekwencji albo słownik: x[0], x[-1], dict[key] Przekształcenie łańcucha – łańcuchowa reprezentacja obiektu: str(x), repr(x), ‘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 "<stdin>". 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 "<stdin>", line 1. in ? NameError: name 'num' is not defined >>> s, t, r = 1, 2, 3, 4 File "<stdin>", 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"
('Python', 'Python', ' Python ') >>> del x, y >>> x, y, z Traceback (most recent call last): File "<stdin>". 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" >>> b = a >>> print a, b UFO UFO >>> print id(a), id(b) >>> a= "IFO" IFO UFO >>> print id(a), id(b) >>> a = "UFO" >>> print id(a) >>> 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.

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] [1, 2, 3] >>> x[1] = "dwa" [1, 'dwa', 3] [1, 'dwa', 3] >>> x = [4, 5, 6] [4, 5, 6] [1. 'dwa' , 3]

19 Powiązanie zmiennej z istniejącym obiektem
>>> 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 = >>>x = [1, "dwa", 3.0] >>> type(x) >>> type(x) <type 'int' > <type 'list'> >>> x = "poetycki" >>> x = 3.0 <type 'string'> <type 'float'>

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) >>> type(a) == type(lista[1]) >> type(a) != type(1) >>> typed(1) = typed(1.0) >>> typed(1) = type("1") >>> 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
BufferType Obiekt bufora zwrócony przez buffer() BuiltinFunctionType Funkcja wbudowana, taka jak na przykład ranget() lub math.sqrt() BuiltinMethodType To samo, co BuiltinFunctionType ClassType Klasa zdefiniowana przez użytkownika CodeType Skompilowany kod bajtowy zwrócony przez compile() ComplexType Liczba zespolona Dicttype Słownik DictionaryType To samo, co DictType - Słownik EllipsisType Obiekt Ellipsis (wielokropki) używany w rozszerzonym wycinaniu FileType Obiekt otwartego pliku, taki jak na przykład sys.stdout FloatType Liczba zmiennoprzecinkowa FrameType Obiekt ramki wykonania FunctionType Funkcje zdefiniowane przez użytkownika i funkcja lambda InstanceType Egzemplarz klasy zdefiniowanej przez użytkownika IntType Liczba całkowita zwykła LambdaType To samo, co FunctionType ListType Lista LongType Liczba całkowita długa MethodType Metoda egzemplarza klasy zdefiniowanej przez użytkownika ModuleType Moduł NoneType Obiekt pusty None SliceType Rozszerzony wycinek zwrócony przez slice() StringType Łańcuch (ciąg znakowy) TracebackType Ślad stosu wyjątku, taki jak na przykład sys.last_traceback TupleType Krotka TypeType Obiekt typu zwrócony przez type UnboundMethodType To samo, co MethodType UnicodeType Łańcuch Unicode XrangeType Zwrócone przez xrange()

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

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 + 0J liczba 0 "" Pusty łańcuch () pusta krotka [] pusta lista {} pusty słownik None pusty obiekt Wyrażenia prawdziwe to takie, których wartości są różne od wymienionych w tabeli.

27 Operatory logiczne x y x and y x or y not x F F x y 1 T F y x 0
F T x y T T y x >>> not -4 >>> not "UFO" >>> 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" 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 Operator Opis < Mniejszy
<= Mniejszy lub równy > Większy >= Większy lub równy == Równy != Nierówny is Tożsamościowa równość obiektu is not Nierówność obiektu in Należy (członkostwo) not in Nie 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 > b 0 0 >> a < 5, 5 < b >>> a < 10 == b (1, 1) 1 >>> a < 5 < b >>> (a == 1) and (b >= 5) 1 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 >>> lista3 = [lista1, 4, 5] >>> lista4 = [-1, 0, lista1] >>> lista3[0] is Iista4[-1] >>> x = None >>> y = None >>> x is y is None 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 "<stdin>", line 1, in ? TypeError: 'in <string>' 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)

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 < b > 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
Operator Opis (), [], {}, '' Krotka, lista, słownik, przekształcanie łańcucha x.attr, x[i], x[i-j], f() Atrybut, indeks, wycinanie, wywołanie funkcji +x, -x, ~x Jednostronna 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 not Logiczne NOT and Logiczne AND or Logiczne OR lambda Wyraż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 Typ Przykłady Liczba całkowita zwykła -10000, 0, 38
Liczba całkowita długa -1L, 0L, L Liczba zmiennoprzecinkowa E4, , 10e2 Liczba zespolona j, 2.0J, J

38 Błąd zaokrąglenia >>> 0.1 0.10000000000000001
>>> 0.2 >>> 0.3 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.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 "<stdin>", 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
Operator Działanie ~x Odwraca bity w x x<<n Przesuwa x w lewo o n bitów x>>n Przesuwa x w prawo o n bitów x & y Bitowe AND argumentów x i y x ^ y Bitowe XOR argumentów x i y x | y Bitowe OR argumentów x i y

45 Operatory przypisania przyrostowego
Operator Wartość przypisana do x x+= y x powiększone o y x-= y x zmniejszone o y x*= y x pomnożone przez y x /= y x podzielone przez y x**= y x podniesione do potęgi y x%= y reszta pozostała z dzielenia x / y x|=y x lub bitowe z y x&=y x i bitowe z y x^=y x XOR bitowe z y x>>=y x 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 (1, 1L, 1.0, (1+0j)) >>> x = 1.5 (1, 1L, 1.5, (1.5+0j)) >>> x = "1" # łańcuch całkowitoliczbowy" >>> 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, 0 dla 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) -1.0

49 Przykład >>> abs(-4), abs,(0.0), abs(99L)
>>> cmp(-4, -5), cmp(0, 0.0), cmp(5*2, 5/0.1) (1, 0, -1) >>> max(-4, -5, 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 = ( , , )

50 moduł math Funkcja Zwraca
ceil(x) Zaokrąglenie x w górę (do najbliższej liczby całkowitej, nie mniejszej niż x) exp(x) ex 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 = 12.34 >> math.log(math.exp(x)) 12.34 >>> math.cos(math.pi) -1.0 >>> 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 "<stdin>". 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()
>>> lista = range(5) >>> lista [0, 1, 2, 3, 4] >>> random.shuffle(lista) [4, 3, 0, 2, 1] >>> random.choice(lista) 3 >>> random.choice("AbCdE\n") 'd' '\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"

Podobne prezentacje


Reklamy Google