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ą.
Proszę wprowadzić Tiarę Przydziału.
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.
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
.
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%.
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
}
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
}
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
).
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
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
).
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 nas
jako sykl, jeśli nak
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
}
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ą funkcjiwaluta_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
).
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.
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.
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.