Python - zajęcia 5

Instalowanie bibliotek

pip3 install nazwa_modulu

Narzędzia dla zawodowców w IT: Poetry i UV

  • UV jest pomocne, kiedy robimy 2 aplikacje i potrzebne są 2 różne wersje tej samej biblioteki

Nie jest dobrze korzystać z bibliotek w przypadku prostych problemów, czemu?

  • żeby się nie rozleniwić
  • aktualizacja biblioteki może wiązać się z dużymi zmianami i program może nie zadziałać
  • left pad incident.

Co było źle z kwestionariuszem?

  • kod po każdym pytaniu się powtarzał - po to mamy pętle
quiz = [
    {
        "tresc": "tresc pytania",
        "odpowiedzi": [
            ("odp1", 1),
            ("odp2", 0),
            ("odp3", 0),
        ],
    }
]

Rodzaje pętli

  • for
  • while

Dzisiaj o pętli for:

  • preferowany rodzaj pętli w Pythonie
  • "wykonaj coś tyle razy, ile jest elementów w"
for element in sekwencja:
  print("coś, co ma się powtórzyć")

brudnopis:

# zwierzaki = ["pies", "kot", "chomik", "rybki"]

# for zwierzak in zwierzaki:
#     print(zwierzak)
#     print("***********")

# python sprawdza czy nasza sekwencja ma jeszcze jakies elementy
# tak, sa elementy
# bierzemy pierwszy "pies" i przypisujemy do zmiennej o nazwie zwierzak
# drukujemy zmienną zwierzak (pies)

# python sprawdza czy nasza sekwencja ma jeszcze jakies elementy
# tak, sa elementy
# bierzemy drugi "kot" i przypisujemy do zmiennej o nazwie zwierzak
# drukujemy zmienną zwierzak (kot)

# python sprawdza czy nasza sekwencja ma jeszcze jakies elementy
# tak, sa elementy
# bierzemy trzeci "chomik" i przypisujemy do zmiennej o nazwie zwierzak
# drukujemy zmienną zwierzak (chomik)

# python sprawdza czy nasza sekwencja ma jeszcze jakies elementy
# tak, sa elementy
# bierzemy czwarty "rybki" i przypisujemy do zmiennej o nazwie zwierzak
# drukujemy zmienną zwierzak (rybki)

# python sprawdza czy nasza sekwencja ma jeszcze jakies elementy
# nie - wychodzimy z pętli

for litera in "Robisz.to":
    print(litera)


# # jak mozemy zrobic odliczanie do np. 100 z pomocą range?
# na co trzeba uważać?

# # jak zrobić odliczanie w dół?
# # range(start, koniec, krok)

# # wyswietl kolejne elementy listy, nastepnie komunikat o zakonczeniu

# moja_lista = [1, 2, 3, 4, 5]

# # wyswietl klucze slownika

# moj_slownik = {"a": 1, "b": 2, "c": 3}

# # Jak jeszcze mozemy sie przemieszczac po slowniku?

# # Dobra praktyka - "savoir vivre"

# # moja_lista = [1,2,3,4]

# # for _ in moja_lista: # dobra praktyka
# #     print("hello!")  # _ gdy nie korzystam z wartosci

# # czy to jak nazwiemy zmienna uzyta do "przemieszczania sie"
# # ma poza tym jakies znaczenie?

# # ile elementow ma ponizsza lista?
# # wyswietl jej poszczegolne elementy

# moja_lista = ["ala", 1, "kot", 2.38, (1, "chomik")]

# # wyswietl poszczegolne litery w słowie "Robisz.to"


# # co wyswietli ponizszy kod (jaki zestaw liczb)?

# for i in range(10):
#     print(i)

# # wyswietl 10 razy słowo "Hej!"

# # wyswietl slowo "Hej!" tyle razy ile zażyczy sobie użytkownik

# # jak z pomoca petli zrobic sumowanie liczb z jakiegos zakresu (np. 0-5)

# # jak z tego zakresu policzyc sume jedynie liczb nieparzystych?

# # a jak policzyc silnie?

# # Jak wykorzystać metodę .items() do wyświetlenia kluczy i wartości
# # ze słownika?

# moj_slownik = {"a": 1, "b": 2, "c": 3}

# # Jaka wartość będzie przechowywana pod zmienną a
# # pod koniec działania programu?

# moja_lista = [2, 3, 4]
# a = 1
# print(f"Zmienna a ma teraz wartość {a}")

# for i in moja_lista:
#     a *= i
#     print(f"Zmienna a ma teraz wartość {a}")
# print(f"Zmienna a ma teraz wartość {a}")


# # A jak będzie w tym wypadku?

# moja_lista = [2, 3, 4]

# for i in moja_lista:
#     a = 1
#     print(f"Zmienna a przed mnożeniem: {a}")
#     a *= i
#     print(f"Zmienna a ma teraz wartość: {a}")

