Skip to content

Latest commit

 

History

History
325 lines (243 loc) · 10.4 KB

GRUPOWE_2.md

File metadata and controls

325 lines (243 loc) · 10.4 KB

Zadanie GRUPOWE 2 HP

Szanowna Pani / Szanowny Panie,

Mamy przyjemność poinformowania Pani/Pana, że został(a) Pan(i) przyjęty/a do Szkoły Magii i Czarodziejstwa Hogwart. Dołączamy listę niezbędnych książek i wyposażenia.

Rok szkolny - semestr Grupowe_2 rozpoczyna się 11 kwietnia lub 17 kwietnia zależnie od grupy. Oczekujemy Państwa potwierdzenie commitem nie później niż dla grupy środowej: 23 kwietnia dla grupy czwartkowej: 17 kwietnia

Z wyrazami szacunku,

Aleksandra Wojewoda

Nauczyciel IO

Załącznik 1

Studenci powinni mieć:

Jeden zwykły program git (pod dowolny system)

Jedno konto na Githubie

Jedno IDE (preferowane VSC lub PyCharm - w czarnym ustawieniu)

Jeden komplet kluczy SSH lub ewentualnie działający zestaw login i hasło do HTTP

UWAGA! Wszystkie commity studentów powinny być zaopatrzone w odpowiednio ustawione naszywki z imieniem, nazwiskiem i internetową pocztą sowią.

Podział na domy!

Proszę wprowadzić Tiarę Przydziału.

img

Organizacja domu

Proszę o wyłonienie prefekta, ustalenie wspólnej techniki przydzielania zadań i nazewnictwa gałęzi. Prefekt musi stworzyć forka wskazanego repozytorium (zaklęcie duplikujące). Każde zadanie ma zostać zrealizowane na odrębnej gałęzi, po zakończeniu zadania, wystawiamy PR.

Część I

Zadanie 1 - piśmienne

W pliku README.md napisz jaki dom reprezentuje zespół. Umieść przynajmniej jeden obraz, który będzie przetrzymywany w katalogu/folderze imgs/. Umieść listę uczestników domu, ale tak, aby zawierały linki do ich kont na Githubie. Umieść informacje dot. zasad współpracy. Najważniejsze informacje pogrub, nazwy własne napisz kursywą, a nazwa domu ma być w barwach tego domu. Zakazane praktyki przekreśl, zaś nazwy gałęzi lub strukturę nazwy gałęzi zapisz jako kod w tekście.

Zadanie 2 - programistyczne

W pliku main.py zaprogramuj funkcję wyslij_sowe, która przyjmuje dwa ciągi znaków: adresata, treść listu, funkcja ma wyświetlać (print) informację o wysłaniu sowy, odczekać 1 sekundę i zwrócić True, jeśli operacja się powiodła lub False, jeśli się nie powiodła. Operację zrandomizuj True ma wypadać w 85%, zaś False w 15%.

Zadanie 3 - programistyczne

W pliku main.py zaprogramuj funkcję licz_sume, która ma przyjmować słownik, w którym mogą występować następujące klucze: galeon, sykl, knut. Dla każdego z kluczy wartość będzie reprezentowana przez listę, wskazującą na ilość monet danego rodzaju w jednym stosie. Funkcja ma zwracać słownik informujący o wielkości funduszu po jego przeliczeniu na monety o największym nominale. Przy czym 1 galeon = 17 sykli, 1 sykl = 21 knutów.

Przykładowe wejście:

{
    "galeon" : [1, 3, 5],
    "sykl" : [18, 20, 10],
    "knut" : [30, 40, 7]
}

Oczekiwane wyjście:

{
    "galeon" : 12,
    "sykl" : 0,
    "knut" : 14
}

Zadanie 4 - programistyczne

W pliku main.py zaprogramuj funkcję wybierz_sowe_zwroc_koszt, która będzie przyjmować następujące parametry: potwierdzenie odbioru, odległość, typ, specjalna.

