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


You are not logged in. Log in here and track your progress.