# # do czego słuze atrybut end?

# for i in range(5):
#     print(i, end=", ")


# # wyświetl poszczególne znaki z zdania "Ala ma kota."

# # Przejdź pętlą for po poniższych zdaniach. Sprawdź czy znajduje się w nich słowo "relaks"
# # - jeśli tak to wyświetl komunikat "Znaleziono" i pokaż też to zdanie.
# # P.S. Nie ręczę za treść - wygenerowane przez AI ;)

# zdania = [
#     "Lubię spacerować po lesie w ciepłe dni.",
#     "Kawa rano dodaje mi energii do działania.",
#     "Książki rozwijają wyobraźnię i wiedzę człowieka.",
#     "Wakacje nad morzem to najlepszy czas relaksu.",
#     "Muzyka pomaga mi się skupić i odpocząć.",
#     "Pies biega radośnie po zielonym podwórku.",
#     "W pracy ważna jest dobra komunikacja z innymi.",
#     "Gotowanie to moja największa pasja na co dzień.",
#     "Uwielbiam oglądać zachody słońca nad jeziorem.",
#     "Przyjaciele zawsze wspierają mnie w trudnych chwilach.",
# ]

# # korzystając z powyższej listy zdań - policz łączną ilość wystąpień litery "a"

# # wyświetl poniższą liste w odwrotnej kolejności

# liczby = [1, 2, 3, 4]

# # czasami przemieszczając się po elementach list/ krotki ("iterując") byłoby super dostać też indeks elementu.
# # Aby nie bawić się w wprowadzanie dodatkowej zmiennej w której liczylibyśmy indeks można posłużyć się
# # funkcja enumerate

# for idx, liczba in enumerate(liczby):
#     print(f"Indeks: {idx}, Wartość: {liczba}")

.items zamienia słownik na listę krotek

Żółw - biblioteka turtle

Fajny bajer do poćwiczenia pętli for.

Zadanie 1a

import turtle

zolwik = turtle.Turtle() # stworz obiekt rysujacego zolwia pod zmienna zolwik
zolwik.speed(5) # ustaw szybkosc zolwia wbudowana metoda speed
zolwik.shape("turtle") # uzyj metody shape do ustawienia wygladu kursora / zolwia
zolwik.pensize(3)

wysokosc_slupka=50
szerokosc_slupka=40
liczba_slupkow=4
zolwik.left(90)
for slup in range(liczba_slupkow):
    for boki in range(2):
        zolwik.forward((slup+1)*wysokosc_slupka)
        zolwik.right(90)
        zolwik.forward(szerokosc_slupka)
        zolwik.right(90)
    zolwik.left(90)
    zolwik.penup()
    zolwik.back(szerokosc_slupka)
    zolwik.right(90)
    zolwik.pendown()


turtle.exitonclick() 

Zadanie 1b

import turtle

zolwik = turtle.Turtle() # stworz obiekt rysujacego zolwia pod zmienna zolwik
zolwik.speed(5) # ustaw szybkosc zolwia wbudowana metoda speed
zolwik.shape("turtle") # uzyj metody shape do ustawienia wygladu kursora / zolwia
zolwik.pensize(3)

dlugosc_boku_min=50
liczba_kwadratow=8
roznica=10
zolwik.left(90)
for _ in range(liczba_kwadratow):
    for costam in range(4):
        zolwik.forward(dlugosc_boku_min+_*roznica)
        zolwik.right(90)

turtle.exitonclick()

Zadanie 2

logi = [
["[2025-03-25T10:41:50] [WARN] Ciepło tutaj..."],
["[2025-03-25T11:58:50] [INFO] Cośtam liczę."],
["[2025-04-25T20:18:51] [INFO] Zadanie wykonane."],
["[2025-05-25T21:12:52] [ERROR] Bzzzztttt... dzielisz przez zero."],
["[2025-05-25T22:48:50] [INFO] Plik przetworzony."],
["[2025-06-25T01:48:50] [INFO] Połączona z serwisem www."],
["[2025-06-25T05:48:22] [ERROR] Booom... i wybuchło..."],
["[2025-06-25T15:48:31] [WARN] Miejsce na dysku się kończy."],
["[2025-07-25T20:48:50] [ERROR] Zły format pliku."],
["[2025-07-25T21:48:32] [INFO] Przesyłka gotowa."],
["[2025-07-25T22:21:50] [INFO] Program ściągnięty."],
["[2025-07-25T25:48:50] [INFO] A ja liczę i liczę...."],
]

for wiadomosc in logi:
    if "-06-" in wiadomosc[0] and "ERROR" in wiadomosc[0]: 
        print("Errory w czerwcu:")
        print(wiadomosc)

Linki:

pypi.org

astral.sh