Programowanie w Pythonie Adrian Karpowicz Instytut Matematyki Uniwersytet Gdański Adrian Karpowicz Programowanie w Pythonie Literatura Jonson R. Briggs, Python dla dzieci, PWN, Warszawa, 2015. Python jest jezykiem ˛ programowania wysokiego poziomu (jego składnia i słowa kluczowe maja˛ maksymalnie ułatwić rozumienie kodu programu) ogólnego przeznaczenia. Python rozwijany jest jako projekt Open Source zarzadzany ˛ przez Python Software Foundation, która jest organizacja˛ non-profit. Adrian Karpowicz Programowanie w Pythonie Literatura Jonson R. Briggs, Python dla dzieci, PWN, Warszawa, 2015. Python jest jezykiem ˛ programowania wysokiego poziomu (jego składnia i słowa kluczowe maja˛ maksymalnie ułatwić rozumienie kodu programu) ogólnego przeznaczenia. Python rozwijany jest jako projekt Open Source zarzadzany ˛ przez Python Software Foundation, która jest organizacja˛ non-profit. Adrian Karpowicz Programowanie w Pythonie Literatura Jonson R. Briggs, Python dla dzieci, PWN, Warszawa, 2015. Python jest jezykiem ˛ programowania wysokiego poziomu (jego składnia i słowa kluczowe maja˛ maksymalnie ułatwić rozumienie kodu programu) ogólnego przeznaczenia. Python rozwijany jest jako projekt Open Source zarzadzany ˛ przez Python Software Foundation, która jest organizacja˛ non-profit. Adrian Karpowicz Programowanie w Pythonie Python-podstawy >>> – znaki gotowości print() – Zadanie a) Wpisz wpowłoce pythona: print("Hello World") i wciśnij enter. 1,45+ 2 b) Oblicz 1, 55 + 33 3 · 1, 26. Uwaga: działania w pythonie zapisujemy +, −, ∗, /, zamiast przecinka w ułamkach dziesietnych ˛ piszemy kropk˛e. c) Reszte˛ z dzielania a przez b zapisujemy a%b. Zapisać jedno równanie (wykorzystujace ˛ co najwyżej +, −, ∗, /, %) dajace ˛ w jako wynik cz˛eść całkowita˛ z dzielenia 1234 przez 19. Adrian Karpowicz Programowanie w Pythonie Python-podstawy Tworzenie zmiennej: nazwa_zmiennej = wartość_zmiennej np. aby utworzyć zmienna˛ o nazwie liczba, która ma wartość 100 wpisujemy liczba = 100. Wyświetlamy wartość zmiennej za pomoca˛ polecena print(nazwa_zmiennej) np. print(liczba). Różne zmienne moga˛ mieć te same wartości. Zmienne moga˛ przechowywać liczby, tekst, listy liczb i tekstów itd. Słowo zmienna odnosi sie˛ w programowaniu do miejsca, w którym przechowywane sa˛ informacje. Adrian Karpowicz Programowanie w Pythonie Python-podstawy Zadanie Ziema w ciagu ˛ roku obiega Słońce po niemal kolistej orbicie. Odległość miedzy tymi ciałami niebieskimi wynosi około 150 mln km. Promień Słońca jest równy około 700 tys. km. Oblicz, ile kilometrów przebyła Ziemia w czasie Twojego dotychczasowego życia. Należy utworzyć zmienna˛ dni, która bedzie ˛ przechowywała liczbe˛ dni twojego dotychczasowego życia oraz zmienna˛ droga, która bedzie ˛ obliczała droge˛ ziemi w czasie twojego życia. Sprawdź również jaka˛ droge˛ przebiegnie ziemia, gdy bedziesz ˛ dwa razy starszy (nie przepisuj ponownie zmiennych, zmienna˛ wiek zmień za pomoca˛ odpowiedniej równości a zmienna˛ droga skopiuj). Adrian Karpowicz Programowanie w Pythonie Python-podstawy Zadanie domowe Przeczytaj rozdział 1 i 2. Zapisać w Pythonie rozwiazanie ˛ zadania z monetami z rodziału 2 na dwa sposoby (bez użycia zmiennych i z użyciem zmiennych). Adrian Karpowicz Programowanie w Pythonie Python-podstawy Łańcuchem nazywa sie˛ zwykły tekst. W Pythonie tworzymy łańcuch umieszczajac ˛ go w cudzysłowie np. ”Hello World” lub w apostrofach np. ’Hello world’. Aby użyć w łańcuchu wiecej ˛ niż jednego wiersza używamy potrójnego apostrofu np. ”’ Teraz jestem w pierwszym wierszu i już jestem w drugim wierszu”’ Zadanie a) Utwórz zmienna˛ o nazwie poczatek ˛ zawierajac ˛ a˛ łańcuch: 3, 2, 1, start. Wyświetl zawartość tej zmiennej (print(poczatek)). ˛ b) Utwórz zmienna˛ zawierajac ˛ a˛ łańcuch w dwóch wierszach. Wyświetl ta˛ zmienna˛ Adrian Karpowicz Programowanie w Pythonie Python-podstawy Jeśli chcemy wyświetlić komunikat, używajac ˛ zawartości zmiennej, wartości w łańcuchu można osadzić za pomoca˛ symbolu %s. Zadanie Sprawdź jak wyglada ˛ osadzanie wartości w łańcuchu za pomoca˛ dwóch poniższych przykładów. >>> wynik = 100 >>> info = ’Twój wynik wynosi %s’ >>> print(info % wynik) oraz >>> info = ’Wynik pierwszego gracza %s. Wynik drugiego gracza %s. ’ >>> print(info % (100, 105)) Adrian Karpowicz Programowanie w Pythonie Python-podstawy Łańcuchy możemy mnożyć przez liczby naturalne np. jeśli łańcuch = ’ab’ to 3*łańcuch wynosi ’ababab’. Zadanie Utwórz zmienne z wynikiem gracza 1 oraz z gracza 2. Zdefiniuj łańcuch spacja (zawierajacy ˛ spacje). Zdefiniuj jedna˛ zmienna˛ wyniki wyświetlajac ˛ a˛ wynik gracza 1 i gracza 2. Wyniki gracza 1 i 2 maja˛ być wyświetlone wierszach pod soba˛ i maja˛ sie˛ zaczynać 10 spacji od lewego marginesu. Adrian Karpowicz Programowanie w Pythonie Python-podstawy W programie Python mamy możliwość tworzenia list np. zakupy = [’mleko’, ’chleb’, ’cukier’, ’sól’] Numery listy zaczynaja˛ sie˛ od 0. Jeśli chcemy wyświetlić np. pierwszy element listy musimy wpisać: print(zakupy[0]) [m:n] wyświetla elementy z podanego zakresu, ale bez ostatniego np. aby wyświetlić element 2 i 3 należy wpisać print(zakupy[1:3]) Zadanie Utwórz piecioelementow ˛ a˛ liste˛ zakupów. Wyświetl cała˛ liste, ˛ tylko trzeci element listy, wszystkie elementy bez pierwszego i ostatniego. Adrian Karpowicz Programowanie w Pythonie Python-podstawy Kolejne elementy do list dodajemy za pomoca˛ funkcji append: nazwa_listy.append(element_dodawany) np. jeśli chce˛ dodać do listy zakupów masło to wpisuje: ˛ zakupy.append(’masło’) Do usuwania elementów z listy używa sie˛ polecena del np. jeśli chce˛ usunać ˛ drugi element z mojej listy: del zakupy[1] Zadanie Dodaj dwa produkty do swojej listy oraz usuń pierwszy i trzeci element z listy. Adrian Karpowicz Programowanie w Pythonie Python-podstawy Zadanie Utwórz lista1=[1,3,5], lista2=[2,4,6], lista3 = lista1 + lista2 i lista4 = 3*lista1. Wyświetl te listy. Krotka (ang. tuple) przypomina liste, ˛ która używa nawiasów okragłych ˛ np. liczbyFib=(1,1,2,3,5) Zasadnicza różnica pomiedzy ˛ krotka˛ a lista˛ jest taka, że krotki po jej zdefiniowaniu nie można modyfikować. Adrian Karpowicz Programowanie w Pythonie Python-podstawy Każdy element na mapie (inaczej słownik) ma klucz i wartość. Definujemy mape˛ w nastepuj ˛ acy ˛ sposób: mapa ={ klucz1 : wartość1, klucz2 : wartość2, ... } Na przykład: Wyniki ={ ’Gracz 1’ : 100, ’Gracz 2’ : 105 } Możemy wyświetlać wartość przy pomocy klucza np. print(Wyniki[’Gracz 2’]) Dodawać nowy element do mapy np. Wyniki[’Gracz 3’] = 95 Usuwać element z mapy np. del Wyniki[’Gracz 2’] Adrian Karpowicz Programowanie w Pythonie Python-podstawy Zadanie Utwórz 3 zmienne z wynikami: wynik1, wynik2 i wynik3. Utwórz mape˛ Wyniki, która jako klucze bedzie ˛ miała nazwy Gracz 1, ... a jako wartości ich wyniki. a) Wyświetl cała˛ mape. ˛ b) Wyświetl wynik Gracza 2. c) Utwórz nowa˛ zmienna˛ wynik4 i dodaj Gracza 4 do mapy Wyniki. Wyświetl mape. ˛ d) Usuń Gracza 2 z mapy Wyniki. Wyświetl mape. ˛ Zadanie domowe Przeczytać rozdział 3. Rozwiazać ˛ zadanie 1, 2 i 3 ze strony 41 i 42. Adrian Karpowicz Programowanie w Pythonie Python-grafika żółwia Moduły w Pythonie to sposób na takie zorganizowanie przydatnego kodu, aby mógł być użyty przez inny program. Moduł turtle to sposób na programowanie grafiki wektorowej. Do importotowania modułów służy komenda import. >>> import turtle Jeśli chcemy skorzystać z jakiś funkcji modułu to najpierw musimy ten moduł zaimportować. Po zaimportowaniu modułu turtle tworzymy płótno na którym bedziemy ˛ rysować za pomoca˛ polecenia: >>> t = turtle.Pen() Pen jest funkcja˛ z modułu turtle. Adrian Karpowicz Programowanie w Pythonie Python-grafika żółwia Podstawowe polecena: t.forward(n) – rysuje odcinek o długości n pikseli, t.backward(n) – cofa żółwia o n pikseli, t.left(k) – skreca ˛ w lewo o kat ˛ k◦ , t.right(k) – skreca ˛ w prawo o kat ˛ k◦ , t.reset() – czyści płótno, a żółw wraca na poczatkow ˛ a˛ pozycje, t.clear() – czyści płótno, a żółw pozostaje na obecnej pozycji. t.up() – odrywa pióro od płótna i przestaje rysować, t.down() – opuszcza pióro i zaczyna rysować, Wiecej na temat modułów oraz modułu turtle bedzie ˛ omawiane w dalszej cz˛eści zajeć. ˛ Adrian Karpowicz Programowanie w Pythonie Python-grafika żółwia Zadanie Narysuj równoramienny trójkat ˛ prostokatny ˛ a wewnatrz tego trójkata romb, który nie jest kwadratem (najpierw zaimportuj moduł turtle i utwórz płótno). Zadanie domowe Przeczytać rozdział 4. Rozwiazać ˛ zadania ze strony 51. Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Instrukcja if składa sie˛ ze słowa kluczowego if, po którym podajemy warunek oraz dwukropek (:). Wiersze po dwukropku musza˛ znajdować sie˛ w bloku, jeśli warunek jest spełniony to instrukcje z bloku zostana˛ wykonane. if warunek: blok instrukcji Zadanie Napisać program w którym definiuje sie˛ zmienna˛ Liczba_zyc = 3. Nastepnie ˛ jeśli zmienna jest wieksza ˛ od 0 to sie˛ od niej odejmuje 1 i wyświetla sie˛ jej wartość. Adrian Karpowicz Programowanie w Pythonie Python-instrukcje W Pythone odstep ˛ od lewego marginesu jest bardzo ważny. Kod znajdujacy ˛ sie˛ w tej samej odległości od lewego marginesu tworzy blok i za każdym razem, rozpoczynamy wiersz z wieksz ˛ a˛ liczba˛ spacji niż poprzedni, tworzymy nowy blok, bed ˛ acy ˛ cz˛eścia˛ poprzednego bloku. Symbole używane w instrukcjach == – równa sie˛ != – różny od >= – wiekszy ˛ lub równy <= – mniejszy lub równy > – wiekszy ˛ < – mniejszy Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Instrukcja if–then–else if warunek: blok instrukcji, gdy warunek prawdziwy else: blok instrukcji, gdy warunek fałszywy Zadanie Napisać program w którym definiuje sie˛ zmienna˛ Liczba_zyc = 3. Nastepnie ˛ jeśli zmienna jest wieksza ˛ od 0 to sie˛ od niej odejmuje 1 i wyświetla sie˛ jej wartość w przeciwnym razie wyświetla sie˛ komunikat Koniec gry. Skopiuj i zastosuj instrukcje kilka razy. Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Instrukcja if i elif if warunek1: blok instrukcji, gdy warunek1 prawdziwy elif warunek2: blok instrukcji, gdy warunek2 prawdziwy elif warunek3: blok instrukcji, gdy warunek3 prawdziwy ... else: blok instrukcji, gdy żaden z powyższych warunków nie jest spełniony Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Zadanie Zdefiniuj zmienna˛ kolor zawierajac ˛ a˛ łańcuch czerwony. Napisz instrukcje, która jeśli zmienna kolor zawiera czerwony to zmienia kolor na zielony i go wyświetla, jeśli kolor niebieski to zmienia na zielony i wyświetla, w przeciwnym razie zmienia kolor na niebieski i wyświetla. Wykonaj kilka razy te˛ instrukcje. Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Warunki można łaczyć ˛ za pomoca˛ słówkluczowych and (i) oraz or (lub). Zadanie Napisać program w którym definiuje sie˛ zmienna˛ monety oraz instrukcje, która wyświetla komunikat całkiem nieźle, jeśli 100 ≤monety≤ 200. Uruchom program dla kilku wartości monety. Zadanie Napisać program w który definiuje sie˛ zmienna˛ x oraz instrukcje, która bedzie ˛ wyświetlała komunikat x nie jest cyfra, ˛ jeśli zmienna x nie bedzie ˛ cyfra. ˛ Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Zmiennej można przypisać wartość pusta˛ None. None nie jest tożsama z wartościa˛ 0, ponieważ oznacza brak wartości, a nie liczbe˛ o wartości 0. Stosujemy ja˛ gdy chcemy zresetować jakaś ˛ zmienna˛ lub zdefiniować zmienna˛ bez ustalana jej wartości (wiemy, że zmienna bedzie ˛ potrzebna później w programie, ale chcemy już na poczatku ˛ zdefiniować wszystkie zmienne). Jeśli x jest łańcuchem zawierajacym ˛ liczbe˛ całkowita˛ np. x=’100’. To aby przekształcić łańcuch na liczbe˛ całkowita˛ używamy funkcji int np int(x). Jeśli x jest łańcuchem zawierajacym ˛ liczbe˛ wymierna˛ to aby dokonać konwersji używamy funkcji float. Jeśli chcemy liczbe˛ na łańcuch to używamy funkcji str. Adrian Karpowicz Programowanie w Pythonie Python-instrukcje Zadanie Zdefiniuj zmienna˛ wiek jako łańcuch zawierajacy ˛ twój wiek (zapisany cyframi). Wymyśl instrukcje, która w warunku bedzie ˛ zawierała twój wiek, ale użyty jako liczbe. ˛ Zadanie domowe Przeczytać rozdział 5 i wykonać zadania ze strony 65. Adrian Karpowicz Programowanie w Pythonie Python Zadanie domowe Przeczytać rozdział 6, 7 i 8 i wykonać zadania znajdujace ˛ sie˛ na końcu rozdziałów. Adrian Karpowicz Programowanie w Pythonie Python-wprowadzanie danych imie = raw_input("Podaj swoje imie˛ ") print("Witaj ", imie, ", widz˛e, że nieźle Ci idzie!") Funkcja raw_input zwraca łańcuch. Funkcja input zwraca liczbe. ˛ Przykład programu obliczajacego ˛ sume˛ dwóch liczb: x=input("Podaj pierwsza˛ liczbe") ˛ y=input("Podaj druga˛ liczbe") ˛ print(”Suma liczb", x, "i", y, "wynosi: ",x+y) Zadanie Napisać program, który wczyta od użytkownika pewien napis, a nastepnie ˛ wyświetli 30 kopii tego napisu, każda w osobnej linii. Zadanie Napisać program, który po wprowadzeniu długości podstawy i wysokości trójkata, ˛ obliczy jego pole. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ for (”dla każdego x z przedziału...”) lista=[’a’, ’b’, ’c’] for i in lista: print(i) Działanie instrukcji: dla każdej i, przyjmujacego ˛ kolejne wartości z listy lista, wykonaj instrukcje˛ print. Do tworzenia sekwencji, których elementy należa˛ do ciagu ˛ arytmetycznego, używamy funkcji range: range(n) tworzy [0, 1, 2, ..., n-1] range(m,n) tworzy [m, m+1, ..., n-1] range(m,n,k) – tworzy liste˛ o kroku k np. range(1,10,2) tworzy [1, 3, 5, 7, 9] . k może być też ujemne wtedy m>n np. range(3,0,-1) tworzy [3, 2, 1]. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Zadanie Napisać program, który wypisze: a) kwadraty wszystkich liczb całkowitych od 0 do 20, b) sześciany wszystkich liczb całkowitych od 10 dp 20, c) odwrotności wszystkich parzystych liczb całkowitych od 16 do 6 (w podanej kolejności). Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Celem petli ˛ cz˛esto jest wyświetlenie kolumny liczb. Aby liczby wyświetlane były w należyty sposób i w pożadanym ˛ miejscu używamy operatora formatowania % w połaczeniu ˛ z ciagiem ˛ formatujacym. ˛ Ciag ˛ formatujacy ˛ składa sie˛ ze znaku %, po którym nastepuj ˛ a˛ opcje formatowania, ilość znaków przeznaczonych do wyświetlenia oraz typ danej do wyświetlenia (przy czym tylko trzeci element – tj. typ danych jest wymagany). Typ danej sygnalizujemy pojedyncza˛ litera. ˛ I tak: s – oznacza napis i – oznacza liczbe˛ całkowita˛ (w systemie dziesietnym) ˛ f – oznacza liczbe˛ zmiennoprzecinkowa˛ w postaci ułamka dziesietnego ˛ e – oznacza liczbe˛ zmiennoprzecinkowa˛ w postaci wykładniczej Na przykład print("%e" % 123.4) Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Aby przekonać sie˛ na czym polega zaleta formatowania, wyświetlmy tabele˛ kwadratów i sześcianów wybranych liczb: for x in range(5,100,10): print(x,x**2,x**3) Jak widać kolumny liczb wyświetlane sa˛ nierówno. Spróbujmy ustalić w formacie długość pola do wyświetlenia każdej liczby na 4, jej kwadratu na 6, a sześcianu na 8: for x in range(5,100,10): print("%4i%6i%8i" % (x,x**2,x**3)) Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Formatujac ˛ liczby zmiennopozycyjne możemy także ustalić nie tylko całkowita˛ długość, ale także liczbe˛ wyświetlanych miejsc po przecinku (np. na 3): for x in range(5,100,10): print(”Pierwiastkiem liczby %2i jest %5.3f” % (x,x**0.5)) Zadanie Napisać program, który bedzie ˛ wypisywał cyfre jednostek, dziesiatek ˛ i setek liczby z zakresu od 0 do 999. Liczbe˛ ma wprowadzać użytkownik programu. Wyniki i napisy należy rozmieścić w odpowiednich kolumnach. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Zadanie Napisać program, który po wprowadzeniu przez użytkownika dwóch liczb całkowitych z zakresu od 0 do 100 bedzie ˛ wyświetlał ich średnia˛ kwadratowa, ˛ arytmetyczna, ˛ geometryczna˛ i harmoniczna. ˛ Każda średnia ma być wyświetlona w osobnym wierszu wraz z jej nazwa˛ oraz z jakich liczb była liczona. Dokładność wyników należy ustawić na dwa miejsca po przecinku. Wyniki i napisy należy rozmieścić w odpowiednich kolumnach. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Funkcja len podaje długość listy, łańcucha. Możemy jej użyć w petli, ˛ gdy nie znami długości listy. Zadanie Określ jaki jest wynik działania programu: a = [’Ala’, ’Ela’, ’Adam’, ’Janek’] for i in range(len(a)): print(i, a[i]) Uwaga: Zwróć uwage˛ na użycie funkcji len. Zadanie Zmodyfikuj powyższy program w ten sposób, aby wyświetlał imiona z listy a oraz z ilu liter sie˛ składaja. ˛ Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ P˛etle moga˛ zawierać inne petle ˛ – mówimy wtedy o nich, że sa˛ zagnieżdżone. Zadanie Wyjaśnić jak działa nastepuj ˛ acy ˛ program: l1=[’a’, ’b’, ’c’] l2=[’d’, ’e’] for x in l1: for y in l2: print(x, y) print(y, x) Uwaga: Zwróć uwage˛ w jaki sposób tworzymi bloki w petli ˛ zagnieżdżonej. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ P˛etla while (”dopóki”) a=1 while a<10: a=a+1 print(a) else: print("koniec") Else wykona sie˛ niezależnie od tego czy while było wykonane choć raz. Zadanie Napisać program, którego wynik działania bedzie ˛ identyczny jak powyższego programu, ale kod programu nie bedzie ˛ zawierał polecenia else. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Zmiania przebiegu petli ˛ Polecenie break przydaje sie˛ kiedy chcemy natychmiast przerwać wykonywanie petli. ˛ Zadanie Ustalić jaki jest wynik działania programu: for i in range(100): if i==50: break print(i) Uwaga Należy zwrócić uwage˛ na sposób tworzenia bloków. Adrian Karpowicz Programowanie w Pythonie Python-petle ˛ Polecenie continue działa analogicznie jak break, tylko że petla ˛ nie jest przerywania, a jedynie pomijany jest kod po ”continue” i petla ˛ dalej kontynuuje działanie. Zadanie Ustalić jaki jest wynik działania programu: x=[2,-1,3,-2,9] for i in x: if i<0: continue print(i**0.5) Zadanie a)Używajac ˛ m.in. polecen: range, continue i % napisz program wyznaczajacy ˛ kwadraty wszystkich liczb naturalnych od 0 do 100 niepodzielnych przez 6. b) Używajac ˛ m.in. polecen: range, continue, % oraz not napisz program wyznaczajacy ˛ kwadraty wszystkich liczb naturalnych od 1 do 1000 podzielnych przez 25. Adrian Karpowicz Programowanie w Pythonie Python-funkcje Definicja funkcji musi zawierać: 1) nagłówek funkcji obejmujacy ˛ a) nazwe˛ funkcji, która pozwoli zidentyfikować funkcje˛ w pozostałej cz˛eści programu b) liste˛ argumentów, która funkcja otrzymuje na poczatku ˛ działania programu 2) ciało funkcji, zawierajace ˛ instrukcje, które zostana˛ wykonane w momencie wywołania (użycia) funkcji a) jeżeli funkcja ma zwracać jakiś rezultat, musi zawierać odpowiednia˛ instrukcje˛ W jezyku ˛ Python składnia definicji funkcji jest nastepuj ˛ aca: ˛ def nazwa_funkcji ( lista_parametrów): instrukcje_do_wykonania Adrian Karpowicz Programowanie w Pythonie Python-funkcje Zadanie Zdefiniuj funkcje: ˛ def pierw(n): return n**0.5 √ oraz za jej pomoca˛ oblicz 2. Zdefiniowana˛ uprzednio funkcje˛ możemy w dowolnym miejscu usunać, ˛ posługujac ˛ sie˛ instrukcja˛ del np. del pierw Zadanie Co oblicza poniższa funkcja: def pierw(n): if n>=0: return n**0.5 else: return (-n)**0.5*1j Przetestuj jej działanie. Jakie liczby powinno sie˛ użyć przy testowaniu powyższej funkcji. Adrian Karpowicz Programowanie w Pythonie Python-funkcje Funkcja może przyjmować wiecej ˛ niż jeden argument i zwracać wiecej ˛ niż jeden rezultat. Zadanie Napisać funkcje, ˛ która bedzie ˛ liczyła sume˛ odwrotności dwóch liczb. W przypadku, gdy co najmniej jedna z liczb jest zerem ma sie˛ pojawiać stosowny komunikat. Zadanie Przetestować działenie funkcji: def rs(a,b): return a+b,a-b Uwaga: Jak widać, rezultat wywołania funkcji, która zwraca wiecej ˛ niż jedna˛ wartość, jest krotka. ˛ Możemy to wykorzystać w iteracji: for n in rs(3,4): print n Lub skonwertować wynik na liste: ˛ list(rs(2,7)) Adrian Karpowicz Programowanie w Pythonie Python-funkcje Jeżeli wartości, które maja˛ zostać przekazane jako argumenty funkcji zawarte sa˛ w sekwencji, np.: l=[2,3] nie da sie˛ bezpośrednio przekazać takiej sekwencji jako listy argumentów (gdyż traktowana jest ona jako pojedynczy argument): Sprawdź rezultat polecenia print(rs(l)). Aby dało sie˛ ”rozpakować” elementy sekwencji używamy gwiazdki. Sprawdź rezultat polecenia print(rs(*l)). Adrian Karpowicz Programowanie w Pythonie Python-funkcje Jeżeli w momencie definiowania funkcji nie jesteśmy w stanie określić liczby argumentów, które bed ˛ a˛ do niej przekazywane, poprzedzamy nazwe˛ parametru formalnego oznaczajacego ˛ wszystkie pozostałe argumenty funkcji gwiazdka: ˛ def suma(*arg): s=0 for x in arg: s=s+x return s Zadanie a) Przetestuj działanie powyższej funkcji. b) Sprawdź działanie polecenia print(suma(range(10))). Dlaczego nie jest ono poprawne i co zrobić, aby zadziałało? Adrian Karpowicz Programowanie w Pythonie Python-funkcje Funkcje rekurencyjne to funkcje, które odwołuja˛ sie˛ do samych siebie. Dobrym przykładem funkcji rekurencyjnej jest silnia: def silnia(n): if n>1: return n*silnia(n-1) else: return 1 Zadanie Przetestuj działanie funkcji silnia dla kilku argumentów. Adrian Karpowicz Programowanie w Pythonie Python-funkcje Moduły służa˛ do organizowania funkcji, zmiennych i innych elementów kodu w wieksze ˛ programy. Niektóre moduły sa˛ wbudowane w Pythona, inne trzeba pobrać. Jeśli chcemy użyć jakiegość modułu musimy go zaimportować za pomoca˛ polecenia: import nazwa_modułu Aby użyć jakiejś funkcji z modułu robimy to za pomoca˛ polecenia: nazwa_modułu.nazwa_obiektu.nazwa_funkcji Adrian Karpowicz Programowanie w Pythonie Python-moduły Na przykład w module sys (zawierajacym ˛ programy narz˛edziowe służace ˛ do komunikacji z systemem Pythona) znajduje sie˛ obiekt stdin (standardowe wejście), który udostepnia ˛ funkcje˛ readline (służac ˛ a˛ do wpisywania tekstu z klawiatury aż do wciśniecia ˛ ENTER). Przykład użycia tej funkcji: import sys print(sys.stdin.readline()) Adrian Karpowicz Programowanie w Pythonie Python-moduły Przykład programu obliczajacego ˛ pole kwadratu z wykorzystaniem funkcji readline. Zwróć uwage˛ w jaki sposób za pomoca˛ int zapisano długość kwadratu jako liczbe. ˛ import sys print("Podaj długosć boku kwadratu i wciśnij enter") a=int(sys.stdin.readline()) print("Pole kwadratu o boku", a, "wynosi", a**2) Zadanie Przetestować działenie tego programu. Znaleźć przynajmniej dwa różne przypadki w których program nie działa poprawnie. Zmodyfikować program, aby działał również poprawnie w tych znalezionych przypadkach. Adrian Karpowicz Programowanie w Pythonie Python-NWD Zadanie W oparciu o poniższy schemat blokowy napisz program wyznaczajacy ˛ NWD dwóch liczb. Do wczytania liczb należy użyć modułu sys. Adrian Karpowicz Programowanie w Pythonie Python-NWD Zadanie W oparciu o poprzednie zadanie napisz program wyznaczajacy ˛ NWD oraz NWW dwóch liczb a i b. W programie cz˛eść obliczajaca ˛ NWD ma być zdefiniowana jako funkcja. Wynik ma być podany w postaci: NWD liczb a i b wynosi: NWW liczb a i b wynosi: gdzie w miejescu a i b bed ˛ a˛ sie˛ pojawiać wprowadzone liczby. Adrian Karpowicz Programowanie w Pythonie Python-wczytywanie listy Zanim przejdziemy do algorytmu sortujacego ˛ liste˛ musimy zajać ˛ sie˛ wczytywaniem listy oraz znajdowaniem jej elementu najmniejszego i najwiekszego. ˛ Zadanie Uzupełnij poniższy program w ten sposób, aby wczytywał liste˛ składajac ˛ a˛ sie˛ z liczb zmiennoprzecinkowych za pomoca˛ funkcji readline. A nastepnie ˛ wyświetlał cała˛ liste, ˛ jej najmniejszy i najwiekszy ˛ element. Odpowiednie bloki w kodzie programu (odległość od lewego marginesu) należy ustawić samodzielnie. Do wyznaczenia elementu najmniejszego i najwiekszego ˛ należy użyć funkcji min i max. Zwróć uwage, ˛ że na poczatku ˛ trzeba zdefiniować pusta˛ tablice. W jaki sposób to zostało zrobione? Adrian Karpowicz Programowanie w Pythonie Python-wczytywanie listy import ...... a=[] print("Ile elementów bedzie ˛ miała lista?") n=int(......) def czytaj(): for i in ...... print("Podaj",.......,”element listy") .......(float(sys.stdin.readline())) return a print(”Lista: ", ........) print(”Najmniejszy element listy: ", min(a)) print(..........) Adrian Karpowicz Programowanie w Pythonie Python-wczytywanie listy Zadanie a) Dodaj do poprzedniego programu funkcje zamiana, która bedzie ˛ zamienała dowolne dwa elementy listy. def zamiana(a,k,l): t=...... ....... ....... return a b) Za pomoca˛ dodanej funkcji wyświetl liste˛ w której pierwszy element bedzie ˛ zamieniony z ostatnim. Adrian Karpowicz Programowanie w Pythonie Python-algorytmy sortowania Sortowanie przez wybór ciagu ˛ n liczb polega na wyszukanu w ciagu ˛ liczby najwiekszej ˛ (lub najmniejszej - w zależności od przyjetego ˛ porzadku), ˛ ustawieniu jej na poczatku ˛ ciagu, ˛ a nastepnie ˛ powtarzaniu tych czynności z pominieciem ˛ już uporzadkowanych ˛ liczb. Adrian Karpowicz Programowanie w Pythonie Python-algorytmy sortowania Adrian Karpowicz Programowanie w Pythonie Python-algorytmy sortowania Zadanie: Uporzadkowanie ˛ rosnaco ˛ n liczb, stosujac ˛ algorytm sortowania przez wybór. Dane: Tablica liczb a[0,...,n-1]. Wynik: Tablica liczb a[0,...,n-1], w której liczby ułożone sa˛ w porzadku ˛ rosnacym. ˛ Podać algorytm rozwiazania ˛ powyższego zadania oraz na podstawie kodu z nastepniego ˛ slajdu wykonać jego implementacje w programie Python. Przetestować działanie programu. Adrian Karpowicz Programowanie w Pythonie Python-algorytmy sortowania def sortow(a,n): for i in range(n-1): minn=i ................ if a[j]<a[minn]: ................ zamiana(a,minn,i) return a Adrian Karpowicz Programowanie w Pythonie Python-funkcje losujace ˛ Liczby losowe możemy generować za pomoca˛ modułu random. Funkcja randint(m,n) służy do losowania liczb całkowitych z zakresu od m do n np. random.randint(10,20). Funkcja choice służy do losowania elementu z listy. Natomiast shuffle do tasowania elementów listy. Zadanie a) Uzupełnij poniższy program, aby służył on do zgadywania wylosowanej liczby naturalnej z zakresu od 1 do 128. b) Opisz najlepsza˛ strategie˛ zgadywania liczb w danym programie. Ile maksymalnie liczb trzeba podać, aby napewno znaleźć szukana˛ liczbe. ˛ c) Przetestować opracowania˛ strategie˛ z losowym zgadywaniem liczb (uwzgledniaj ˛ acym ˛ jedynie podpowiedź). Adrian Karpowicz Programowanie w Pythonie Python-funkcje losujace ˛ import random liczba=random.randint(1,128) print(”Zgadnij liczbe˛ naturalna˛ z zakresu od 1 do 128”) while True: strzał=input() i=int(strzał) if ...... print(”Zgadłe") ......... ........... print(”Szukana liczba jest wieksza”) ˛ ............ print(”Szukana liczba jest mniejsza") Adrian Karpowicz Programowanie w Pythonie Python-modelowanie Zadanie Używajac ˛ funkcji randint napisać program, który bedzie ˛ symulował rzut moneta. ˛ Liczbe˛ rzutów ma podawać użytkownik programu. Powyższe zadanie jest z zakresu modelowania komputerowego. W kolejnym zadaniu trzeba bedzie ˛ opracować troche˛ bardziej skomplikowany model. Adrian Karpowicz Programowanie w Pythonie Python-modelowanie Zadanie a) Załóżmy, że nagroda jest ukryta za jedna˛ z czterech bramek. Z tym, że szansa na to, że nagroda jest za bramka˛ 1 wynosi 1/8, bramka˛ 2 - 1/8, bramka˛ 3 - 1/4 oraz bramka˛ 4 - 1/2. Napisać program, który bedzie ˛ losował, w której bramce jest nagroda (z uwzglednieniem ˛ podanych prawdopodobieństw). Nastepnie ˛ bedziemy ˛ zgadywali w której bramce jest nagroda. Program ma informować, czy zgadliśmy, czy nie (jeśli nie to ma podawać, czy nagroda jest w bramce o numerze wiekszym, ˛ czy mniejszym) i wtedy kontynuujemy zgadywanie. b) Opracować najkorzystniejsza˛ strategie˛ wyboru bramiki. c) Przetestować swoja˛ strategie˛ oraz zgadywanie bramki w sposób losowy. Porównać wyniki. Adrian Karpowicz Programowanie w Pythonie Python-praca domowa Przeczytać rozdziały 9 i 10 oraz wykonać zadania umieszczone na koncu tych rozdziałów. Adrian Karpowicz Programowanie w Pythonie