Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Podobne dokumenty
Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Wstęp do programowania

Listy, krotki, słowniki, funkcje

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Język C++ zajęcia nr 2

Podstawy bioinformatyki 2017/18

Wykład 5: Klasy cz. 3

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Programowanie w języku Python. Grażyna Koba

Szablony funkcji i klas (templates)

Programowanie i projektowanie obiektowe

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Podstawy programowania w Pythonie

Podstawy programowania. Python wykład 6

Warsztaty dla nauczycieli

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania w Pythonie

Wstęp do programowania

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Programowanie obiektowe - zadania

Czym są właściwości. Poprawne projektowanie klas

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Python. Wprowadzenie. Jolanta Bachan

Rozdział 4 KLASY, OBIEKTY, METODY

Programowanie strukturalne i obiektowe. Funkcje

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Spis treści. Wprowadzenie

Programowanie obiektowe

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Projektowanie aplikacji internetowych laboratorium

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Zaawansowany kurs języka Python

Wstęp do informatyki- wykład 11 Funkcje

Lekcja 6: Pascal. Procedura i funkcja

Wstęp do informatyki- wykład 9 Funkcje

Kurs rozszerzony języka Python

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język Python (2) Język Python (2) 1/36

Python wstęp. Michał Bereta

Wstęp do programowania

Blockly Kodowanie pomoc.

Wykład 8: klasy cz. 4

7. Pętle for. Przykłady

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Programowanie i projektowanie obiektowe

Język C, tablice i funkcje (laboratorium)

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

1 Powtórzenie wiadomości

Paradygmaty programowania

Tworzenie listy polega na podaniu jej elementów oddzielonych przecinkiem w nawiasach kwadratowych:

Laboratorium kryptograficzne dla licealistów 4

Zapis algorytmów: schematy blokowe i pseudokod 1

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Systemy operacyjne. Laboratorium 8. Perl find

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wstęp do programowania

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Typy danych, cd. Łańcuchy znaków

Podstawy programowania: Python. Wprowadzenie. Jolanta Bachan

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Podstawy i języki programowania

Metody Metody, parametry, zwracanie wartości

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie komputerowe. Zajęcia 2

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

Ćwiczenie 3. Python 3: Python 3: Funkcje, moduły i operacje na plikach

Pytania dla języka Python

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Programowanie obiektowe

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

TEMAT : KLASY DZIEDZICZENIE

rozdział 4: ZMIENNE I INSTRUKCJE

Język Python. Język Python 1/35

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Rekurencja (rekursja)

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Laboratorium kryptograficzne dla licealistów 1

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Programowanie w Baltie klasa VII

lekcja 8a Gry komputerowe MasterMind

Informatyka I: Instrukcja 4.2

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Składowane procedury i funkcje

PHP: bloki kodu, tablice, obiekty i formularze

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Transkrypt:

Spis treści 1 Funkcje 1.1 Zadanie 1 1.2 Zadanie 2 1.3 Zadanie 3 1.4 Zadanie 4 1.5 Zadanie 5 1.6 Zadanie 6 1.7 Zadanie 7 Funkcje Przy programowaniu często zdarza się, że pewne czynności chcemy wykonywać wiele razy, warto wtedy zorganizować nasz kod w taki sposób, aby było w nim możliwie mało powtórzeń kodu. Jest to istotne w przypadku gdy chcemy wprowadzać zmiany, jeśli nawet drobna zmiana będzie wymagała identycznych poprawek w kilku miejscach to z dużym prawdopodobieństwem w jednym miejscu poprawki dokonamy a w innym nie i nasz kod będzie bardzo trudny w utrzymaniu. Kolejnym powodem dla którego warto dobrze zorganizować kod jest jego czytelność - w czasie pisania programu oczywiście jesteśmy w stanie posuwać projekt dalej nawet jeśli nie jest on zbyt czytelnie napisany, ale gdy z kodem zacznie pracować ktoś inny, albo sami wrócimy do niego po jakimś czasie odnalezienie się w źle zorganizowanym kodzie nie będzie proste. Python dostarcza trzech mechanizmów pozwalających organizować i wielokrotnie wykorzystywać fragmenty kodu - funkcje, dekoratory i klasy, czyli programowanie zorientowane obiektowo. W tym rozdziale zajmiemy się funkcjami. Poznaliśmy już sporo wbudowanych w Pythona funkcji takich jak abs(), all(), any(), dict(), tuple(), set(), sum(), min(), max(), enumerate(), range() czy xrange(), teraz zajmiemy się tworzeniem własnych funkcji. Funkcje tworzy się za pomocą słowa kluczowego def, po nim następuje nazwa funkcji, lista argumentów w nawiasie i dwukropek, a poniżej ciało funkcji będące zwykłymi instrukcjami Pythona poprzedzonymi pojedynczym wcięciem, na przykład funkcja wypisująca potęgę zadanej wartości może wyglądać następująco: def f(x): print x ** 2 i jej wywołanie: >>> f(10) 100

