Podstawy programowania w Pythonie
Transkrypt
Podstawy programowania w Pythonie
Podstawy programowania w Pythonie Wykład 5 dr Andrzej Zbrzezny Instytut Matematyki i Informatyki Akademia Jana Długosza w Cz˛estochowie 7 listopada 2012 dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 1 / 20 Podstawy jezyka ˛ Python Wartości boolowskie Wartość logiczna to w logice podstawowa cecha zdania określajaca ˛ jego stosunek do faktów. W logice klasycznej każde zdanie może przyjać ˛ tylko jedna˛ z dwóch wartości logicznych: prawda – oznaczajaca ˛ zgodność zdania ze zbiorem faktów fałsz – oznaczajaca ˛ niezgodność zdania ze zbiorem faktów W jezyku ˛ Python stała wbudowana False reprezentuje wartość logiczna˛ fałsz, natomiast stała wbudowana True reprezentuje wartość logiczna˛ prawda. Obiekty False i True sa˛ jedynymi wartościami typu bool. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 2 / 20 Podstawy jezyka ˛ Python Wartości boolowskie Typ bool jest podtypem typu int, a zatem wywołanie funkcji wbudowanej issubclass(bool, int) zwróci wartość True: >>> issubclass(bool, int) True >>> issubclass(int, int) True >>> issubclass(int, float) False W prawie wszystkich kontekstach wartości boolowskie False i True zachowuja˛ sie˛ jak wartości 0 i 1, odpowiednio. Wyjatkiem ˛ jest to, że po przekonwertowaniu wartości boolowskiej na łańcuch, zwracany jest łańcuch 'False' lub 'True'. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 3 / 20 Podstawy jezyka ˛ Python Wartości boolowskie Każdy obiekt może być w razie potrzeby potraktowany jako wartość boolowska. Nastepuj ˛ ace ˛ obiekty sa˛ traktowane jako wartość False: None False zero z każdego typu numerycznego, przykładowo: 0, 0.0, 0j dowolna pusta sekwencja, przykładowo: '', (), [] dowolne puste odwzorowanie, przykładowo: {}. instancje klas zdefiniowanych przez użytkownika, o ile w klasie zdefiniowana jest metoda __bool__() lub metoda __len__() oraz metody te zwracaja˛ dla tych instancji liczbe˛ całkowita˛ zero lub wartość boolowska˛ False. Wszystkie pozostałe wartości traktowane sa˛ jak wartość boolowska True. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 4 / 20 Podstawy jezyka ˛ Python Wartości boolowskie Funkcja wbudowana bool zwraca dla każdego obiektu jego wartość logiczna˛ określona˛ zgodnie z powyższymi regułami. bool(None) False bool(6) True bool("") False bool("Python. Programming is fun again!") True bool([]) False bool([10, 20, 30, 40]) True dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 5 / 20 Podstawy jezyka ˛ Python Operatory boolowskie – and, or, not Rezultaty działań z użyciem operatorów boolowskich opisane sa˛ w poniższej tabeli, w kolejności rosnacych ˛ priorytetów: Operator Wynik Uwagi x or y jeżeli bool(x) == False, to y, (1) w przeciwnym razie x x and y jeżeli bool(x) == False, to x, (2) w przeciwnym razie y not x jeżeli bool(x) == False, to True, (3) w przeciwnym razie False Uwagi: 1 2 3 Argument y jest obliczany tylko wtedy, gdy bool(x) == False. Argument y jest obliczany tylko wtedy, gdy bool(x) == True. Operator not ma priorytet mniejszy niż nieboolowskie operatory. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 6 / 20 Podstawy jezyka ˛ Python Operatory boolowskie – and, or, not >>> 5 or 8 5 >>> 5 and 8 8 >>> not 5 and 8 False >>> 8 and 5 < 8 True >>> 5 < 8 and 8 8 >>> not 5 != 8 False >>> (not 5) != 8 True dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 7 / 20 Podstawy jezyka ˛ Python Prosta instrukcja warunkowa Składnia prostej instrukcji warunkowej jest nastepuj ˛ aca: ˛ if wyrażenie: blokInstrukcji Wykonanie prostej instrukcji warunkowej zaczyna sie˛ od obliczenia wartości boolowskiej wyrażenia wyrażenie. Jeżeli wartościa˛ ta˛ jest True, to wykonywany jest blokInstrukcji. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 8 / 20 Podstawy jezyka ˛ Python Schemat blokowy prostej instrukcji warunkowej ❄ ❅ ❅ ❅ False wyrażenie ❅ ❅ ❅ ❅ ❅ True ❄ blokInstrukcji ✛ ❄ dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 9 / 20 Podstawy jezyka ˛ Python Przykład (Suma liczb dodatnich i suma liczb ujemnych) def main(): n = int(input("Ilość liczb do wczytania: ")) suma_dod = suma_ujem = 0 for j in range(0, n): a = float(input("Podaj kolejna˛ liczb˛ e: ")) if a > 0: suma_dod = suma_dod + a if a < 0: suma_ujem = suma_ujem + a print("Suma liczb dodatnich =", suma_dod) print("Suma liczb ujemnych =", suma_ujem) main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 10 / 20 Podstawy jezyka ˛ Python Przykład (Ilość oraz suma liczb dodatnich i liczb ujemnych) def main(): n = int(input("Ilość liczb do wczytania: ")) ile_dod = ile_ujem = 0; suma_dod = suma_ujem = 0.0 for j in range(0, n): a = float(input("Podaj kolejna˛ liczb˛ e: ")) if a > 0: ile_dod = ile_dod + 1 suma_dod = suma_dod + a if a < 0: ile_ujem = ile_ujem + 1 suma_ujem = suma_ujem + a print("Ilość dodatnich =", ile_dod, end = " ") print("Suma dodatnich =", suma_dod) print("Ilość ujemnych =", ile_dod, end = " ") print("Suma ujemnych =", suma_ujem) main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 11 / 20 Podstawy jezyka ˛ Python Instrukcja warunkowa Składnia instrukcji warunkowej jest nastepuj ˛ aca: ˛ if wyrażenie: blokInstrukcji_T else: blokInstrukcji_F Wykonanie instrukcji warunkowej zaczyna sie˛ od obliczenia wartości boolowskiej wyrażenia wyrażenie. Jeżeli wartościa˛ ta˛ jest True, to wykonywany jest blokInstrukcji_T. W przeciwnym razie wykonywany jest blokInstrukcji_F. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 12 / 20 Podstawy jezyka ˛ Python Schemat blokowy instrukcji warunkowej True ❄ ❅ ❅ ❅ False wyrażenie ❅ ❅ ❅ ❅ ❅ ❄ blokInstrukcji T ❄ blokInstrukcji F ✲✛ ❄ dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 13 / 20 Podstawy jezyka ˛ Python Przykład (Suma liczb dodatnich i suma liczb ujemnych) def main(): y = int(input("Podaj rok: ")) print("Rok", y, "ma", number_of_days(y), "dni.") def number_of_days(y): if y % 4 == 0 and (y % 100 != 0 or y % 400 == 0): return 366 else: return 365 if __name__ == "__main__": main() dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 14 / 20 Podstawy jezyka ˛ Python Pełna postać instrukcji warunkowej Składnia pełnej instrukcji warunkowej jest nastepuj ˛ aca: ˛ if wyrażenie: blokInstrukcji_T elif wyrażenie_1 blokInstrukcji_1 ... elif wyrażenie_n blokInstrukcji_n else: blokInstrukcji_F dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 15 / 20 Podstawy jezyka ˛ Python Schemat blokowy pełnej instrukcji warunkowej ❄ ❅ ❅ ❅ True wyrażenie ❅ ❅ ❅ ❅ ❅ False ❄ ❅ ❅ ❅ True wyrażenie 1 ❅ ❅ ❅ ❅ ❅ ✲ blokInstrukcji T ✲ blokInstrukcji 1 False ❄ blokInstrukcji F ✛ ❄ ❄ dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 16 / 20 Podstawy jezyka ˛ Python Przykład (Pierwiastki rzeczywiste równania kwadratowego) import math def wypisz_pierwiastki(a, b, c): delta = b * b - 4 * a * c if delta > 0: print("Równanie ma dwa pierwiastki") print("x1 =", (-b - math.sqrt(delta)) / (2 * a)) print("x2 =", (-b + math.sqrt(delta)) / (2 * a)) elif delta == 0: print("Równanie ma podwójny pierwiastek") print("x1 = x2 = ", -b / (2 * a)) else: print("Równanie nie ma pierwiastków") dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 17 / 20 Podstawy jezyka ˛ Python Notacja BNF Gramatyka jezyka ˛ Python zapisana jest przy użyciu zmodyfikowanej notacji Backusa-Naura (w skrócie BNF od angielskiego Backus-Naur Form). W notacji BNF używa sie˛ definicji takich jak poniższe: nazwa ::= m_litera ::= m_litera (m_litera | "_")* "a"..."z" Pierwsza linia mówi, że nazwa jest ciagiem ˛ małych liter i znaków podkreślenia zaczynajacym ˛ sie˛ od małej litery. Druga linia mówi, że m_litera jest jednym ze znaków od a do z. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 18 / 20 Podstawy jezyka ˛ Python Notacja BNF Każda reguła zaczyna sie˛ do nazwy i symbolu ::=. Pionowa kreska | jest operatorem alternatywy i ma najniższy priorytet. Gwiazdka (*) oznacza zero lub wiecej ˛ powtórzeń poprzedniego elementu, natomiast plus (+) oznacza jedno lub wiecej ˛ powtórzeń. Ujecie ˛ frazy w nawiasy kwadratowe ([]) oznacza zero lub jedno wystapienie ˛ tej frazy. Operatory * i + maja˛ najwyższy priorytet. Nawiasy sa˛ używane do grupowania. Symbole terminalne ujmuje sie˛ w cudzysłowy. Białe znaki (spacje i tabulatory) służa˛ do oddzielania tokenów. Reguły sa˛ zwykle zapisywane w pojedynczych liniach. dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 19 / 20 Podstawy jezyka ˛ Python Składnia instrukcji warunkowej w zmodyfikowanej notacji BNF if_stmt ::= "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite] Składnia bloku instrukcji w zmodyfikowanej notacji BNF compound_stmt ::= if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT statement ::= stmt_list NEWLINE | compound_stmt stmt_list ::= simple_stmt (";" simple_stmt)* [";"] dr Andrzej Zbrzezny (IMI AJD) Podstawy programowania w Pythonie 07.11.2012 20 / 20