Ügyességi játékok programozása
Pythonnal és Pygame-mel

Chapter 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

  1. Í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

  2. Í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

  3. 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

  4. 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

  5. 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

  6. Í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

  7. 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

  8. Í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.php

    Bizonyosodj 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.

  9. Í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

  10. Í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

  11. Í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

  12. Í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

  13. Í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.