Lista argumentów może być pusta: print 'Ala' >>> f() Ala argumenty mogą mieć wartości domyślne i wtedy jeśli przy wywołaniu funkcji nie zostaną podane ich wartości to przyjmowane są wartości domyślne, obowiązuje jednak zasada, że na argumenty z wartościami domyślnymi występują na końcu listy argumentów w definicji funkcji: >>> def f(x, y = 'Ala'): print x, y >>> f('kot') kot Ala >>> f('kot', 'Basia') kot Basia >>> def f(x = 'kot', y): print x, y SyntaxError: non-default argument follows default argument Pracując z funkcjami mającymi argumenty z wartościami domyślnymi warto uświadomić sobie, że wartość domyślna jest tworzona nie przy każdym wywołaniu funkcji, ale w czasie definiowania funkcji i później ta wartość jest w miarę potrzeb wykorzystywana, jest to istotne w przypadku, gdy wartości domyślne są obiektami modyfikowalnymi: >>> def f(x, lista = []): lista.append(x) print lista >>> f(1) [1] >>> f(2) [1, 2] >>> f(3, []) [3] >>> f(4)

[1, 2, 4] W powyższym przykładnie w pamięci trzymana jest jedna domyślna lista i jest ona przypisywana na drugi argument jeśli nie został on podany w wywołaniu funkcji, ale ta lista jest modyfikowana przez funkcję, zatem, wbrew temu co wydaje się naturalne, jeśli nie podamy drugiego argumentu to nie koniecznie będzie on pustą listą. Należy również pamiętać, że argumenty do funkcji przekazywane są przez referencje a nie przez wartości (co jest ważne gdy pracujemy z obiektami modyfikowalnymi): >>> def f(x, lista): lista.append(x) >>> A = [] >>> f(1, A) >>> A [1] Przy wywołaniu funkcji jej argumenty można podawać pozycyjnie, czyli pierwsza wartość w wywołaniu jest podstawiana pod pierwszy argument z definicji, ale można także podawać argumenty po nazwach z definicji, zwiększa to czytelność kodu, pozwala nie dbać o kolejność argumentów i w przypadku, gdy mamy kilka argumentów z wartościami domyślnymi pozwala zastępować tylko wybrane z nich. Należy pamiętać, że po podaniu pierwszego argumentu przez nazwę wszystkie pozostałe muszą również być przekazane przez nazwę: >>> def f(x = 1, y = 2, z = 3): print 'pierwszy : ', x, ' drugi : ', y, ' trzeci : ', z >>> f() pierwszy : 1 drugi : 2 trzeci : 3 >>> f(4, 5, 6) pierwszy : 4 drugi : 5 trzeci : 6 >>> f(z = 4, x = 5, y = 6) pierwszy : 5 drugi : 6 trzeci : 4 >>> f(y = 9) pierwszy : 1 drugi : 9 trzeci : 3 >>> f(x = 1, 2) SyntaxError: non-keyword arg after keyword arg Można także zdefiniować funkcje przyjmujące dowolną liczbę argumentów - umieszczenie na liście argumentów w definicji nazwy poprzedzonej * (na przykład *args) sprawia, że wszystkie nadmiarowe argumenty przekazane pozycyjnie zostaną wpisane w krotkę args. Na liścia argumentów zmienna z * musi znajdować się po wszystkich argumentach, które muszą być przekazane i może występować tylko raz. Podobnie podając na liście argumentów zmienną poprzedzoną ** (na przykład **kwargs)