odległość\typ list paczka
lokalna 2 knuty 7 knutów
krajowa 12 knutów 1 sykl 2 knuty
dalekobieżna 20 knutów 2 sykle 1 knut
  • potwierdzenie odbioru +7 knutów
  • dla opcji specjalna: wyjec → +4 knuty, list gończy → +1 sykl
  • nie używaj w kodzie polskich znaków

Przykładowe wywołanie:

wybierz_sowe_zwroc_koszt(True, 'lokalna', 'list', 'wyjec')

Oczekiwane wyjście:

{
    "galeon" : 0,
    "sykl" : 0,
    "knut" : 13
}

Checkpoint 1! - Grupa czwartkowa dzienni03

Wszystkie gałęzie mają trafić na gałąź główną. Do rozwiązania konfliktów można wykorzystać narzędzia wbudowane np. w IDE PyCharm lub dodatkowe pluginy dla VSC. Można wykorzystać zwykły edytor tekstu lub konsolowy edytor tekstu (np. vim).

Zadanie 5 - programistyczne

W pliku main.py zaprogramuj funkcję waluta_dict_na_str, która przyjmie słownik informujący o wielkości funduszu po jego przeliczeniu na monety o największym nominale i przepisze na cenę.

  • jeśli wartość jakiegoś bilonu jest zerowa, pomiń ją,
  • wersja łatwiejsza: nie musisz odmieniać słów knutów, knuty, sykle, sykli, galeony itd. możesz zostać przy knut, sykl, galeon.

Przykładowe wejścia:

{
    "galeon" : 0,
    "sykl" : 0,
    "knut" : 13
}

{
    "galeon" : 17,
    "sykl" : 2,
    "knut" : 13
}

Oczekiwane wyjścia:

"13 knut"

"17 galeon 2 sykl 13 knut"
  • nie umieszczaj spacji na początku ani na końcu ciągu wyjściowego

Checkpoint 1! - Grupa środowa dzienni02

Wszystkie gałęzie mają trafić na gałąź główną. Do rozwiązania konfliktów można wykorzystać narzędzia wbudowane np. w IDE PyCharm lub dodatkowe pluginy dla VSC. Można wykorzystać zwykły edytor tekstu lub konsolowy edytor tekstu (np. vim).

Zadanie 6 - programistyczne

W pliku main.py zaprogramuj funkcję waluta_str_na_dict, która przyjmie ciąg znaków i przepisze na cenę w słowniku.

  • jeśli wartość jakiegoś bilonu jest zerowa, mimo to umieść klucz w słowniku,
  • podpowiedź: podziel ciąg po spacji, co drugi ciąg traktuj jak klucz, jeśli zaczyna się na g uznaj to za galeon, jeśli na s jako sykl, jeśli na k jako knut.

Przykładowe wejścia:

"13 knut"

"17 galeon 2 sykl 13 knut"

Oczekiwane wyjścia:

{
    "galeon" : 0,
    "sykl" : 0,
    "knut" : 13
}

{
    "galeon" : 17,
    "sykl" : 2,
    "knut" : 13
}

Zadanie 7 - programistyczne

UWAGA! Zadanie wymaga zadania 5! Jeśli nie ma zadania 5 na main należy zainicjalizować funkcję wydmuszkę.

W pliku main.py zaprogramuj funkcję nadaj_sowe, która przyjmie następujące dane wejściowe:

  • adresat → str
  • tresc wiadomosci → str
  • potwierdzenie odbioru → True/False
  • odleglosc → lokalna/krajowa/dalekobieżna
  • typ → list/paczka
  • specjalna → nie dotyczy/wyjec/list gończy

Za pomocą funkcji wybierz_sowe_zwroc_koszt oblicz koszt sowy, który Następnie do pliku poczta_nadania_lista.csv dopisz nowy wiersz z następującymi danymi:

  • adresat → str
  • treść wiadomości → str
  • koszt przesyłki → oblicz za pomocą funkcji wybierz_sowe_zwroc_koszt, a następnie przekonwertuj na ciag znaków za pomocą funkcji waluta_dict_na_str
  • potwierdzenie odbioru → True/False, gdzie True ma być zapisane jako TAK, zaś False jako NIE

