Zaawansowany kurs programowania w Pythonie
Rozdział
>
Poziom
Zaawansowane listy
Sortowanie zbiorów
Cel
Zorganizuj i ugotuj posiłek, używając zbiorów (Sets) do sortowania i komponowania składników.
Byłoby dobrze zacząć przygotowywać jedzenie – w lodówce znajduje się kilka składników, wszystkie zapakowane, a także kilka ziół, które możesz wykorzystać, aby nadać potrawie smak. Wszystkie materiały przechowywane są w listach, dlatego warto użyć zbiorów, aby skonsolidować elementy i w pełni wykorzystać możliwości gotowania.
Istnieją trzy (3) stałe listy: dwie (2) dotyczą mięsa, o nazwach: pack1 i pack2, oraz jedna (1) dotycząca materiałów kuchennych, nazwana ingredients. Udaj się do ciemnego znaku X na pomarańczowym dywanie i stan twarzą do lodówki, używając funkcji collect() pobierz pack1 i pack2 z lodówki, tak jak to: player.collect(pack1).
Gdy mięso zostanie zebrane, udaj się do jasnego znaku X i stan twarzą do deski do krojenia. Tutaj sprawdzimy zawartość paczek, używając funkcji speak() z obiema stałymi list, które pobrałeś. Następnie skonsolidujemy elementy, używając zbiorów, jak na poprzednim poziomie. Utwórz dwa zbiory o nazwach set1 i set2 i przypisz do nich pack1 oraz pack2 za pomocą funkcji set(), na przykład: set1 = set(pack1).
Gdy listy zostaną skonsolidowane w zbiory, nadszedł czas, aby posortować i podzielić elementy na mniejsze zbiory dla wygody.
Pierwsza metoda osiągnięcia tego celu nazywa się systemic_difference – pozwoli oddzielić elementy, które nie są wspólne dla obu zbiorów. Utwórz zbiór o nazwie unique i użyj obu zbiorów do porównania i zidentyfikowania unikalnych elementów przy użyciu systemic_difference, tak jak to: unique = set1.symmetric_difference(set2). Użyj funkcji speak() z utworzonym zbiorem, aby potwierdzić jego zawartość.
Kontynuuj sortowanie, tworząc zbiór o nazwie shared i użyj metody intersection, której nauczyłeś się na poprzednim poziomie, aby zidentyfikować elementy wspólne dla obu zbiorów. Użyj obu zbiorów do porównania i zidentyfikowania elementów, tak jak to: shared = set1.intersection(set2). Użyj funkcji speak() z utworzonym zbiorem, aby potwierdzić jego zawartość.
Na koniec użyj metody difference, która pozwoli oddzielić elementy występujące tylko w jednym zbiorze, a nie w drugim. Utwórz dwa (2) zbiory o nazwach meat1 i meat2 i użyj obu oryginalnych zbiorów do porównania i zidentyfikowania elementów przy użyciu difference, tak jak to: meat1 = set1.difference(set2) oraz meat2 = set2.difference(set1). Użyj funkcji speak() z oboma utworzonymi zbiorami mięsnymi, aby potwierdzić ich zawartość.
W ten sposób mięsa zostały posortowane. Udaj się do ciemnego znaku X nad niebieskim dywanem, stan twarzą do lodówki i użyj funkcji place(), aby umieścić utworzony zbiór shared, tak jak to: player.place(shared). Dzięki temu odłożysz składniki, których nie gotujesz.
Udaj się do złotego znaku X, stan twarzą do szafki i użyj funkcji collect(), aby zdobyć ostatnią stałą listową o nazwie ingredients, a następnie użyj funkcji speak(), aby potwierdzić jej zawartość. Przenieś elementy z ingredients do nowego zbioru o nazwie set3. Teraz, gdy masz wszystkie składniki, utwórz dwa zbiory o nazwach meal1 i meal2, używając metody union, która łączy wszystkie elementy potrzebne do gotowania.
Dla meal1 połącz set3 i meat1 w następujący sposób: meal1 = set3.union(meat1). Udaj się do ciemnego znaku X nad fioletowym dywanem i, używając zbioru meal1, użyj funkcji speak(), aby potwierdzić jego zawartość, oraz funkcji place(), aby ugotować posiłek w garnku.
Dla meal2 postąp analogicznie, ale użyj metody union z set3 i meat2. Udaj się do ciemnego znaku X nad żółtym dywanem i stan twarzą do garnka, używając funkcji speak() oraz place() z meal2, aby ukończyć poziom.