wszystkie nadmiarowe argumenty przekazane po nazwie zostaną umieszczone w słowniku kwargs, ta zmienna podobnie jak *args może wystąpić tylko raz i musi być ostatnią zmienną na liście argumentów: >>> def f(x = 1, *args): print 'pierwszy : ', x, 'pozostałe : ', args >>> f() pierwszy : 1 pozostałe : () >>> f(1) pierwszy : 1 pozostałe : () >>> f(1, 2) pierwszy : 1 pozostałe : (2,) >>> f(1, 2, 3) pierwszy : 1 pozostałe : (2, 3) >>> def f(x = 1, *args, **kwargs): >>> f() pierwszy : 1 pozostałe pozycyjne : () pozostałe po nazwie : {} >>> f(1) pierwszy : 1 pozostałe pozycyjne : () pozostałe po nazwie : {} >>> f(1, 2) pierwszy : 1 pozostałe pozycyjne : (2,) pozostałe po nazwie : {} >>> f(1, 2, 3) pierwszy : 1 pozostałe pozycyjne : (2, 3) pozostałe po nazwie : {} >>> f(1, 2, 3, Ala = 'kot') pierwszy : 1 pozostałe pozycyjne : (2, 3) pozostałe po nazwie : {'Ala': 'kot'} >>> f(1, 2, 3, Ala = 'kot', Basia = 'pies') pierwszy : 1 pozostałe pozycyjne : (2, 3) pozostałe po nazwie : {'Basia': 'pies', 'Ala': 'kot'} >>> def f(x = 1, *args, y, **kwargs): >>> def f(x = 1, *args, **kwargs, y): >>> def f(x = 1, *args, *args2):

>>> def f(x = 1, **kwargs, **kwargs2): >>> def f(x = 1, **kwargs, *args): Jak widać pierwszy argument w wywołaniu funkcji jest zawsze przekazywany na pierwszy argument z listy w definicji nawet jeśli posiada on wartość domyślną, niemożliwe jest również dwukrotne zdefiniowanie argumentu - pozycyjnie i przez nazwę: >>> def f(x): print x >>> f(, x = 1) Traceback (most recent call last): File "<pyshell#132>", line 1, in <module> f(, x = 1) TypeError: f() got multiple values for keyword argument 'x' Innym ciekawym zastosowaniem * jest rozpakowywanie sekwencji, a ** rozpakowywanie słowników, elementy sekwencji są podawane jako kolejne argumenty pozycyjne w wywołaniu funkcji, z kolei elementy słownika jako argumenty podawane przez nazwę: >>> def f(x, y, z): print 'x :', x, 'y :', y, 'z :', z >>> A = [1, 2, 3] >>> f(*a) x : 1 y : 2 z : 3 >>> B = {'x' : 1, 'y' : 2, 'z' : 3} >>> f(**b) x : 1 y : 2 z : 3

>>> A = (1, 2) >>> B = {'z' : 3} >>> f(*a, **B) x : 1 y : 2 z : 3 Funkcje mogą zwracać pewne wartości dzięki wykorzystaniu słowa kluczowego return po którym podawana jest wartość, którą funkcja ma zwrócić i następuje wyjście z funkcji. Funkcje, które nic nie zwracają (nie ma w nich polecenia return) zwracają wartość None. Wartości zwracane przez funkcje mogą być przypisane na zmienne. Polecenie return można również stosować bez parametru (wtedy zwracana jest wartość None) do kończenia wykonania funkcji: print 'funkcja bez return' >>> a = f() funkcja bez return >>> print a None print 'przed return' return 5 print 'po return' >>> a = f() przed return >>> a 5 print 'przed return' return print 'po return' >>> a = f() przed return >>> print a None Funkcje można traktować jak normalne zmienne, przekazywać je do innych funkcji, zwracać je przez return i definiować wewnątrz innych funkcji: >>> def potegowanie(n):

