Funkcje

Funkcje

Do przygotowania przed zajęciami

* Python dla każdego. Podstawy programowania. – Michael Dawson – Helion **R** – Rozdział 5. Wprowadzenie. Koniec gry.

Cel i tematyka zajęć

Drugie laboratorium ma na celu utrwalenie wiadomości z trzeciego laboratorium oraz wprowadzenie następujących elementów:
* sekwencje zagnieżdżone,
* funkcje,
* projekt,

– Zadanie przypominające

* Napisz program wczytujący z klawiatury 10 liczb całkowitych, zapisujący je do listy, a następnie wyświetlający je na ekranie.
* Napisz program Kto jest twoim tatą, który umożliwia wpisanie imienia i nazwiska osoby płci męskiej i przedstawia imię i nazwisko jej ojca. Program rozbuduj tak aby umożliwiał znalezienie dziadka, przy czym nadal w programie mają się znajdować pary syn ojciec.

– Sekwencje zagnieżdżone

Podczas tworzenia oprogramowania niejednokrotnie będą potrzebowali Państwo zastosować sekwencje zagnieżdżone, proszę jednak pamiętać, że dobrą praktyką jest stosowanie nie więcej niż trzech poziomów zagnieżdżenia.

Przykłady sekwencji zagnieżdżonych:

scores = [(name0, score0), (name1, score1), (name2, score2)]

np.

scores = [("Alfred", 10), ("Janek", 5), ("Krystian", 15)]

Sekwencje zagnieżdżone możemy rozpakowywać jeżeli wiemy ile elementów zawiera sekwencja:


name, score = scores[1]

Dostęp do poszczególnych elementów sekwencji zagnieżdżonych


a_score = scores[2]

– Gra w skojarzenia

Struktury złożone można w sobie zagnieżdżać. Poniżej w programie występuje słownik skojarzeń.
Z każdym słowem w słowniku powiązana jest lista jego skojarzeń.
Użytkownik ma za zadanie podać swoje skojarzenia do podanego słowa.
Jeśli jego skojarzenia są podobne do tych zawartych w liście zdobywa punkt.


associations = {'zwierze': ['pies','kot','chomik'],
'owoc': ['jablko','gruszka','pomarańcza'],
'roslina': ['kaktus','storczyk','drzewo']
}
points = 0

for word in associations:
guess = input('Co ci sie kojarzy ze slowem {}? '.format(word))
if guess in associations[word]:
points += 1


print("Masz", points, "punkty")

Funkcje

Z czasem będziecie Państwo tworzyć coraz bardziej rozbudowane programy i tworzenie ich poprzez wpisywanie instrukcji pod instrukcjami w jednym ciągu spowoduje duże trudności ze zrozumieniem kodu i wyszukiwaniem w nim błędów. Z pomocą przychodzą nam w tedy funkcję.\\
Wykorzystanie funkcji wprowadza do programu pewien poziom abstrakcji.\\
Abstrakcja pozwala myśleć o ogólnym obrazie bez troszczenia się o szczegóły (używając funkcji programista nie martwi się jak jest ona zbudowana).\\
Funkcja stworzona przez programistę tak samo jak i te wbudowane powinny wykonywać dobrze jedno zadanie.\\
Funkcję tworzymy w następujący sposób:

def nazwaFunkcji():
"""opis funkcji"""
instrukcje wewnątrz funkcji

np.:


def instructions():
"""Wyświetl instrukcję gry."""
print(
"""
Witaj w największym intelektualnym wyzwaniu wszech czasów, jakim jest
gra 'Kółko i krzyżyk'. Będzie to ostateczna rozgrywka między Twoim
ludzkim mózgiem a moim krzemowym procesorem.

Swoje posunięcie wskażesz poprzez wprowadzenie liczby z zakresu 0 - 8.
Liczba ta odpowiada pozycji na planszy zgodnie z poniższym schematem:

0 | 1 | 2
---------
3 | 4 | 5
---------
6 | 7 | 8


Przygotuj się, Człowieku. Ostateczna batalia niebawem się rozpocznie. \n
"""
)

– Wywołanie funkcji

Funkcję wywołujemy poprzez podanie jej nazwy:


#main
instructions()

– Dokumentowanie funkcji

Do dokumentowania funkcji wykorzystujemy tzw. łańcuch dokumentujący – zapisujemy go zaraz po deklaracji funkcji:

def instructions():
"""Wyświetl instrukcję gry.""" #łańcuch dokumentujący

– Pobieranie wartości przez funkcję

Funkcje mogą pobierać wartości na których mają operować:

def display(message):
''' funkcja wyświetlająca wiadomość'''
print(message)

– Zwracanie wartości przez funkcję

Funkcje mogą również zwracać pewne wartości:


def give_me_five():
'''Funkcja zwracająca wartość'''
five = 5
return five

-Argumenty nazwane oraz domyślne wartości parametrów

Argumenty wykorzystujemy, aby przekazać do funkcji wartości.\\

Parametry pozycyjne


def birthday1(name, age):
print("Szczęśliwych urodzin,", name, "!", " Masz już", age, "lat.\n")
#wywolania
birthday1("Adaś", 3)
birthday1(3, "Adaś")
birthday1(name = "Adaś", age = 3)
birthday1(age = 3, name = "Adaś")

Parametry z wartościami domyślnymi


def birthday2(name = "Janusz", age = 5):
print("Szczęśliwych urodzin,", name, "!", " Masz już", age, "lat.\n")
birthday2()
birthday2(name = "Katarzyna")
birthday2(age = 12)
birthday2(name = "Katarzyna", age = 12)
birthday2("Katarzyna", 12)

– Zadania do samodzielnego wykonania na laboratorium

* Napisz funkcję SUMA wyznaczającą sumę dwóch zadanych liczb całkowitych. Napisz program wykorzystujący funkcję SUMA
* Napisz funkcję, która ma trzy parametry formalne a, b, c będące liczbami całkowitymi. Wartością funkcji jest jeden, jeśli zadane liczby są liczbami pitagorejskimi oraz zero w przeciwnym wypadku. Liczby pitagorejskie spełniają warunek: a*a+b*b=c*c.
* Napisz funkcję, która wyznacza n-tą (n jest liczba naturalną) potęgę zadanej liczby rzeczywistej x. Funkcja ma wykorzystywać iterację.

– Przykłady używane na laboratoriach

Przykłady pochodzą z książki
* Podstawową książką wykorzystywaną na laboratorium będzie: „Python dla każdego. Podstawy programowania Wydanie III”, autor Michael Dawson, Wydawnictwo Helion **(R)**

Zadanie domowe

**Wszystkie zadania domowe należy archiwizować ponieważ w dalszej części laboratoriów będziecie je Państwo rozbudowywać**
* Zobacz: https://www.youtube.com/watch?v=ybRVhUtdHs8
* Stwórz funkcję “menu” dla swojej gry umożliwiające co najmniej:
* wyświetlenie najlepszych wyników
* dodawanie wyników
* rozpoczęcie nowej gry
* Napisz funkcję postać, która realizuje tworzenie postaci
* Python dla każdego. Podstawy programowania. – Michael Dawson – Helion **R** – Rozdział 6.