Funkcje cz. 2

Funkcje cz 2

Do przygotowania przed zajęciami

* Python dla każdego. Podstawy programowania. – Michael Dawson – Helion **R** – Rozdział 6. 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:
* funkcje cz 2,
* zasięg zmiennych,
* projekt,

– Zadanie przypominające

* Napisz funkcję RÓŻNICA wyznaczającą różnicę dwóch zadanych liczb całkowitych. Działanie funkcji sprawdź pisząc odpowiedni program.
* Napisz funkcję, która stwierdza, czy zadana jako parametr liczba całkowita kończy się swoim pierwiastkiem. Liczby kończące się swoim pierwiastkiem to np. 25, 625. Wartością funkcji ma być jeden, jeśli liczba spełnia warunek oraz zero w przeciwnym wypadku. Funkcja przyjmuje jako parametr liczby od 0 do 1000.
* **Podpowiedź 1**: Można użyć funkcji obliczającej pierwiastek ”sqrt” z modułu ”math”.
* **Podpowiedź 2**: Aby dokonać sprawdzenia można użyć operatora modulo ”%” albo operacji na łańcuchach znaków ”str.endswith(suffix)”.
* Napisz funkcję, która dla podanego słowa w języku polskim zwraca jego odpowiednik w języku angielskim. Odpowiednie pary słów przechowaj w zdefiniowanym wcześniej słowniku np. ”dictionary = {‘pies’: ‘dog’, ‘kot’: ‘cat’, ‘chomik’: ‘hamster’}”.

Funkcje

Zasięg zmiennych

Zmienne globalne

Zmienna globalna to każda zmienna, którą tworzymy w zakresie globalnym – czyli poza funkcjami.


def read_global():
print("Wartość zmiennej value odczytana wewnątrz zakresu lokalnego",
"\nfunkcji read_global() wynosi:", value)

# główna część programu
# value jest zmienną globalną, ponieważ jesteśmy teraz w zakresie globalnym
value = 10


read_global()

Zmienne lokalne

Każda zmienna stworzona wewnątrz funkcji to zmienna lokalna.


def local_value():
five = 5
print (five)

Przysłanianie zmiennych globalnych

Zmienne globalne możemy przysłaniać, realizujemy to w następujący sposób.


def shadow_global():
value = -10
print("Wartość zmiennej value odczytana wewnątrz zakresu lokalnego",
"\nfunkcji shadow_global() wynosi:", value)
# główna część programu
# value jest zmienną globalną, ponieważ jesteśmy teraz w zakresie globalnym
value = 10
print("W zakresie globalnym wartość zmiennej value została ustawiona na:", value, "\n")

Zmiana wartości zmiennych globalnych przez funkcję

Zmienne globalne można modyfikować z poziomu funkcji, takie działanie realizujemy w następujący sposób:


def change_global():
global value
value = -10
print("Wartość zmiennej value odczytana wewnątrz zakresu lokalnego",
"\nfunkcji change_global() wynosi:", value)


# główna część programu
# value jest zmienną globalną, ponieważ jesteśmy teraz w zakresie globalnym
value = 10
print("W zakresie globalnym wartość zmiennej value została ustawiona na:", value, "\n")

Podział na funkcje

Zapoznaj się z poniższym kodem implementującym poruszanie się w grze po mapie.


rooms = {
1 : { "name" : "Hall",
"east" : 2,
"south" : 3 },
2 : { "name" : "Bedroom",
"west" : 1,
"south" : 4 },
3 : { "name" : "Kitchen",
"north" : 1 },
4 : { "name" : "Bathroom",
"north" : 2 }
}

currentRoom = 1
print("Use command:")
print("> go [direction]")
print("> exit")
print("Command:")


while True:
print("You are in " + rooms[currentRoom]["name"])
move = input("> ").lower().split()
if move[0] == "go":
if move[1] in rooms[currentRoom]:
currentRoom = rooms[currentRoom][move[1]]
else:
print("You can't go that way!")
if move[0] == "exit":
print("You exit the game!")
break

* Jakiego typu jest wartość zmiennej ”move”?

Projekt

Projekt ma polegać na stworzeniu tekstowej gry konsolowej RPG (przykładem gry tekstowej, konsolowej RPG jest [[http://www.otchlan.pl/|Otchłań]]). Gra musi zawierać następujące elementy:
* menu,
* pomoc,
* co najmniej 3 poziomy,
* na każdym z poziomów ma być co najmniej 5 lokacji po co najmniej 2-3 zadania (przykładowe lokacje: rynek, las itp., przykładowe zadania w lokacji: pójść do lasu pokonać potwora i uwolnić porwaną osobę, wygrać partię w kółko i krzyżyk lub inną grę z przeciwnikiem, który będzie komputerem itp.)
* gra ma umożliwiać stworzenie postaci, wylosowanie wartości cech, zapis stanu gry.

Strona techniczna. W grze należy wykorzystać następujące elementy:
* struktury:
* listy,
* krotki,
* słowniki,
* zapis i odczyt z/do pliku,
* funkcje,
* pętle,
* obiekty,
* instrukcje warunkowe.

Należy zaimplementować [[http://usingpython.com/wp-content/uploads/roomPlan.png|mapę przejść]] np. w formie zagnieżdżonych struktur:

rooms = {
1 : { "name" : "Hall",
"east" : 2,
"south" : 3 },
2 : { "name" : "Bedroom",
"west" : 1,
"south" : 4 },
3 : { "name" : "Kitchen",
"north" : 1 },
4 : { "name" : "Bathroom",
"north" : 2 }
}

– Zadania do samodzielnego wykonania na laboratorium

* Napisz funkcję modyfikującą zmienną globalną poprzez przypisanie jej wartości o połowę mniejszej.
* Czy dobrą praktyką jest wykorzystywanie zmiennych globalnych, swoją odpowiedź uzasadnij.
* Zmodyfikuj program poruszania się po mapie dzieląc go na funkcje. Dodaj dodatkowe pomieszczenie ganek (Porch) i stwórz do niego odpowiednie przejścia. Spraw, aby wyjście ”exit” z programu było możliwe tylko będąc na ganku.

– 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ć**
* Napisz funkcję realizującą system walki. Do funkcji prześlij informacje odnośnie liczby punktów życia gracza i typie przeciwnika (funkcja ze słownika z przeciwnikami powinna pobrać informację o liczbie punktów życia przeciwnika). W funkcji naprzemian losowana jest wartość ciosu (0-20), które zadają sobie gracz i przeciwnik. Wylosowane wartości są odpowiednio odejmowane od liczby punktów życia gracza albo przeciwnika. Przegraną jest osoba, która straci swoje punkty życia. Funkcja powinna zwrócić informację, kto wygrał i liczbę punktów życia pozostałą zwycięzcy. Funkcja jako efekt uboczny powinna relacjonować stan walki.
* Python dla każdego. Podstawy programowania. – Michael Dawson – Helion **R** – Rozdział 7.