Funkcja ma nic nie zwracać (brak return).

Zadanie 8 - programistyczne

W pliku main.py zaprogramuj funkcję poczta_wyslij_sowy, która będzie przyjmować ścieżkę do pliku .csv, gdzie będą występować następujące kolumny:

  • adresat → str
  • treść wiadomości → str
  • koszt przesyłki
  • potwierdzenie odbioru → TAK/NIE

Następnie wyślij sowy z listy za pomocą funkcji wyslij_sowe.

  • Jeśli sowa doleciała, policz koszt zgodnie z taryfą z kolumny koszt przesyłki.
  • Jeśli sowa nie doleciała:
    • potwierdzenie odbioru = TAK → wyzeruj koszt (klient nie płaci),
    • potwierdzenie odbioru = NIE → policz koszt zgodnie z taryfą z kolumny koszt przesyłki.

Następnie zapisz rezultat w pliku, którego nazwa będzie miała następujący schemat output_sowy_z_poczty_dzien_miesiac_rok.csv i następujące kolumny:

  • adresat,
  • tresc wiadomosci,
  • koszt przesylki,
  • potwierdzenie odbioru,
  • rzeczywisty koszt.

Tagi

Tag dla repozytorium Git jest trochę jak kolorowe karteczki z zaznaczeniem jakiegoś ważnego/ulubionego fragmentu. Jest to swego rodzaju wskaźnik na dany moment w historii repozytorium, w odróżnieniu od gałęzi (analogicznie zakładka w książce) nie przesuwa się w ramach postępu w tworzeniu oprogramowania (czytania książki).

Tag służy do oznaczenia wersji oprogramowania. Zwykle oznaczenia są dwu lub trzyelementowe tj. v0.1 lub v2.17.3. Przy czym składniki liczbowe wersji traktuje się od najważniejszego do najmniej ważnego. Czy dla v.2.17.3 ogólnie będzie można powiedzieć, że jest to wersja druga oprogramowania, na dalszym planie będzie 17, a na końcu 3.

W Git rozróżnia się dwa rodzaje tagów:

  • tag lekki (ang. lightweight tag) - zajmuje mniej miejsca w repozytorium i nie przetrzymuje dodatkowych metadanych, jest po prostu wskaźnikiem na danego commita,
  • tag adnotowany (ang. annotated tag) - zajmuje więcej miejsca i przetrzymuje metadane.

Podstawowe komendy ułatwiające pracę z tagami:

  • git tag - wyświetl listę tagów,
  • git tag -l v0.2* - wyświetli wszystkie tagi, rozpoczynające się od v0.2,
  • git tag -a v0.1 -m "Widamość dla taga" - stworzenie taga adnotowanego (przełącznik -a),
  • git tag v0.1 - stworzenie taga lekkiego,
  • git push origin v0.1 - wypchnięcie taga.

Więcej do poczytania o tagach można znaleźć w oficjalnej dokumentacji.

Przepływ pracy (??? ang. workflow)

Workflow na Githubie jest konfigurowalnym zautomatyzowanym procesem, który uruchamia określoną liczbę zadań do wykonania.

Takie automatyczne procesy mają zapewnić poprawne działanie kodu i jego automatyczne sprawdzenie. Zadania mogą także automatycznie generować dalsze pożądane zachowania np. wygenerowanie dokumentu (artefaktu).

Workflow tworzone dą w formacie YAML w specjalnym folderze/katalogu .github/workflows/.

Przykładowy plik konfigurujący zautomatyzowany proces może wyglądać następująco:

# Komentarz 

name: Python application

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Ola test
      run: python ola.py

W ramach pliku powyżej zdefiniowano proces (o nazwie Python application) z jednym zadaniem (job) z jednym krokiem (step). Proces będzie się wykonywał na najnowszym obrazie Ubuntu z odpowiednimi zgodami. Będzie się wykonywał tylko dla gałęzi main oraz dla PR do gałęzi main. W ramach kroku, który nazywa się Ola test będzie wywoływany skrypt ola.py za pomocą python.

Zadaniem w ramach zajęć jest przywitanie się z prefektem domu.