Jezyki i metody programowania
Transkrypt
Jezyki i metody programowania
Jezyki ˛ i metody programowania Wykład 3 dr hab. Bożena Woźna-Szcześniak [email protected] Instytut Matematyki i Informatyki Akademia Jana Długosza w Cz˛estochowie Wykład na podstawie wykładów dr hab. Andrzeja Zbrzezngo Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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'. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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 Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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 Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Schemat blokowy prostej instrukcji warunkowej ❄ ❅ ❅ ❅ False wyrażenie ❅ ❅ ❅ ❅ ❅ True ❄ blokInstrukcji ✛ ❄ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Schemat blokowy instrukcji warunkowej True ❄ ❄ ❅ ❅ ❅ False wyrażenie ❅ ❅ ❅ ❅ ❅ blokInstrukcji T ❄ blokInstrukcji F ✲✛ ❄ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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 Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Schemat blokowy pełnej instrukcji warunkowej ❄ ❅ ❅ ❅ True wyrażenie ❅ ❅ ❅ ❅ ❅ False ❄ ❅ ❅ ❅ True wyrażenie 1 ❅ ❅ ❅ ❅ ❅ ✲ blokInstrukcji T ✲ blokInstrukcji 1 False ❄ blokInstrukcji F ✛ ❄ ❄ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 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") Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Instrukcja iteracyjna while (dopóki) Ogólna postać instrukcji iteracyjnej while jest nastepuj ˛ aca: ˛ while wyrażenie: blokInstrukcji else: blokIntrukcjiElse przy czym fragment else: blokIntrukcjiElse może nie wystapić. ˛ Instrukcja iteracyjna while jest używana do wykonywania bloku instrukcji tak długo, jak długo wartościa˛ logiczna˛ wyrażenia wyrażenie jest True. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Semantyka instrukcji iteracyjnej while Każdorazowo wartościowane jest wyrażenie wystepuj ˛ ace ˛ po słowie kluczowym while; jeśli jest ono prawdziwe, wykonywany jest blokInstrukcji. Jeśli za którymś razem (być może już za pierwszym) wartościa˛ wyrażenia bedzie ˛ False, nastepuje ˛ przerwanie wykonywania instrukcji iteracyjnej. Jeśli w instrukcji wystepuje ˛ klauzula else, to wykonywany jest zwiazany ˛ z nia˛ ciag ˛ instrukcji. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Schemat blokowy instrukcji iteracyjnej while bez klauzuli else ✲ ❄ ❅ ❅ ❅ False warunek ❅ ❅ ❅ ❅ ❅ True ❄ blokInstrukcji ❄ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Przykład (Suma liczb od 1 do n) """Oblicza sum˛ e liczb naturalnych od 1 do n""" #!/usr/bin/env python3 def main(): n = int(input("Podaj liczb˛ e naturalna: ˛ ")) s = 0 j = 1 while j <= n: s = s + j j = j + 1 print("Suma liczb od 1 do", n, "wynosi", s) main() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Przykład (Ciag ˛ Collatza) def main(): n = int(input("Podaj liczb˛ e naturalna: ˛ ")) ciag3nplus1(n) def ciag3nplus1(n): while n > 1: print(n, end = ", ") if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 print(n, end = ".\n") if __name__ == "__main__": main() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23 Podstawy jezyka ˛ Python Przykład (Ilość cyfr w liczbie naturalnej) def main(): n = int(input("Podaj liczb˛ e naturalna˛ dodatnia: ˛ ")) if n > 0: print("Ilość cyfr liczby", n, ":", ile_cyfr(n)) else: print("Skup si˛ e! Powiedziałem \"Dodatnia\"!") ˛ def ile_cyfr(n): ile = 0 while n > 0: ile += 1; n //= 10 return ile if __name__ == "__main__": main() Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 23