Jezyki i metody programowania
Transkrypt
Jezyki i metody programowania
Jezyki ˛ i metody programowania Wykład 1 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 / 28 Treści programowe Podstawowe pojecia ˛ programowania Proste typy danych w Pythonie Grafika żółwia w Pythonie Moduły Pythona Funkcje Instrukcja wyboru Iteracje Łańcuchy znaków Pliki Rekurencja ... Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Zalecana Literatura Python 3 dla poczatkuj ˛ acych ˛ Peter Wentworth, Jeffrey Elkner,Allen B. Downey, Chris Meyers How to Think Like a Computer Scientist: Learning with Python 3 http://www.ict.ru.ac.za/Resources/cspw/ thinkcspy3/thinkcspy3.pdf Wersja online: openbookproject.net/thinkcs/python/english3e/ Wersja interaktywna: http://interactivepython.org/courselib/static/ thinkcspy/index.html Python 3 dla średnio zaawansowanych Mark Summerfield. Python 3. Kompletne wprowadzenie do programowania. Wydanie II. Wydawnictwo Helion. Gliwice, czerwiec 2010. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Literatura uzupełniajaca ˛ Python 3 Przewodnik po jezyku ˛ Python http://docs.python.org/py3k/tutorial/ Dokumentacja dla wersji 3.2.3 jezyka ˛ Python http://docs.python.org/py3k/reference/ Mark Pilgrim Dive into Python 3. http://diveintopython3.org/ Python 2 Dokumentacja dla wersji 2.3 jezyka ˛ Python http://pl.python.org./docs Tłumaczenie ksiażki ˛ Dive into Python. http://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Wprowadzenie Charakterystyka jezyka ˛ Python Python jest interpretowanym jezykiem ˛ programowania wysokiego poziomu stworzonym przez holenderskiego programiste˛ Guido van Rossuma w 1990 roku. Jezyk ˛ został tak nazwany w ślad za programem telewizyjnym BBC „Latajacy ˛ cyrk Monty Pythona”. Obecnie Python rozwijany jest jako projekt Open Source, zarzadzany ˛ przez Python Software Foundation, bed ˛ ac ˛ a˛ organizacja˛ non-profit. W stosunku do wcześniejszych wersji jezyka ˛ Python, w wersji 3.0 wprowadzono wiele istotnych zmian, które spowodowały brak zgodności wstecz. Najnowsza˛ wersja˛ jezyka ˛ Python jest wersja 3.4.2, która została wydana 13-10-2014 roku. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Wprowadzenie Charakterystyka jezyka ˛ Python W Pythonie to wartości, a nie zmienne, posiadaja˛ typ – tak wiec ˛ Python jest jezykiem ˛ z typami dynamicznymi. Python posiada wbudowane abstrakcyjne typy danych takie jak np. listy, krotki, zbiory i słowniki. W Pythonie możliwe jest programowanie strukturalne, programowanie obiektowe i programowanie funkcyjne. Do zarzadzania ˛ pamieci ˛ a˛ stosuje sie˛ zbieranie nieużytków (ang. garbage collection), tak wiec ˛ Python nie wymaga od programisty recznego ˛ zarzadzania ˛ pamieci ˛ a. ˛ Cecha˛ wyróżniajac ˛ a˛ Pythona spośród innych jezyków ˛ jest stosowanie wcie˛ ć do wydzielania bloków kodu. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Instalacja interpretera jezyka ˛ Python W systemie Ubuntu Linux Najprościej zainstalować Pythona 3 wykonujac ˛ w terminalu polecenie: $ sudo apt-get install python3 W systemie Windows Interpreter Pythona 3 można bezpłatnie pobrać ze strony https://www.python.org/downloads/windows/ Pobieramy plik python-3.4.2.msi poprzez link Windows x86 MSI Installer (3.4.2) lub plik python-3.3.0.amd64.msi poprzez link Windows X86-64 MSI Installer (3.4.2) Instalujemy Pythona klikajac ˛ na pobrany plik. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Używanie interpretera Pythona Aby uruchomić interpreter Pythona 3 w systemie Linux otwieramy terminal i w konsoli wpisujemy polecenie: $ python3 Pojawi sie˛ krótka informacja o interpreterze oraz znak zachety: ˛ >>> Od tej chwili możemy wpisywać instrukcje oraz wyrażenia jezyka ˛ Python, np. >>> 1 + 2 Po naciśnieciu ˛ klawisza <Enter> na ekranie zobaczymy obliczony przez interpreter wynik wyrażenia 1 + 2 oraz w nastepnej ˛ linii ponownie znak zachety. ˛ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Używanie interpretera Pythona Importowanie modułów Aby móc korzystać z funkcji matematycznych należy zaimportować odpowiedni moduł: >>> import math Od tej chwili możemy używać funkcji zdefiniowanych w tym module, np. >>> math.sqrt(2) Po naciśnieciu ˛ klawisza <Enter> na ekranie zobaczymy obliczony przez funkcje˛ math.sqrt pierwiastek z liczby 2 oraz w nastepnej ˛ linii ponownie znak zachety. ˛ Aby uzyskać pomoc na temat funkcji i stałych zdefiniowanych w module math należy użyć funkcji help: >>> help(math) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Używanie interpretera Pythona Przykład (Wykorzystanie funkcji print) >>> print("Witajcie studenci!") Witajcie studenci! >>> print(2 + 3) 5 >>> >>> print("2 + 3 = ", 2 + 3) 2 + 3 = 5 >>> >>> print(2, "+", 3, "=", 2 + 3) 2 + 3 = 5 >>> Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Typy liczbowe W jezyku ˛ Python dostepne ˛ sa˛ nastepuj ˛ ace ˛ rodzaje liczb: całkowite (0, 1, -2, itd.) – typ int boolowskie (tylko wartości False oraz True) – typ bool zmiennoprzecinkowe (3.14, 2.718, itd.) – typ float zespolone (2+3j, 1j, 1+0j) – typ complex Operatory arytmetyczne: dodawanie + oraz odejmowanie − mnożenie ∗, dzielenie /, dzielenie całkowite // reszta z dzielenia całkowitego % ∗∗ potegowanie ˛ Operatory z operandami typów mieszanych przekształcaja˛ operandy boolowskie w całkowite, zmiennoprzecinkowe lub zespolone operandy całkowite w zmiennoprzecinkowe lub zespolone operandy zmiennoprzecinkowe w zespolone. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Typy danych Typ obiektu można pobrać za pomoca˛ wbudowanej funkcji type. Przykłady >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> type(16) type("Hello") type("16") type(3.14) type(2∗∗ 64) type(1 > 0) type(False) type(True) type(None) type(1 + 2j) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Priorytety operatorów Nawiasy maja˛ najwyższy priorytet. Sa˛ używane do wymuszenia obliczania wartości wyrażenia w żadanej ˛ kolejności, Potegowanie ˛ ma kolejny najwyższy priorytet. Mnożenie, dzielenie, dzielenie całkowite i reszta z dzielenia maja˛ ten sam priorytet, który jest wyższy niż dodawanie i odejmowanie, które również maja˛ ten sam priorytet. Operatory o tym samym priorytecie sa˛ obliczane od lewej do prawej. W algebrze mówimy, że sa˛ lewostronnie łaczne. ˛ Wyjatkiem ˛ (z powodów historycznych) jest operator potegowania, ˛ który jest prawostronnie łaczny. ˛ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Operatory porównania Python oferuje standardowy zestaw binarnych operatorów porównania charakteryzujacych ˛ sie˛ oczekiwana˛ semantyka: ˛ < (mniejszy niż), > (wiekszy ˛ niż), == (równy), != (różny <= (mniejszy lub równy), >= (wiekszy ˛ lub równy), Wymienione operatory porównuja˛ wartości obiektów, do których odniesienia zostały wskazane w operatorze. Wynikiem porównania jest wartość typu bool: False albo True. Porównania, które nie maja˛ sensu, bed ˛ a˛ powodowały zgłoszenie wyjatku. ˛ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Obiekty, wartości i typy Obiekty sa˛ w Pythonie abstrakcja˛ danych. Każda dana jest reprezentowana przez obiekt lub przez relacje˛ pomiedzy ˛ obiektami. Zgodnie z modelem „komputera z programem w pamieci” ˛ von Neumanna kod również reprezentowany jest przez obiekty. Każdy obiekt ma tożsamość, typ i wartość. Od chwili utworzenia obiektu jego tożsamość nigdy sie˛ nie zmienia. O tożsamości obiektu można myśleć jak o adresie obiektu w pamieci. ˛ Do porównania tożsamości dwóch obiektów służy operator is. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Obiekty, wartości i typy Wbudowana funkcja id zwraca wartość całkowita, ˛ reprezentujac ˛ a˛ tożsamość obiektu. W standardowej implementacji funkcja ta zwraca adres obiektu, przekształcony do postaci liczbowej. Typ określa zbiór atrybutów i operacji, które można wykonać na obiekcie oraz definiuje zbiór dopuszczalnych wartości obiektu. Typ obiektu, podobnie jak jego tożsamość, również nie może ulec zmianie. Typ obiektu (który również jest obiektem) można pobrać za pomoca˛ wbudowanej funkcji type. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Zmienne Zmienna w Pythonie jest nazwa, ˛ która jest odniesieniem do obiektu. Aby utworzyć zmienna˛ oraz nadać jej wartość należy użyć instrukcji przypisania: zmienna = wyrażenie Powyższa instukcja przypisuje do zmiennej zmienna odniesienie do obiektu utworzonego w wyniku obliczenia wartości wyrażenia wyrażenie. Przypisanie do zmiennej nie jest wypisywane przez interpreter. Wartość może być przypisana jednocześnie wielu zmiennym, np. a = b = c = 0 Możliwe sa˛ też jednoczesne przypisania: a, b, c = 1, 2, 3 Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Przykłady >>> a = 3 >>> b = 3 >>> id(a) >>> id(b) >>> a is b True >>> a = 3.0 >>> b = 3.0 >>> id(a) >>> id(b) >>> a is b False Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Zmienne W trybie interaktywnym, ostatnio wydrukowane wyrażenie przypisywane jest do zmiennej, której nazwa˛ jest _. Oznacza to, że jeśli używa sie˛ Pythona jako biurkowego kalkulatora, łatwym staje sie˛ kontynuowanie obliczeń, jak w poniższym przykładzie: >>> 53.4 * 3.56 11.747999999999999 >>> round(_, 2) 11.75 Zmienna _ powinna być traktowana przez użytkownika jak zmienna tylko do odczytu. Przypisanie do zmiennej _ jakiejkolwiek wartości stworzy lokalna˛ zmienna˛ z ta˛ sama˛ nazwa˛ przykrywajac ˛ a˛ wbudowana˛ zmienna˛ _ o tych magicznych właściwościach. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Słowa kluczowe Nazwy zmiennych, funkcji i klas sa˛ identyfikatorami. Identyfikator to dowolny ciag ˛ składajacy ˛ sie˛ z liter, cyfr oraz znaków podkreślenia zaczynajacy ˛ sie˛ od litery lub znaku podkreślenia. Spośród wszystkich możliwych nazw zmiennych 33 sa˛ zarezerwowane. Sa˛ to słowa kluczowe jezyka ˛ Python. False None True and as assert break class continue def del elif else except finally for from global if import in is lambda nonlocal not or pass raise return try while with yield Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Wprowadzanie napisów >>> imie = input("Podaj swoje imi˛ e: ") >>> print("Cześć", imie) Wprowadzanie napisów >>> rok = int(input("Podaj rok urodzenia: ")) >>> print("Urodziłeś si˛ e w roku", rok) Wprowadzanie liczb zmiennoprzecinkowych >>> waga = float(input("Podaj swoja˛ wag˛ e: ")) >>> print("Ważysz", waga, "kg") Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Skrypty w jezyku ˛ Python Przez skrypt Pythona rozumiemy plik tekstowy zawierajacy ˛ program zapisany w jezyku ˛ Python. Zwyczajowo skrypty Pythona zapisuje sie˛ w plikach z rozszerzeniem .py, np. hello.py. Przykład (Przykładowy skrypt) #!/usr/bin/env python3 print("Witajcie studenci!") print("A˛ĆEŁ ˛ ŃÓŚŹŻ") print("ać˛ ˛ ełńóśźż") Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Skrypty w jezyku ˛ Python Aby wykonać skrypt hello.py wydajemy w konsoli polecenie $ python3 hello.py Możemy też uruchomić skrypt hello.py wydajac ˛ w konsoli polecenie $ ./hello.py o ile w pierwszej linii pliku hello.py znajduje sie˛ odwołanie do interpretera: #!/usr/bin/env python3 a ponadto plik hello.py ma ustawiony atrybut wykonywalności. Python 3 akceptuje w skryptach znaki pochodzace ˛ z zestawu znaków Unikodu w systemie UTF-8. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Prosta postać instrukcji iteracyjnej for (dla) Instrukcja iteracyjna for jest używana do iterowania po elementach sekwencji lub innego obiektu iterowalnego. Prosta postać instrukcji iteracyjnej for jest nastepuj ˛ aca: ˛ for zmienna in wyrażenie: blokInstrukcji blokInstrukcji to ciag ˛ instrukcji, które umieszczone sa˛ w kolejnych liniach, przy czym każda linia jest wcieta ˛ w stosunku do linii zaczynajacej ˛ sie˛ od for o te˛ sama˛ liczbe˛ spacji. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Semantyka instrukcji iteracyjnej for Wyrażenie wyrażenie jest wartościowane raz, a jego wynikiem powinna być sekwencja. Dla każdego elementu tej sekwencji (w kolejności rosnacych ˛ indeksów) wykonywany jest podany ciag ˛ instrukcji, przy czym najpierw element ten jest przypisywany do zmiennej zmienna. Po wyczerpaniu elementów sekwencji (być może od razu, jeśli sekwencja ta jest pusta) wykonywanie instrukcji for kończy sie. ˛ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Schemat blokowy instrukcji iteracyjnej for ✲ ❄ ❅ ❅ ❅ Czy istnieją ❅ ❅ False elementy sekwencji, ❅ ❅ które nie zostały ❅ przetworzone? ❅ ❅ ❅ ❅ True ❄ zmienna = następny element ❄ blokInstrukcji ❄ Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Zakresy Funkcja wbudowana range jest uniwersalna˛ funkcja˛ tworzac ˛ a˛ skończony ciag ˛ arytmetyczny. Funkcje˛ te˛ można wywoływać z jednym, dwoma lub trzema argumentami: range(stop) range(start, stop) range(start, stop, krok) start = 0, krok = 1 krok = 1 W przypadku gdy krok > 0, elementy zakresu r określone sa˛ wzorem r[j] = start + krok * j, gdzie j >= 0 oraz r[j] < stop. W przypadku gdy krok < 0, elementy zakresu r określone sa˛ wzorem r[j] = start + krok * j, gdzie j >= 0 oraz r[j] > stop. Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Przykłady >>> [0, >>> [1, >>> [0, >>> [0, >>> [0, >>> [] >>> [] list(range(10)) 1, 2, 3, 4, 5, 6, 7, 8, 9] list(range(1, 11)) 2, 3, 4, 5, 6, 7, 8, 9, 10] list(range(0, 30, 5)) 5, 10, 15, 20, 25] list(range(0, 10, 3)) 3, 6, 9] list(range(0, -10, -1)) -1, -2, -3, -4, -5, -6, -7, -8, -9] list(range(0)) list(range(1, 0)) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Przykład (Program z użyciem instrukcji iteracyjnej for) #!/usr/bin/env python3 n = int(input("Podaj liczb˛ e naturalna: ˛ ")) s = 0 for j in range(1, n + 1): s = s + j print("Suma liczb od 1 do", n, "wynosi", s) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Przykład (Program z użyciem instrukcji iteracyjnej for) """Oblicza sum˛ e liczb naturalnych od 1 do n""" #!/usr/bin/env python3 n = int(input("Podaj liczb˛ e naturalna: ˛ ")) s = 0 for j in range(1, n + 1): s = s + j print("Suma liczb od 1 do", n, "wynosi", s) Wykład na podstawie wykładów dr Bożena Woźna-Szcześniak (IMI AJD) JMP / 28 Podstawy jezyka ˛ Python Przykład (Program z użyciem instrukcji iteracyjnej for) """Oblicza sum˛ e liczb naturalnych od 1 do n""" #!/usr/bin/env python3 def main(): n = int(input("Podaj liczb˛ e naturalna: ˛ ")) s = 0 for j in range(1, n + 1): s = s + j 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 / 28