Lekcja 9 - Nikola Horn
Zadanie domowe:
Stworzyć klasę Ksiazka, gdzie atrybutami będzie imię (str) i numer telefonu (int), a wyjściową informacją lista zawierająca imię i numer telefonu (chyba, że da się je dodać jakoś do słownika??).
Metody do tej klasy mogłyby modyfikować i usuwać wpisy?
Szyfr Cezara jako funkcja
ZNAKI = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"Ą",
"ą",
"Ć",
"ć",
"Ę",
"ę",
"Ł",
"ł",
"Ń",
"ń",
"Ó",
"ó",
"Ś",
"ś",
"Ź",
"ź",
"Ż",
"ż",
" ",
".",
"?",
"!",
)
def szyfrowanie(x: str, y:int) -> str:
zaszyfrowanytekst = ""
for i in x:
obecny_indeks = ZNAKI.index(i)
#dzięki temu wraca do początku
indekszaszyfrowany = (obecny_indeks + y) % len(ZNAKI)
zaszyfrowanytekst += ZNAKI[indekszaszyfrowany]
return(zaszyfrowanytekst)
# to będzie x - str
tekst = input("Podaj tekst do zaszyfrowania: ")
# to będzie y - int
klucz = int(input("Podaj klucz: "))
tekst_zaszyfrowany = szyfrowanie(tekst, klucz)
print(tekst_zaszyfrowany)
Gra RPG (tworzenie postaci) z klasami, metodami i funkcjami
class PostacGracza:
def __init__(self, imie: str, rasa: str, profesja: str, hp: int, mana: int) -> None:
self.imie = imie
self.rasa = rasa
self.profesja = profesja
self.hp = hp
self.mana = mana
def otrzymaj_obrazenia(self, ilosc_obrazen: int):
self.hp -= ilosc_obrazen
#można stworzyć postać używając klasy, albo używając osobnej funkcji:
def stworz_gracza():
imie = input("Podaj imie: ")
rasa = input("Podaj rase: ")
profesja = input("Podaj profesje: ")
hp = 100
mana = 100
return PostacGracza(imie, rasa, profesja, hp, mana)
gracz3 = stworz_gracza()
#dwa sposoby podawania parametrów, drugi sposób jest bezpieczniejszy:
gracz1 = PostacGracza("Nikorin", "elf", "łotrzyk", 100, 100)
gracz2 = PostacGracza(rasa="krasnolud", hp=100, mana=0, imie="Torin", profesja="wojownik")
#gracz3 = stworz_gracza()
print(f"Gracz {gracz1.imie} ma na początku {gracz1.hp} punktów HP")
gracz1.otrzymaj_obrazenia(15)
print(f"Gracz {gracz1.imie} ma teraz {gracz1.hp} punktów HP")
Różne funkcje
#sumowanie 3 liczb
def sumowanie3(x:int, y:int, z:int) -> int:
wynik = x+y+z
return wynik
wynik1 = sumowanie3(3, 4, 5)
print(wynik1)
#podniesienie do potegi 3
def potega3(x:int) -> int:
wynik = x*x*x
return wynik
wynik2 = potega3(7)
print(wynik2)
#max i min z listy/krotki
krotka = (5, 16, 34, 23, 242, 643, 6746)
def minmax(x: tuple[int]) -> tuple[int]:
minimum = min(x)
maximum = max(x)
print(f"Minimum: {minimum}")
print(f"Maximum: {maximum}")
return minimum, maximum
wynik3 = minmax(krotka)
print(wynik3)
Notatki z zajęć
Programowanie obiektowe
Można tworzyć własne funkcje, używając def
def nazwa_funkcji(parametry):
blok kodu
return zwracana_wartosc
Funkcje maksimum i minimum:
- max()
- min()
def kwadrat(x):
wynik = x*x
return wynik
wynik_funkcji = kwadrat(5)
print(wynik_funkcji)
Dobra praktyka: podajemy jakiego typu parametru oczekujemy na wejściu i wyjściu, np. int, str, list itp.!
def kwadrat(x: int) -> int:
wynik = x*x
return wynik
def print_z_gwiazdkami(x) -> None:
Klasy obiektów
Możemy tworzyć własne typy poprzez stworzenie jakiejś klasy obiektów. Tworzymy jakiś ogólny opis cech i rzeczy, które dany obiekt może robić.
klasa != obiekt
Klasa to jedynie szablon, na podstawie którego obiekt zostanie stworzony.
Wystarczy, że raz poprawnie stworzymy klasy, a użytkownicy dostaną jasny komunikat co do jej celu.
Do deklarowania klas - class; do klas można stworzyć metody
class Zamowienie:
def __init__ (self, stolik: int, potrawy: list) -> None
self - dotyczy tylko konkretnego obiektu, nie wszystkich obiektów danej klasy. Zazwyczaj dodaje się to do każdej metody w klasie.
init - to będzie działo się podczas tworzenia obiektu
nazwa klasy najlepiej w SnakeCase (każde słowo z dużej litery bez spacji)
class NazwaKlasy:
def __init__(self, parametry)
#tu przypisanie atrybutów, wywołanie funkcji startowych
def nasza_nazwa_metody(self, parametry dla metody)
#tu funkcje itp, co ta metoda ma robić
class Zamowienie:
def __init__ (self, stolik: int, potrawy: list) -> None:
#tutaj reszta rzeczy blabla
zam1 = Zamowienie(1, ["sałatka", "burito"])
print(zam1.potrawy)
Zamowienie - nazwa klasy; 1 - ilość stolików; ["sałatka", "burito"] - lista potraw
zam1.potrawy - zawiera same atrybuty klasy, czyli w tym wypadku listę potraw, którą można wydrukować