diff --git a/README.md b/README.md index ab6bda0..4a1b384 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # 2025_12_15_python -Oython dla nieprogramistów \ No newline at end of file +Python dla nieprogramistów \ No newline at end of file diff --git a/dzien_04/Readme.md b/dzien_04/Readme.md new file mode 100644 index 0000000..3f9622d --- /dev/null +++ b/dzien_04/Readme.md @@ -0,0 +1,7 @@ +Plan: +- kolejne moduły - Faker i przykład z pliku dzien_03 +- importowanie własnych funkcji z innych plików +(wysyłka maili na podstawie: https://github.com/thevickypedia/gmail-connector) +- zasieg zmiennych, mutable i immutable +- klasy +- pliki i operacje... rozpoznawanie po nagłówkach diff --git a/dzien_04/przyklady/bazowy_slownik_dla_df_faker.xlsx b/dzien_04/przyklady/bazowy_slownik_dla_df_faker.xlsx new file mode 100644 index 0000000..8d1a7c7 Binary files /dev/null and b/dzien_04/przyklady/bazowy_slownik_dla_df_faker.xlsx differ diff --git a/dzien_04/przyklady/fake_data.py b/dzien_04/przyklady/fake_data.py new file mode 100644 index 0000000..c7601dd --- /dev/null +++ b/dzien_04/przyklady/fake_data.py @@ -0,0 +1,72 @@ +# nothing +from faker import Faker +from random import randint, random, choice +import pandas as pd + +fake = Faker("pl_PL") +papiery = [ +"PKOGS", +"PKOSO", +"RENTIERFIZ", +"PZUAKORD", +"PKOGD", +"INVGLDFIZ", +"PKOASZEWZ", +"INVFIZ", +"IPOBENE3A", +"INVCEEFIZ", +] + +daty = [ + "2025-03-01", + "2025-03-02", + "2025-03-03", + "2025-03-04", + "2025-03-05", + "2025-03-06", + "2025-03-07", + "2025-05-08", + "2025-05-09", + "2025-05-10", + "2025-05-11", + "2025-05-12", + "2025-04-13", + "2025-04-14", + "2025-04-15", + +] + +osoby = [] +for _ in range(20): + osoby.append(fake.name()) + +elementy_dat = [] +elementy_inst = [] +elementy_osoba = [] +elementy_ilosc = [] +elementy_obrot = [] + +for _ in range(20000): + data = choice(daty) + instrument = choice(papiery) + osoba = choice(osoby) + ilosc = randint(100,2000) + obrot = ilosc * random()*1000 + elementy_dat.append(data) + elementy_inst.append(instrument) + elementy_osoba.append(osoba) + elementy_ilosc.append(ilosc) + elementy_obrot.append(obrot) + + + +bazowy_slownik_dla_df = { + "data": elementy_dat, + "osoba": elementy_osoba, + "instrument": elementy_inst, + "ilosc": elementy_ilosc, + "obrot": elementy_obrot, +} + +df = pd.DataFrame(bazowy_slownik_dla_df) +df.to_excel("bazowy_slownik_dla_df_faker.xlsx") \ No newline at end of file diff --git a/dzien_04/przyklady/klasa_osoba_01.py b/dzien_04/przyklady/klasa_osoba_01.py new file mode 100644 index 0000000..7de83b8 --- /dev/null +++ b/dzien_04/przyklady/klasa_osoba_01.py @@ -0,0 +1,13 @@ +class Osoba: + def __init__(self, name, age=30, sex="M"): + self.name = name + self.sex = sex + self.age = age + print(f"Start obiektu: {id(self)}") + +lista_osob = [] +for _ in range(10): + osoba = Osoba("Adam Jurkiewicz") + lista_osob.append(osoba) + +print(lista_osob) \ No newline at end of file diff --git a/dzien_04/przyklady/klasa_osoba_02.py b/dzien_04/przyklady/klasa_osoba_02.py new file mode 100644 index 0000000..2727b0a --- /dev/null +++ b/dzien_04/przyklady/klasa_osoba_02.py @@ -0,0 +1,27 @@ +from random import choice, randint + +class Osoba: + def __init__(self, name, age=30, sex="M"): + self.name = name + self.sex = sex + self.age = age + print(f"Start obiektu: {id(self)} - plec: {self.sex} wiek: {self.age}") + + def __del__(self): + print (f"Bye, bye: {id(self)}....") + + def __str__(self): + return f"Oto osoba - {self.name} " + +lista_osob = [] +for nr in range(10): + wiek = randint(20,50) + plec = choice(["M","K","X"]) + osoba = Osoba("Jurkiewicz", sex=plec, age=wiek) + lista_osob.append(osoba) + lista_osob.append(osoba) + +print(lista_osob) +print("----------------------") +for osoba in lista_osob: + print(osoba) \ No newline at end of file diff --git a/dzien_04/przyklady/klasa_osoba_03.py b/dzien_04/przyklady/klasa_osoba_03.py new file mode 100644 index 0000000..a71d543 --- /dev/null +++ b/dzien_04/przyklady/klasa_osoba_03.py @@ -0,0 +1,38 @@ +from random import choice, randint + +nazwiska = [ +"Sylwia Ciuruś", +"Marcelina Janc", +"Dorota Leśny", +"Hubert Beker", +"Albert Budzeń", +"Bruno Kargol", +"Olaf Juroszek", +] + +class Osoba: + def __init__(self, name="XXX", age=30, sex="M"): + self.name = name + self.sex = sex + self.age = age + print(f"Start obiektu: {id(self)} - plec: {self.sex} wiek: {self.age}") + + def __del__(self): + print (f"Bye, bye: {id(self)}....") + + def __str__(self): + return f"Oto osoba - {self.name} " + +lista_osob = [] +for nr in range(10): + wiek = randint(20,50) + plec = choice(["M","K","X"]) + nazwisko = choice(nazwiska) + osoba = Osoba(nazwisko, sex=plec, age=wiek) + lista_osob.append(osoba) + + +print(lista_osob) +print("----------------------") +for osoba in lista_osob: + print(osoba) \ No newline at end of file diff --git a/dzien_04/przyklady/klasa_osoba_04.py b/dzien_04/przyklady/klasa_osoba_04.py new file mode 100644 index 0000000..5c5de8e --- /dev/null +++ b/dzien_04/przyklady/klasa_osoba_04.py @@ -0,0 +1,58 @@ +from random import choice, randint + +nazwiska = [ +"Sylwia Ciuruś", +"Marcelina Janc", +"Dorota Leśny", +"Hubert Beker", +"Albert Budzeń", +"Bruno Kargol", +"Olaf Juroszek", +] + +class Osoba: + def __init__(self, name="XXX", age=30, sex="M"): + self.name = name + self.sex = sex + self.age = age + self.miesieczny_przychod = None + print(f"Start obiektu: {id(self)} - plec: {self.sex} wiek: {self.age}") + + def __del__(self): + print (f"Bye, bye: {id(self)}....") + + def __str__(self): + return f"Oto osoba - {self.name} " + + def roczne_dochody(self): + if self.miesieczny_przychod is None: + return -1 + return 12*self.miesieczny_przychod + + def miesieczny_przychod_wpisz(self,wartosc): + if self.miesieczny_przychod is None: + self.miesieczny_przychod = wartosc + print(f"Zmieniam na {wartosc}") + else: + print("POzostawiam stare") + + +lista_osob = [] +for nr in range(10): + wiek = randint(20,50) + plec = choice(["M","K","X"]) + nazwisko = choice(nazwiska) + osoba = Osoba(nazwisko, sex=plec, age=wiek) + lista_osob.append(osoba) + + +print(lista_osob) +print("----------------------") +for obiekt_osoby in lista_osob: + mc = randint(2000,5000) + print(obiekt_osoby) + print(f"Roczny dochód wynosi przed: {obiekt_osoby.roczne_dochody()}") + obiekt_osoby.miesieczny_przychod_wpisz(200) + obiekt_osoby.miesieczny_przychod_wpisz(300) + # obiekt_osoby.miesieczny_przychod = "zero" -tak nie robimy! + print(f"Roczny dochód wynosi po : {obiekt_osoby.roczne_dochody()}") diff --git a/dzien_04/przyklady/klasa_osoba_05.py b/dzien_04/przyklady/klasa_osoba_05.py new file mode 100644 index 0000000..e494b49 --- /dev/null +++ b/dzien_04/przyklady/klasa_osoba_05.py @@ -0,0 +1,88 @@ +from random import choice, randint + +nazwiska = [ +"Sylwia Ciuruś", +"Marcelina Janc", +"Dorota Leśny", +"Hubert Beker", +"Albert Budzeń", +"Bruno Kargol", +"Olaf Juroszek", +] + +class Osoba: + def __init__(self, name="XXX", age=30, sex="M", status = "Osoba"): + self.name = name + self.sex = sex + self.age = age + self.miesieczny_przychod = None + self.status = status + # print(f"Start obiektu: {id(self)} - plec: {self.sex} wiek: {self.age}") + + def __str__(self): + return f"Oto osoba - {self.name} - {self.status=} " + + def roczne_dochody(self): + if self.miesieczny_przychod is None: + return -1 + return 12*self.miesieczny_przychod + + def miesieczny_przychod_wpisz(self,wartosc): + if self.miesieczny_przychod is None: + self.miesieczny_przychod = wartosc + print(f"Zmieniam na {wartosc}") + else: + print("POzostawiam stare") + + +class Dyrektor(Osoba): + + def __init__(self,name="Dyrektorskie nazwisko", age=40, sex="M"): + print("Uruchamiam init dyrektora") + super().__init__(name, age=age, sex=sex, status="Dyrektor") + + + def miesieczny_przychod_wpisz(self, wartosc): + self.miesieczny_przychod = wartosc *2 + print(f"Zmieniam podwójnie dla dyrektora na {self.miesieczny_przychod}") + + def roczne_dochody(self): + if self.miesieczny_przychod is None: + return -2 + return 13*self.miesieczny_przychod + +# zadanie - zdefiniować klasę Prektykant z rocznym dochodem 3 * miesięczny / -3 + +class Praktykant(Osoba): + nowy_status = "Praktykant" + def roczne_dochody(self): + if self.miesieczny_przychod is None: + return -3 + return 3 * self.miesieczny_przychod + + +lista_osob = [] +for nr in range(10): + wiek = randint(20,50) + plec = choice(["M","K","X"]) + nazwisko = choice(nazwiska) + osoba = Osoba(nazwisko, sex=plec, age=wiek) + lista_osob.append(osoba) + +# pojedynczy dyrektor +dyro = Dyrektor() +lista_osob.append(dyro) + +praktyk = Praktykant("Adam praktykant", age=30, sex="X") +lista_osob.append(praktyk) + +print(lista_osob) +print("----------------------") +for obiekt_osoby in lista_osob: + mc = randint(2000,5000) + print(obiekt_osoby) + print(f"Roczny dochód wynosi przed: {obiekt_osoby.roczne_dochody()}") + obiekt_osoby.miesieczny_przychod_wpisz(200) + obiekt_osoby.miesieczny_przychod_wpisz(300) + # obiekt_osoby.miesieczny_przychod = "zero" -tak nie robimy! + print(f"Roczny dochód wynosi po : {obiekt_osoby.roczne_dochody()}") diff --git a/dzien_04/przyklady/klasy_01.py b/dzien_04/przyklady/klasy_01.py new file mode 100644 index 0000000..0e0477b --- /dev/null +++ b/dzien_04/przyklady/klasy_01.py @@ -0,0 +1,10 @@ +class Computer: + pass + +komputer1 = Computer() +komputer2 = Computer() + +print(komputer1) +print(dir(komputer1)) + + diff --git a/dzien_04/przyklady/klasy_02.py b/dzien_04/przyklady/klasy_02.py new file mode 100644 index 0000000..5f9f9e8 --- /dev/null +++ b/dzien_04/przyklady/klasy_02.py @@ -0,0 +1,22 @@ +class Computer: + def __init__(self): + print("Startujemy...") + # definicja właściwości obiektów tej lasy + self.procesor = "CPU at start" + self.speed = "5 GHz" + self.cpu_speed = 5000 + + +komputer1 = Computer() +komputer2 = Computer() + +print(komputer1) +print(dir(komputer1)) +print(dir(komputer2)) +print(komputer1.procesor) +print(komputer2.procesor) + +komputer1.procesor = "AMD M6" +print('-------------------') +print(komputer1.procesor) +print(komputer2.procesor) diff --git a/dzien_04/przyklady/klasy_03.py b/dzien_04/przyklady/klasy_03.py new file mode 100644 index 0000000..0c8bfee --- /dev/null +++ b/dzien_04/przyklady/klasy_03.py @@ -0,0 +1,32 @@ +class Computer: + def __init__(self): + print("Startujemy...") + # definicja właściwości obiektów tej lasy + self.procesor = "CPU at start" + self.speed = "5 GHz" + self.cpu_speed = 5000 + + def informacje(self): + print(f"Mój komputer ma procesor {self.procesor}") + print(f"o prędkości {self.speed}") + return None + + +komputer1 = Computer() +komputer2 = Computer() + +print(komputer1) +print(dir(komputer1)) +print(dir(komputer2)) +print(komputer1.procesor) +print(komputer2.procesor) + +komputer1.procesor = "AMD M6" +print('-------------------') +print(komputer1.procesor) +print(komputer2.procesor) + +print('-------------------') +komputer2.speed = "3,3 GHz" +komputer1.informacje() +komputer2.informacje() \ No newline at end of file diff --git a/dzien_04/przyklady/klasy_03_zadanie.py b/dzien_04/przyklady/klasy_03_zadanie.py new file mode 100644 index 0000000..226686c --- /dev/null +++ b/dzien_04/przyklady/klasy_03_zadanie.py @@ -0,0 +1,47 @@ +class Computer: + def __init__(self): + print("Startujemy...") + # definicja właściwości obiektów tej lasy + self.procesor = "CPU at start" + self.speed = "5 GHz" + self.cpu_speed = 5000 + + def informacje(self): + print(f"Mój komputer ma procesor {self.procesor}") + print(f"o prędkości {self.speed}") + return None + +# utówrz metodę szybki i zwróć w niej True gdy self.cpu_speed>3000 +# inaczej False - sprawdź, przetestuj, ustaw 1 obiekt na cpu_speed 1200 + + def szybki(self): + # return True if self.cpu_speed > 3000 else False + if self.cpu_speed> 3000: + return True + else: + return False + +komputer1 = Computer() +komputer2 = Computer() + +print(komputer1) +print(dir(komputer1)) +print(dir(komputer2)) +print(komputer1.procesor) +print(komputer2.procesor) + +komputer1.procesor = "AMD M6" +print('-------------------') +print(komputer1.procesor) +print(komputer2.procesor) + +print('-------------------') +komputer2.speed = "3,3 GHz" +komputer1.informacje() +komputer2.informacje() + +print(komputer1.szybki()) +print(komputer2.szybki()) +komputer1.cpu_speed = 1200 +print(komputer1.szybki()) +print(komputer2.szybki()) diff --git a/dzien_04/przyklady/pliki_01.py b/dzien_04/przyklady/pliki_01.py new file mode 100644 index 0000000..07619b8 --- /dev/null +++ b/dzien_04/przyklady/pliki_01.py @@ -0,0 +1,27 @@ +import hashlib +import os +from pyfsig import * + +def dane_pliku(plik): + with open(plik, "rb") as plik_binarny: + dane = plik_binarny.read() + naglowek = dane[:32] + wielkosc = len(dane) / 1024 # w kb + suma_sha1 = hashlib.sha1(dane).hexdigest() + suma_md5 = hashlib.md5(dane).hexdigest() + # sprawdzenie content-type + matches = find_matches_for_file_header(file_header=naglowek) + return suma_sha1, suma_md5, wielkosc, matches + +directory = "/home/adasiek/Documents" + +if not os.path.exists(directory): + print(f"Directory {directory} doesn't exist") + exit(1) + +for dirpath, dirname, files in os.walk(directory): + print(f"Katalog {dirpath}:") + for any_file in files: + pliczek = dirpath+"/"+any_file + sha1, md5, rozmiar, lista_content_type = dane_pliku(pliczek) + print(f"Plik {any_file} ma rozmiar: {rozmiar} i {md5=} {sha1=} / {lista_content_type=}") \ No newline at end of file diff --git a/dzien_04/przyklady/pliki_02.py b/dzien_04/przyklady/pliki_02.py new file mode 100644 index 0000000..07619b8 --- /dev/null +++ b/dzien_04/przyklady/pliki_02.py @@ -0,0 +1,27 @@ +import hashlib +import os +from pyfsig import * + +def dane_pliku(plik): + with open(plik, "rb") as plik_binarny: + dane = plik_binarny.read() + naglowek = dane[:32] + wielkosc = len(dane) / 1024 # w kb + suma_sha1 = hashlib.sha1(dane).hexdigest() + suma_md5 = hashlib.md5(dane).hexdigest() + # sprawdzenie content-type + matches = find_matches_for_file_header(file_header=naglowek) + return suma_sha1, suma_md5, wielkosc, matches + +directory = "/home/adasiek/Documents" + +if not os.path.exists(directory): + print(f"Directory {directory} doesn't exist") + exit(1) + +for dirpath, dirname, files in os.walk(directory): + print(f"Katalog {dirpath}:") + for any_file in files: + pliczek = dirpath+"/"+any_file + sha1, md5, rozmiar, lista_content_type = dane_pliku(pliczek) + print(f"Plik {any_file} ma rozmiar: {rozmiar} i {md5=} {sha1=} / {lista_content_type=}") \ No newline at end of file diff --git a/dzien_04/przyklady/zasiegi_01.py b/dzien_04/przyklady/zasiegi_01.py new file mode 100644 index 0000000..4229eff --- /dev/null +++ b/dzien_04/przyklady/zasiegi_01.py @@ -0,0 +1,8 @@ +def liczymy(liczba): + print(f"{id(liczba)=}") + return (liczba+10)*3 + +print(liczymy(100)) +liczba = 200 +print("A", id(liczba)) +print(liczymy(120)) diff --git a/dzien_04/przyklady/zasiegi_02.py b/dzien_04/przyklady/zasiegi_02.py new file mode 100644 index 0000000..7308c89 --- /dev/null +++ b/dzien_04/przyklady/zasiegi_02.py @@ -0,0 +1,15 @@ +inna_liczba = 555 + +def liczymy(liczba): + print(f"{id(liczba)=}") + print(f"{id(inna_liczba)=} / {inna_liczba=}") + tmp_liczba = inna_liczba + tmp2 = liczba *3 + return (liczba+10)*3 + +q = liczymy(100) +print(q) +liczba = 200 + +print("A", id(liczba), "B", id(inna_liczba)) +print(liczymy(120)) diff --git a/dzien_04/przyklady/zasiegi_03.py b/dzien_04/przyklady/zasiegi_03.py new file mode 100644 index 0000000..51aace9 --- /dev/null +++ b/dzien_04/przyklady/zasiegi_03.py @@ -0,0 +1,17 @@ +inna_liczba = 555 + +def liczymy(liczba): + print(f"{id(liczba)=}") + inna_liczba = 556 + print(f"{id(inna_liczba)=} / {inna_liczba=}") + tmp_liczba = inna_liczba + tmp2 = liczba *3 + return (liczba+10)*3 + +print("AA", id(inna_liczba)) +q = liczymy(100) +print(q) +liczba = 200 +print("A", id(liczba), "B", id(inna_liczba)) + +print(liczymy(120)) diff --git a/dzien_04/przyklady/zasiegi_04_mutable.py b/dzien_04/przyklady/zasiegi_04_mutable.py new file mode 100644 index 0000000..eb47bae --- /dev/null +++ b/dzien_04/przyklady/zasiegi_04_mutable.py @@ -0,0 +1,20 @@ +inna_liczba = [555] + +slownik = {} + +def liczymy(liczba): + print(f"{id(liczba)=}") + inna_liczba.append(556) + slownik['lista'] = liczba + print(f"{id(inna_liczba)=} / {inna_liczba=}") + tmp_liczba = inna_liczba + tmp2 = liczba *3 + return (liczba+10)*3 + +print("AA", id(inna_liczba)) +q = liczymy(100) +print(q) +liczba = 200 +print("A", id(liczba), "B", id(inna_liczba)) + +print(liczymy(120)) diff --git a/dzien_04/przyklady/zasiegi_05_mutable.py b/dzien_04/przyklady/zasiegi_05_mutable.py new file mode 100644 index 0000000..062787e --- /dev/null +++ b/dzien_04/przyklady/zasiegi_05_mutable.py @@ -0,0 +1,27 @@ +inna_liczba = [555] +kolory = ("red", "blue") + +slownik = {} + +def liczymy(liczba): + print(f"{id(liczba)=}") + inna_liczba.append(liczba) + slownik['lista'] = liczba + print(f"{id(inna_liczba)=} / {inna_liczba=}") + tmp_liczba = inna_liczba.copy() + tmp_liczba.append(0) + return (liczba+10)*3 + +print("AA", id(inna_liczba)) +q = liczymy(100) +print(q) +liczba = 200 +print("A", id(liczba), "B", id(inna_liczba)) + +liczymy(120) +liczymy(220) +liczymy(320) +liczymy(420) +liczymy(520) + +print(inna_liczba, slownik) \ No newline at end of file diff --git a/dzien_04/przyklady/zasiegi_06_obiekty.py b/dzien_04/przyklady/zasiegi_06_obiekty.py new file mode 100644 index 0000000..acdf00c --- /dev/null +++ b/dzien_04/przyklady/zasiegi_06_obiekty.py @@ -0,0 +1,25 @@ +class Jakas: + def __init__(self, liczba): + self.liczba = liczba + +def fn(): + print(cos1.liczba) + print(cos2.liczba) + print("-----------") + +def pokaz(obiekt): + stringi = dir(obiekt) + print(f"{id(obiekt)=} >> {type(obiekt)} >> {stringi=}") + print("===========================") + + +cos1 = Jakas(12) +cos2 = Jakas(16) + +cos1.liczba = 22 +fn() +cos2.nowa = "NOWY" +print(cos1.nowa) +pokaz(cos1) +pokaz(cos2) + diff --git a/dzien_04/przyklady/zasiegi_07_zadanie.py b/dzien_04/przyklady/zasiegi_07_zadanie.py new file mode 100644 index 0000000..275629f --- /dev/null +++ b/dzien_04/przyklady/zasiegi_07_zadanie.py @@ -0,0 +1,30 @@ +# szablon + +class Klasa: + def __init__(self, nazwa_klasy, przedmiot="BRAK"): + self.klasa = nazwa_klasy + if przedmiot == "BRAK": + raise Exception("ZŁY PRZEDMIOT") + self.przedmiot = przedmiot + + def jaki_przedmiot(self): + return f"Klasa {self.klasa} to {self.przedmiot}" + +class Informatyka(Klasa): + def __init__(self, nazwa_klasy): + super().__init__(nazwa_klasy, przedmiot="Informa") + +class Biologia(Klasa): + def __init__(self, nazwa_klasy): + super().__init__(nazwa_klasy, przedmiot="Biol") + +klasy = [ + Informatyka("1A"), + Biologia("2A"), + Biologia("3A"), +] + +for jaka in klasy: + print(jaka.jaki_przedmiot()) + +Klasa("Tu powinien być eroor") \ No newline at end of file