1. """
Witam.
Przed Tobą wakacyjne zadanie PyLadies.
Masz do przygotowania skrypt umożliwiający automatyczne uzupełnianie grafiku
pracy według zadanych parametrów.
Zadanie nie należy do najprostszych i na pewno nie skończy się na jednym
wieczorze klikania.
Ale przecież o to właśnie chodzi ;-) toż to zadanie wakacyjne ;-)
W zamian oferuję pomoc i wsparcie, w razie potrzeby: marcin-pieczynski@wp.pl
Dla osób, które napiszą działający skrypt obiecuję code review ;-)
A teraz do rzeczy:
1)
Masz do dyspozycji drużynę pracowników zebranych w postaci listy crew.
Dla uproszczenia sytuacji pracownicy to po prostu osoby oznaczone literami od
'A' do 'O'. W sumie 15 osób.
2)
Nasz zespół pracuje na dwie zmiany po 12h przez cały miesiąc. Weekendy też
pracujące.
Możliwości zapisu dnia w grafiku:
'D' - dyżur w dzień
'N' - dyżur w nocy
'U' - dzień urlopowy
'.' - dzień wolny od pracy
Przed każdym miesiącem pracy, pracownicy mają możliwość oczywiście zdecydowania
w jakie dni biorą urlop ('U').
Dodatkowo każda osoba może mieć prośbę do osoby układającej grafik pracy,
że chciałaby mieć np: dyżur nocny ('N') np. 5 dnia miesiąca, a dyżur dzienny
('D') 14 dnia miesiąca itp.
Lista schedules zawiera grafiki pracy dla poszczególnych osób.
Grafiki te zawierają urlopy oraz prośby dyżurów w konkretne dni.
Pierwszej osobie z listy crew odpowiada pierwszy grafik z listy schedules itd.
Przykładowy grafik na 31 dni w miesiącu:
osoba B --> grafik '.D...........................N.'
osoba D --> grafik '...D.................UUUUUUN...',
3)
Nadszedł czas na zadanie.
Skrypt, który trzeba napisać powinien samodzielnie wypełniać brakujące dyżury w
grafiku pracy
według zadanych parametrów / wymagań !!! i to właśnie wymagania są kluczową
sprawą.
Wymagania:
- każdego dnia powinny być 3 osoby na dyżurze dziennym i 2 osoby na dyżurze
nocnym
- jedna osoba nie może pełnić dyżuru przez 24 h pod rząd.
W naszym grafiku oznacza to, że nie może wystąpić dyżur dzienny po nocnym -
ND.
Zatem w grafiku dla pojedynczej osoby nie może wystąpić 'ND'.
'DN' w grafiku jest dopuszczalne.
2. - liczba dyżurów dla pojedynczej osoby w ciągu 7 dni pod rząd wynosi
maksymalnie 4 dyżuru.
- liczba dyżurów dla pojedynczej osoby w caŅym miesiącu --> maksymalnie 13
- liczba dyżurów dziennych i nocnych dla jednej osoby - bez znaczenia.
Dopuszcza sią sytuacją w której jedna osoby ma tylko dyżuru dzienne, a
inna tylko nocne.
4)
Poniżej znajdziesz odrobiną kodu pomocnego przy wykonywaniu zadania.
I drobna porada na sam koniec.
SiÄ…gnij pamiÄ…ciÄ… wstecz i przypomnij sobie jak siÄ… graÅ…o w Class'y
PrzykÅ…adowy grafik po wypeÅ…nieniu automatycznym dokÅ…adnie z takimi
wymaganiami:
osoba grafik
A D.D...N..NUUUUUUNNN.D..D..D.D.N
B .DN..D..D..D..D..D.D..D..D..DN.
C ..DN.D..D..N..N.D..D..D..D..N.D
D ..DD.D..D..N.D..D..D.UUUUUUNNNN
E ..N.DN.D..D..D..D..D.D...DN.D..
F .D...DN.N.D..D..D.D..D..DN.D...
G .D..D.DD..D.D..D..D.D...N.N.D..
H .D..D..DN.N.D..D..D.D..N.D.D...
I .N..D..DD.N.D..D.D..D.N.D..D...
J UUUNNNUUUUUUUNNN.D..NN.DD..D..D
K D...N..N.DD.N.D..D..N.D.D..N..D
L NN.D...N.D.DN.UUUUUUUUNNNN...DD
M D..D..D..D..DN.D..NN.D.D..D..D.
N D..D..D..D.D.DD..N.N.DD...D..D.
O N.D...D..N.D..DNN.D..N.D..D..D.
Powodzenia ;-)))
Marcin
"""
crew = [
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O'
]
schedules = [
'D.........UUUUUU..............N',
'.D...........................N.',
'..D.........................N..',
'...D.................UUUUUUN...',
'....D.....................N....',
'.....D...................N.....',
'......D.................N......',
'.......D...............N.......',
'........D.............N........',
'UUU...UUUUUUU........N.........',
'..........D.........N..........',
'...........D..UUUUUUUU.........',
'............D.....N............',
'.............D...N.............',
'..............D.N..............'
3. class Person:
def __init__(self, name, person_schedule):
self.name = name
self.person_schedule = person_schedule
# Tutaj dodawaj własne metody dla klasy Person
def metoda1(self):
pass
def metoda2(self):
pass
# Poniższy 'if' będzie spełniony tylko i wyłącznie jeśli plik zostanie wykonany
jako samodzielny skrypt w pythonie.
# czyli np poprzez użycie polecenia w konsoli: python
PyLadies_zadanie_wakacyjne.py
# możesz to zrobić w tej chwili
# Wspomniany 'if' nie zostanie wykonany jeżeli plik jest importowany przez inny
moduł.
# Docelowo postaraj się zapisywać wszystkie definicja funkcji i metod powyżej
tego miejsca.
# Natomiast wywoływanie funkcji i metod, testowanie kodu wpisuj poniżej
wspomnianego "if"
if __name__ == '__main__':
print("uruchomienie pliku jako osobny scrypt")
# tworzenie instancji klasy Person dla osób (crew) i grafinków (schedules)
people = [Person(name, schedule) for name, schedule in zip(crew, schedules)]
# drukowanie atrybutów name oraz person_schedule dla stworzonych instancji
klasy Person
for person in people:
print(person.name, person.person_schedule)