{"id":294,"date":"2020-03-10T14:59:13","date_gmt":"2020-03-10T13:59:13","guid":{"rendered":"https:\/\/stachura-terlecka.pl\/?page_id=294"},"modified":"2020-03-10T14:59:13","modified_gmt":"2020-03-10T13:59:13","slug":"listy-slowniki-gramy-w-szubienice","status":"publish","type":"page","link":"https:\/\/stachura-terlecka.pl\/?page_id=294","title":{"rendered":"Listy, s\u0142owniki &#8211; gramy w szubienic\u0119"},"content":{"rendered":"<h2> Listy, s\u0142owniki &#8211; Gramy w szubienic\u0119<\/h2>\n<h4> Do przygotowania przed zaj\u0119ciami<\/h4>\n<p>* Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 4. Wprowadzenie. Koniec gry.<\/p>\n<h4> Cel i tematyka zaj\u0119\u0107<\/h4>\n<p>Drugie laboratorium ma na celu utrwalenie wiadomo\u015bci z trzeciego laboratorium oraz wprowadzenie nast\u0119puj\u0105cych element\u00f3w:<br \/>\n* listy,<br \/>\n* s\u0142owniki,<\/p>\n<h3> &#8211; Zadanie przypominaj\u0105ce<\/h3>\n<p>* Napisz program obliczaj\u0105cy silni\u0119 z wykorzystaniem p\u0119tli for,<br \/>\n* Napisz program wczytuj\u0105cy z klawiatury liczb\u0119 ca\u0142kowit\u0105. Program powinien przyjmowa\u0107 jedynie liczb\u0119 dodatni\u0105. Je\u015bli u\u017cytkownik poda liczb\u0119 ujemn\u0105, to powinien zosta\u0107 poinformowany, \u017ce wymagana jest liczba dodatnia i poproszony o kolejn\u0105 liczb\u0119. Pr\u00f3b\u0119 wczytywania liczby powtarzamy dop\u00f3ty, dop\u00f3ki u\u017cytkownik nie poda liczby poprawnej (dodatniej). Taki spos\u00f3b zapewnienia poprawno\u015bci wczytywanych danych nazywa\u0107 b\u0119dziemy p\u0119tl\u0105 zaporow\u0105.<\/p>\n<h4> Listy<\/h4>\n<p>Listy od krotek r\u00f3\u017cni\u0105 si\u0119 tym, \u017ce s\u0105 mutowalne.<\/p>\n<p>* deklaracja listy<br \/>\n<code python=\"\"><br \/>\nlist1 = []<\/code><\/p>\n<p><code python=\"\"><br \/>\n<\/code><code python=\"\">list2 = [\"element 1\", \"element 2\", \"element 3\"]<br \/>\n<\/code><br \/>\n* do list mo\u017cemy dodawa\u0107 elementy w nast\u0119puj\u0105cy spos\u00f3b<br \/>\n<code python=\"\"><br \/>\nscore = int(input(\"Jaki wynik uzyska\u0142e\u015b?: \"))<br \/>\nscores.append(score)<br \/>\n<\/code><\/p>\n<p>* usuwanie element\u00f3w z listy po ich warto\u015bci przebiega w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p><code python=\"\"><br \/>\nscores.remove(score)<br \/>\n<\/code><\/p>\n<p>* sortowanie element\u00f3w w li\u015bcie:<br \/>\n<code python=\"\"><br \/>\nscores.sort()<br \/>\n<\/code><\/p>\n<p>* konkatenacja list<br \/>\n<code python=\"\"><br \/>\ninventory = [\"miecz\", \"zbroja\", \"tarcza\", \"nap\u00f3j uzdrawiaj\u0105cy\"]<br \/>\nchest = [\"z\u0142oto\", \"klejnoty\"]<br \/>\nprint(\"Znajdujesz skrzyni\u0119, kt\u00f3ra zawiera:\")<br \/>\nprint(chest)<br \/>\nprint(\"Dodajesz zawarto\u015b\u0107 skrzyni do swojego inwentarza.\")<br \/>\ninventory += chest<br \/>\nprint(\"Tw\u00f3j aktualny inwentarz to:\")<br \/>\nprint(inventory)<br \/>\n<\/code><\/p>\n<h3> &#8211; Lista jako stos i kolejka<\/h3>\n<p>Listy mo\u017cemy u\u017cywa\u0107 r\u00f3wnie\u017c jako stosu lub kolejki.<\/p>\n<p>U\u017cycie listy jako stosu:<\/p>\n<p><code python=\"\"><br \/>\nstack = [3, 4, 5]<br \/>\nstack.append(6)<br \/>\nstack.append(7)<br \/>\nprint(stack)<br \/>\nstack.pop()<br \/>\nprint(stack)<br \/>\nstack.pop()<br \/>\nstack.pop()<br \/>\nprint(stack)<br \/>\n<\/code><\/p>\n<p>U\u017cycie listy jako kolejki:<\/p>\n<p><code python=\"\"><br \/>\nqueue = [\"Eric\", \"John\", \"Michael\"]<br \/>\nqueue.append(\"Terry\")           # przybywa Terry<br \/>\nqueue.append(\"Graham\")          # przybywa Graham<br \/>\nqueue.pop(0)<br \/>\nprint(queue)<br \/>\nqueue.pop(0)<br \/>\nprint(queue)<br \/>\n<\/code><\/p>\n<h3> &#8211; Listy &#8211; Gramy w szubienic\u0119<\/h3>\n<p>Popularn\u0105 gr\u0119 o nazwie Szubienica mo\u017cna przedstawi\u0107 jako \u015bwietny przyk\u0142ad wykorzystania list oraz dzia\u0142ania z nimi.<\/p>\n<p><code python=\"\"><br \/>\n# Szubienica<br \/>\n#<br \/>\n# Klasyczna gra w szubienic\u0119.  Komputer losowo wybiera s\u0142owo,<br \/>\n# a gracz pr\u00f3buje odgadn\u0105\u0107 jego poszczeg\u00f3lne litery.  Je\u015bli gracz<br \/>\n# nie odgadnie w por\u0119 ca\u0142ego s\u0142owa, ma\u0142y ludzik zostaje powieszony.<\/code><\/p>\n<p><code python=\"\"># import modu\u0142\u00f3w<br \/>\nimport random<\/p>\n<p># sta\u0142e<br \/>\nHANGMAN = (<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|   -+-<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|  \/-+-<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|  \/-+-\/<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|  \/-+-\/<br \/>\n|    |<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|  \/-+-\/<br \/>\n|    |<br \/>\n|    |<br \/>\n|   |<br \/>\n|   |<br \/>\n|<br \/>\n----------<br \/>\n\"\"\",<br \/>\n\"\"\"<br \/>\n------<br \/>\n|    |<br \/>\n|    O<br \/>\n|  \/-+-\/<br \/>\n|    |<br \/>\n|    |<br \/>\n|   | |<br \/>\n|   | |<br \/>\n|<br \/>\n----------<br \/>\n\"\"\")<\/p>\n<p>MAX_WRONG = len(HANGMAN) - 1<br \/>\nWORDS = (\"NADU\u017bYWANY\", \"MA\u0141\u017b\", \"GUAM\", \"TAFTA\", \"PYTHON\")<\/p>\n<p># inicjalizacja zmiennych<br \/>\nword = random.choice(WORDS)   # s\u0142owo do odgadni\u0119cia<br \/>\nso_far = \"-\" * len(word)      # kreska zast\u0119puje nieodgadni\u0119t\u0105 liter\u0119<br \/>\nwrong = 0                     # liczba nietrafionych liter<br \/>\nused = []                     # litery ju\u017c u\u017cyte w zgadywaniu<\/p>\n<p>print(\"Witaj w grze 'Szubienica'.  Powodzenia!\")<\/p>\n<p><\/code><code python=\"\">while wrong &lt; MAX_WRONG and so_far != word:<br \/>\n    print(HANGMAN[wrong])<br \/>\n    print(\"\\nWykorzysta\u0142e\u015b ju\u017c nast\u0119puj\u0105ce litery:\\n\", used)<br \/>\n    print(\"\\nNa razie zagadkowe s\u0142owo wygl\u0105da tak:\\n\", so_far)<\/p>\n<p>    guess = input(\"\\n\\nWprowad\u017a liter\u0119: \")<br \/>\n    guess = guess.upper()<\/p>\n<p>    while guess in used:<br \/>\n        print(\"Ju\u017c wykorzysta\u0142e\u015b liter\u0119\", guess)<br \/>\n        guess = input(\"Wprowad\u017a liter\u0119: \")<br \/>\n        guess = guess.upper()<\/p>\n<p>    used.append(guess)<\/p>\n<p>    if guess in word:<br \/>\n        print(\"\\nTak!\", guess, \"znajduje si\u0119 w zagadkowym s\u0142owie!\")<\/p>\n<p>        # utw\u00f3rz now\u0105 wersj\u0119 zmiennej so_far, aby zawiera\u0142a odgadni\u0119t\u0105 liter\u0119<br \/>\n        new = \"\"<br \/>\n        for i in range(len(word)):<br \/>\n            if guess == word[i]:<br \/>\n                new += guess<br \/>\n            else:<br \/>\n                new += so_far[i]<br \/>\n        so_far = new<\/p>\n<p>    else:<br \/>\n        print(\"\\nNiestety,\", guess, \"nie wyst\u0119puje w zagadkowym s\u0142owie.\")<br \/>\n        wrong += 1<\/p>\n<p>if wrong == MAX_WRONG:<br \/>\n    print(HANGMAN[wrong])<br \/>\n    print(\"\\nZosta\u0142e\u015b powieszony!\")<br \/>\nelse:<br \/>\n    print(\"\\nOdgad\u0142e\u015b!\")<\/p>\n<p>print(\"\\nZagadkowe s\u0142owo to\", word)<\/p>\n<p>input(\"\\n\\nAby zako\u0144czy\u0107 program, naci\u015bnij klawisz Enter.\")<br \/>\n<\/code><\/p>\n<h3> &#8211; Sekwencje zagnie\u017cd\u017cone<\/h3>\n<p>Podczas tworzenia oprogramowania niejednokrotnie b\u0119d\u0105 potrzebowali Pa\u0144stwo zastosowa\u0107 sekwencje zagnie\u017cd\u017cone, prosz\u0119 jednak pami\u0119ta\u0107, \u017ce dobr\u0105 praktyk\u0105 jest stosowanie nie wi\u0119cej ni\u017c trzech poziom\u00f3w zagnie\u017cd\u017cenia.<\/p>\n<p>Przyk\u0142ady sekwencji zagnie\u017cd\u017conych:<br \/>\n<code python=\"\"><br \/>\nscores = [(name0, score0), (name1, score1), (name2, score2)]<br \/>\n<\/code><\/p>\n<p>np.<br \/>\n<code python=\"\"><br \/>\nscores = [(\"Alfred\", 10), (\"Janek\", 5), (\"Krystian\", 15)]<br \/>\n<\/code><\/p>\n<p>Sekwencje zagnie\u017cd\u017cone mo\u017cemy rozpakowywa\u0107 je\u017celi wiemy ile element\u00f3w zawiera sekwencja:<\/p>\n<p><code python=\"\"><br \/>\nname, score = scores[1]<br \/>\n<\/code><\/p>\n<p>Dost\u0119p do poszczeg\u00f3lnych element\u00f3w sekwencji zagnie\u017cd\u017conych<\/p>\n<p><code python=\"\"><br \/>\na_score = scores[2]<br \/>\n<\/code><\/p>\n<h4> S\u0142owniki<\/h4>\n<h3> &#8211; S\u0142ownik gracza<\/h3>\n<p>S\u0142owniki sk\u0142adaj\u0105 si\u0119 z par klucz:warto\u015b\u0107. Mog\u0105 by\u0107 u\u017cyte do przechowywania np. s\u0142ownika w postaci termin &#8212; definicja.<br \/>\nTworzymy go w spos\u00f3b nast\u0119puj\u0105cy:<\/p>\n<p><code python=\"\"><br \/>\ngeek = {\"404\": \"ignorant; od u\u017cywanego w sieci WWW komunikatu o b\u0142\u0119dzie 404\\n - nie znaleziono strony.\",<br \/>\n\"Googling\": \"googlowanie; wyszukiwanie w internecie informacji dotycz\u0105cych jakiej\u015b osoby.\",<br \/>\n\"Keyboard Plaque\" : \"(skojarzone z kamieniem naz\u0119bnym)zanieczyszczenia nagromadzone w klawiaturze komputera.\",<br \/>\n\"Link Rot\" : \"(obumieranie link\u00f3w) proces, w  wyniku kt\u00f3rego linki do stron WWW staj\u0105 si\u0119 nieaktualne.\",<br \/>\n\"Percussive Maintenance\" : \"(konserwacja perkusyjna)naprawa urz\u0105dzenia elektronicznego przez stukni\u0119cie.\",<br \/>\n\"Uninstalled\" : \"(odinstalowany) zwolniony z pracy;  termin szczeg\u00f3lnie popularny w okresie ba\u0144ki internetowej.\"}<br \/>\n<\/code><\/p>\n<p>Informacj\u0119 w s\u0142owniku wyszukujemy po terminie:<\/p>\n<p><code python=\"\"><br \/>\ndefinition = geek[term]<br \/>\n<\/code><\/p>\n<p>W s\u0142ownikach mo\u017cemy modyfikowa\u0107 definicje u\u017cytych ju\u017c termin\u00f3w &#8211;<br \/>\naby u\u017cytkownik nie dokona\u0142 przypadkowej modyfikacji nale\u017cy sprawdza\u0107 czy termin jest wpisany w s\u0142owniku.<br \/>\nModyfikacja i  dodawanie termin\u00f3w w s\u0142owniku odbywa si\u0119 w ten sam spos\u00f3b:<\/p>\n<p><code python=\"\"><br \/>\ngeek[term] = definition<br \/>\n<\/code><\/p>\n<h3> &#8211; Przyk\u0142ad z konwersj\u0105 daty<\/h3>\n<p><code python=\"\"><br \/>\n# Konwersja daty<\/code><\/p>\n<p><code python=\"\">date = input(\"Podaj dat\u0119 w formacie DD.MM.RRRR a zostanie ona przet\u0142umaczona na DD month RRRR: \")<\/p>\n<p>months = {\"01\" : \"January\",<br \/>\n\"02\" : \"February\",<br \/>\n\"03\" : \"March\",<br \/>\n\"04\" : \"April\",<br \/>\n\"05\" : \"May\",<br \/>\n\"06\" : \"June\",<br \/>\n\"07\" : \"July\",<br \/>\n\"08\" : \"August\",<br \/>\n\"09\" : \"September\",<br \/>\n\"10\" : \"October\",<br \/>\n\"11\" : \"November\",<br \/>\n\"12\" : \"December\" }<\/p>\n<p>day, month, year = date.split(\".\")<\/p>\n<p>if month in months:<br \/>\nmonthstr = months[month]<br \/>\nelse:<br \/>\nprint(\"Poda\u0142e\u015b niew\u0142a\u015bciw\u0105 dat\u0119.\")<\/p>\n<p><\/code><code python=\"\">print(\"Twoja data po zmianie to:\", day, monthstr, year, sep=\" \")<br \/>\n<\/code><\/p>\n<h4> &#8211; Zadania do samodzielnego wykonania na laboratorium<\/h4>\n<p>* Pobierz wyniki od u\u017cytkownika do listy, a nast\u0119pnie wy\u015bwietl je od najmniejszego do najwi\u0119kszego. Przeczytaj za co odpowiada parametr **reverse** funkcji sort() dla list. Sprawd\u017a jego dzia\u0142anie dla podanej listy.<br \/>\n* Napisz program wy\u015bwietlaj\u0105cy punktacj\u0119 w spos\u00f3b zaprezentowany poni\u017cej oraz umo\u017cliwiaj\u0105cy dodawanie i usuwanie wynik\u00f3w u\u017cytkownik\u00f3w z listy.<br \/>\n<code><br \/>\nNick     Wynik<br \/>\ngracz1   5<br \/>\ngracz2   10<br \/>\n<\/code><br \/>\n* Napisz program, kt\u00f3ry b\u0119dzie spe\u0142nia\u0142 funkcj\u0119 pomocy dla gracza (pewnego rodzaju manual) w tym celu wykorzystaj s\u0142owniki, a do prezentacji wszystkich termin\u00f3w wykorzystaj metod\u0119 keys(). Dodaj mo\u017cliwo\u015b\u0107 wyszukania\/przegl\u0105dania odpowiedniego terminu w s\u0142owniku. **Zadanie prosz\u0119 zarchiwizowa\u0107 przydatne b\u0119dzie podczas wykonywania projektu**<\/p>\n<h3> &#8211; Przyk\u0142ady u\u017cywane na laboratoriach<\/h3>\n<p>Przyk\u0142ady pochodz\u0105 z ksi\u0105\u017cki<br \/>\n* Podstawow\u0105 ksi\u0105\u017ck\u0105 wykorzystywan\u0105 na laboratorium b\u0119dzie: \u201ePython dla ka\u017cdego. Podstawy programowania Wydanie III\u201d, autor Michael Dawson, Wydawnictwo Helion **(R)**<\/p>\n<h4> Zadanie domowe<\/h4>\n<p>**Wszystkie zadania domowe nale\u017cy archiwizowa\u0107 poniewa\u017c w dalszej cz\u0119\u015bci laboratori\u00f3w b\u0119dziecie je Pa\u0144stwo rozbudowywa\u0107**<br \/>\n* Zobacz: https:\/\/www.youtube.com\/watch?v=AEnCpGdhsaY<br \/>\n* Utw\u00f3rz program wypisuj\u0105cy list\u0119 s\u0142\u00f3w w przypadkowej kolejno\u015bci, a ka\u017cde s\u0142owo wyst\u0119puje na niej tylko raz.<br \/>\n* Napisz program: Kreator postaci, kt\u00f3rego zadaniem jest umo\u017cliwienie u\u017cytkownikowi rozdzielenia punkt\u00f3w podanych przez program (wylosowanych z zakresu od 40-90) na 6 cech: si\u0142a, budowa, zr\u0119czno\u015b\u0107, roztropno\u015b\u0107, inteligencja, charyzma. Spos\u00f3b podzia\u0142u pozostawiamy graczowi jednak \u017cadna z cech nie mo\u017ce mie\u0107 warto\u015bci mniejszej ni\u017c 5 i nie mo\u017ce mie\u0107 warto\u015bci wi\u0119kszej ni\u017c 20.<br \/>\n* Rozbuduj program z konwersj\u0105 daty, tak aby sprawdzi\u0107, czy dzie\u0144 jest z odpowiedniego zakresu, a tak\u017ce dokonaj sprawdzenia, czy podany rok sk\u0142ada si\u0119 z 4 cyfr.<br \/>\n* Rozbuduj program &#8220;Gra w skojarzenia&#8221;, tak aby odpowiednio odmieniane by\u0142o s\u0142owo punkty (1 punkt, 2-4 punkty, 5 punkt\u00f3w, itd.).<br \/>\n* Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 5.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Listy, s\u0142owniki &#8211; Gramy w szubienic\u0119 Do przygotowania przed zaj\u0119ciami * Python dla ka\u017cdego. Podstawy programowania. &#8211; Michael Dawson &#8211; Helion **R** &#8211; Rozdzia\u0142 4. Wprowadzenie. Koniec gry. Cel i tematyka zaj\u0119\u0107 Drugie laboratorium ma na celu utrwalenie wiadomo\u015bci z trzeciego laboratorium oraz wprowadzenie nast\u0119puj\u0105cych element\u00f3w: * listy, * s\u0142owniki, &#8211; Zadanie przypominaj\u0105ce * Napisz [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/294"}],"collection":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=294"}],"version-history":[{"count":2,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/294\/revisions"}],"predecessor-version":[{"id":2230,"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=\/wp\/v2\/pages\/294\/revisions\/2230"}],"wp:attachment":[{"href":"https:\/\/stachura-terlecka.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}