def f(x): return x ** n return f >>> dokwadratu = potegowanie(2) >>> doszescianu = potegowanie(3) >>> dokwadratu(5) 25 >>> doszescianu(5) 125 >>> def wykonajdwarazy(f): f() f() print 'Ala' >>> wykonajdwarazy(f) Ala Ala Funkcje można tworzyć także przy pomocy słowa kluczowego lambda po którym występuje liczba parametrów, dwukropek i wartość zwracana przez funkcję: >>> f = lambda x, y, z: x + y + z >>> f(1, 2, 3) 6 Python pozwala w prosty sposób pisać dokumentację do napisanych przez nas funkcji przez umieszczenie w pierwszej linii ciała funkcji napisu, którego pierwsza linia jest krótkim opisem funkcji, po niej następuje pusta linia i szczegółowy opis, na przykład: """Opis ogólny Opis szczegółowy """ pass >>> help(f) Help on function f in module main :

f() Opis ogólny Opis szczegółowy >>> print f. doc Opis ogólny Opis szczegółowy Zadanie 1 Napisz funkcje przyjmującą jako parametr napis i liczbę całkowitą i szyfrującą napis za pomocą szyfru Cezara z przesunięciem równym danej liczbie. Zadanie 2 Napisz funkcję przyjmującą jako parametr liczbę całkowitą x i zwracającą jej rozkład na czynniki w postaci listy [(p1,w1), (p2,w2),..., (pn, wn)] takiej, że x = p1 ** w1 + p2 ** w2 +... + pn ** wn Zadanie 3 Napisz funkcję zwracającą silnię zadanej jako parametr liczby całkowitej, zrób to przy pomocy pętli i rekurencji. Zadanie 4 Napisz funkcję zwracającą listę liczb pierwszych nie większych od zadanej liczby całkowitej. Zadanie 5 Napisz cztery różne funkcje sortujące daną listę przy pomocy następujących algorytmów: sortowanie przez wstawianie sortowanie przez wybór sortowanie bąbelkowe sortowanie metodą QuickSort Patrz np. http://eduinf.waw.pl/inf/alg/003_sort/index.php Następnie napisz osobną funkcję, która posłuży przetestowaniu prędkości powyższych algorytmów sortujących, przyjmującą jako parametr nazwę funkcji sortującej. Może się przydać funkcja time.time(), numpy.random.rand(wymiar), numpy.random.seed(ziarno). Zadanie 6 Pod adresem http://www.scientificstyleandformat.org/tools/ssf-citation-quick-guide.html można

znaleźć wskazówki odnośnie formułowania cytowania w bibliografii artykułów z czasopism naukowych. Napisz funkcję, która w postaci parametrów otrzyma potrzebne informacje i na ich podstawie sformułuje tekst gotowy do umieszczenia w bibliografii. Niektóre parametry (np. autor) powinny być obowiązkowe, niektóre (np. tom) mogą nie wystąpić. Funkcja powinna dawać odpowiednie informacje przy podaniu jej niewłaściwych parametrów, jak również potrafić zaakceptować niektóre parametry w dwóch formach, np. jednego autora w formie string "Kowalski A", a dwóch w formie krotki stringów ("Nowak J", "Kowalski B"). Zadanie 7 Napisz funkcję przyjmującą napis składający się ze znaków '(', ')', '[', ']', '{' i '}' i sprawdzający czy napis jest poprawnym wyrażeniem nawiasowym (na przykład: '(){[]{([])}}' jest poprawne, a '[{]}' nie jest) "Programowanie dla Fizyków Medycznych"