Ügyességi játékok programozása
Pythonnal és Pygame-melChapter 6: Vissza a ciklusokhoz!
A játékokban egy csomó összetett ciklussal találkozhatunk. Ez egy "kihívásos fejezet", azért, hogy megtanuld, hogyan tehetsz szert tapasztalatra a ciklusokkal kapcsolatban. Ha megérted a problémákat ebben a fejezetben, akkor már jogosan nevezheted magad ciklus-szakértőnek.
Ha a ciklus-szakértőség nem a te igazi álmod, akkor is legalább legyél bizonyos abban, hogy meg tudod válaszolni az első nyolc problémát. Ez már elegendő tudást biztosít a számodra ahhoz, hogy folytasd a könyv olvasását. (Noha, egy ciklus szakértővel se randizott még senki. Legfeljebb a fickóval, az Idétlen Időkig c. filmből.)
Filmes példákkal is szemléltettem ebben a fejezetben, és a válaszhoz meg kell adni a válaszkódot, ami: "animates". Csak klikkelj a "step" gombra és lesd meg, a kód működését.
6.1 Kiíratás parancs utolsó karaktere
Alapértelmezett esetben a print parancs egy sor elejére mozgatást tesz a végére a mondandójának. Ahogy azt az első fejezetben is elmagyaráztuk. Az elejére mozgatás egy karakter, ami a következő kiíratási sort a következő sor elejére helyezi. A legtöbb esetben mi is ezt akarjuk. Néha azonban nem. Ha folytatólagosan szeretnénk írni, akkor meg kell ezt változtatnunk. Itt egy példa, mielőtt megváltoztatnánk az utolsó karaktert:
print("Pink") print("Octopus")
...ami ki fogja íratni az alábbit:
Pink Octopus
De mi van akkor, ha mi a kiíratást ugyanabba a vonalba szeretnénk látni. Erre is lehetőség van, ehhez az end utasítást fogjuk használni. Például:
print("Pink", end="") print("Octopus")
Ennek a kimenete:
PinkOctopus
Tehetünk bele egy space-t is, mint üres karaktert:
print("Pink", end=" ") print("Octopus")
Ezt fogja kiírni:
Pink Octopus
Itt van még egy példa, most változóval:
i = 0 print(i, end=" ") i = 1 print(i, end=" ")
Ez pedig kiírja, hogy:
0 1
6.2 Haladó ciklus problémák
- Írj egy programot, ami kiír tíz darab csillagot (*), valahogy így:
* * * * * * * * * *
Ennél a kódnál használd a for ciklust, és ne egyenként írasd ki a csillagokat. Ez két sor kód lesz, egy for ciklus és egy print parancs.
Ha már kész vagy vele, vagy feladtad, akkor itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_1.php - Írj egy kódot, ami az alábbit fogja kiírni:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Ez hasonló az első problémához, csak öt és húsz csillaggal. Másold át az első problémát, és egészítsd ki a for ciklust ott, ahol szükséges.
Ha már kész vagy vele, vagy feladtad, akkor itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_2.php - Használj két for ciklust, egyiket a másikba ágyazva, ahhoz, hogy megkapd
az alábbi 10x10-s négyszöget:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Először vess egy pillantást az első problémára. Az első probléma egy sor csillagot készít. Ezt kell megismételtetni 10-szer. Dolgozz ezen a problémán legalább 10 percen keresztül, mielőtt meglesnéd a választ!
Ha már kész vagy vele, vagy feladtad, akkor itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/10x10box.php - Használj két for ciklust, egymásba ágyazva, hogy kirajzoltasd az alábbi 5x10
négyszöget:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Ez is egy kicsit olyan, mint az első probléma. Tapasztald ki, hogy milyen tartományban kell a ciklusnak mozognia, ehhez használhatod a range függvényt is.
Ha már kész vagy vele, vagy feladtad, akkor itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_4.php - Használj két for ciklust, egymásba ágyazva ahhoz, hogy megkapd az alábbi 20x5
négyszöget:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Újfent, ahogyan a 3-as és 4-es problémáknál, csak más értékekkel.
Ha már kész vagy vele, vagy feladtad, akkor itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_5.php - Írj egy kódot, ami a következőt jeleníti meg:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Használj egymásba ágyazott ciklusokat. Írasd ki az első sort ciklussal és ne így:
print("0 1 2 3 4 5 6 7 8 9")
Tipp: Először, készíts egy ciklust, ami kiírja az első sort. Azután tedd bele egy másik ciklusba, ami 10-szer ismétlődik. Használhatod az i és j változókat a kiíratáshoz. Ez a példa, és a következő segít téged megbizonyosodni abban, ahogy ezek az index változók működnek.
Dolgozz legalább tíz pecig, mielőtt a válasz után néznél. Az, ahogyan tíz percig dolgozol a válaszon, sokkal fontosabb, mint maga a válasz.
ProgramArcadeGames.com/chapters/06_back_to_looping/number_square_answer.php - A fenti programot egészítsd ki, hogy ezt írja ki:
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9
Válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_7.php - Írj egy kódot, ami a következőt írja ki:
0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 4 5 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9
Tipp: Ez a hatos problémához hasonló, csak itt a belső ciklusnak nem meghatározott értékszer kell végrehajtódnia. Ne használd a range(10), hanem helyettesítsd.
Ha már dolgozál tíz percig a problémán, itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/top_right_triangle.phpBizonyosodj meg róla, hogy erre a problémára írtad meg a kódot. Igen, ez a gyakorlás működik, de ez majd később lesz kifizetődő, és időt fogsz megtakarítani.
-
Írj egy kódot, ami a következő kimenetet adja:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
Ez itt már nehéz. Tipp: Két ciklus kell a külső cikluson belül, ami irányítja mindegyik sort. Először, egy ciklus space-t írat ki, azután egy ciklus kiírja a számokat. Ezeket kell ciklikussá tenni minden sorban. Ahhoz, hogy elindulj, próbáld meg ezt kiíratni előbb:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
Ha már ez működik, adj egy ciklust hozzá a két ciklus közé. Használd ezt arra, hogy elég space-t írjon ki, mielőtt a másik kettő dolgozna.
Ha már dolgozál tíz percig a problémán, itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/bottom_left_triangle.php - Írj egy kódot, ami a következőt fogja megjeleníteni.
(Az igazítás már nehézkes, csak a számokkal törődj)
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Tipp: Indulj el azzal a kóddal, amivel az első problémával, és írasd ki:
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27 0 4 8 12 16 20 24 28 32 36 0 5 10 15 20 25 30 35 40 45 0 6 12 18 24 30 36 42 48 54 0 7 14 21 28 35 42 49 56 63 0 8 16 24 32 40 48 56 64 72 0 9 18 27 36 45 54 63 72 81
Azután alakítsd át a kódot, hogy ezt kapd:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
Végül, használj egy if parancsot, hogy a space-t kiírasd, ha a szám 10-nél kisebb.
Ha már dolgozál tíz percig a problémán, itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/multiplication_table.php - Írj egy kódot, ami az alábbit fogja kirajzolni:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
Tipp: Először ezt írd meg:
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9
Azután ezt:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
Végül adj space-t, hogy megkapd a végső választ.
Ha már dolgozál tíz percig a problémán, itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/top_triangle.php - Írj egy kódot, ami az alábbit írja ki:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1
Ezt megteheted, ha a 11-s éés 9-s feladatot kombinálod.
Ha már dolgozál tíz percig a problémán, itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/three_quarters.php - Írj egy kódot, ami ki fogja rajzolni az alábbit:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1
Ha már dolgozál tíz percig a problémán, itt a válasz:
ProgramArcadeGames.com/chapters/06_back_to_looping/full_diamond.php
6.3 Review
6.3.1 Multiple Choice Quiz
Click here for a multiple-choice quiz.
6.3.2 Short Answer Worksheet
Click here for the chapter worksheet.
6.3.3 Lab
Click here for the chapter lab.
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin