Program Arcade Games With Python And Pygame

Program Arcade Games
With Python And Pygame

Chapter 6: Terug naar lussen

Games maken gebruik van heel wat complexe lussen. Dit is een “uitdagend hoofdstuk” om expert te worden in het gebruik van lussen. Wanneer je de problematiek op het einde van het hoofdstuk onder de knie hebt, mag je zichzelf benoemen tot lus expert.

Wanneer het niet je doel is om lus expert te worden, is het toch de bedoeling dat je de eerste acht problemen kan oplossen. Dat geeft je voldoende kennis om door te gaan met de rest van het boek.

Er staat een video met uitleg over de antwoorden online en je kan ook gebruik maken van de animatie door op de “stap” button te klikken.

6.1 Print Statement en zijn afsluitcharacters

Standaard zet het print statement een carriage return aan het einde van wat er moet geprint worden. Zoals we reeds hebben uitgelegd in het eerste hoofdstuk, is een carriage return een character dat je naar het begin van de volgende lijn brengt. Meestal willen we dt ook en is er geen probleem, maar soms willen we dat niet. Wanneer we verder willen printen op dezelfde lijn kunnen we dit standaard character aan het eind van de lijn ook vervangen. Dit is een voorbeeld waar we de carriage return vervangen.

print("Pink")
print("Octopus")

...zal geprint worden als volgt :

Pink
Octopus

Maar wanneer we de output van de print op dezelfde lijn willen brengen, doen we dit door het afsluitcharacter te wijzigen. Bijvoorbeeld :

print("Pink", end="")
print("Octopus")

Hier wordt hetvolgende geprint :

PinkOctopus

We kunnen ook een spatie gebruiken in plaats van een lege string :

print("Pink", end=" ")
print("Octopus")

Nu wordt dit geprint :

Pink Octopus

Hier is een ander voorbeeld door gebruik te maken van een variabele :

i = 0
print(i, end=" ")
i = 1
print(i, end=" ")

Dit wordt er geprint :

0 1

6.2 Lusproblemen voor gevorderden

  1. Schrijf de code die 10 sterretjes (*) print als volgt :
    * * * * * * * * * *
    

    Gebruik hiervoor een for lus en zorg ervoor dat elk sterretje apart wordt geprint in plaats van meteen 10 sterretjes te printen met 1 print statement. Dit kan je doen in 2 lijnen code; 1 voor de for lus en 1 voor het print statement.

    Wanneer je klaar bent of wanneer je het opgeeft kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/problem_1.php

  2. Schrijf nu de code dat het volgende print :
    * * * * * * * * * *
    * * * * *
    * * * * * * * * * * * * * * * * * * * *
    

    Dit is dezelfde situatie, maar daarbij worden ook nog eens 5 sterren en 20 sterren geprint. Je kan hier gerust werken met copy en paste en pas de for lus aan waar nodig.

    Wanneer je klaar bent of wanneer je het opgeeft kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/problem_2.php

  3. Gebruik 2 for lussen, de ene bevindt zich in de andere (nesting) en print met sterretjes een rechthoek van 10x10 :
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    * * * * * * * * * *
    

    Vertrek van probleem 1. De code in probleem 1 genereert 1 lijn van sterretjes. Dit moet je nu 10 keer doen. Probeer minstens 10 minuten vooraleer je naar het antwoord gaat kijken.

    >Wanneer je klaar bent of wanneer je het opgeeft kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/10x10box.php

  4. Gebruik 2 for lussen, de ene genest in de andere, om de volgende rechthoek van 5x10 te printen :
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    * * * * *
    

    Dit is gelijkaardig met het vorig probleem. Experimenteer wat om te zien welke getallen invloed hebbenn op welke range.

    >Wanneer je klaar bent of wanneer je het opgeeft kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/problem_4.php

  5. Gebruik 2 for lussen, de ene genest in de andere om een rechthoek te printen van 20x5 :
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    * * * * * * * * * * * * * * * * * * * *
    

    Opnieuw hetzelfde als probleem 3 en 4, maar met andere waarden.

    >Wanneer je klaar bent of wanneer je het opgeeft kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/problem_5.php

  6. Schrijf de code dat het volgende print :
    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
    

    Gebruik 2 geneste lussen. Print de eerste lijn met een lus en niet met :

    print("0 1 2 3 4 5 6 7 8 9")
    

    Tip: Maak eerst een lus dat de eerste lijn print. Dan omsluit je de lus met een andere en herhaal je die lus 10 keer. Gebruik ofwel i of j als variabele voor het print programma. Dit voorbeeld en de volgende helpen je om te tonen wat er gebeurt met de index variabelen.

    Werk minstens 10 minuten aan deze oefening alvorens naar het antwoord te gaan kijken. Het begrijpen wat hier nodig is en hoe het werkt is hier veel belangrijker dan het antwoord zelf.
    ProgramArcadeGames.com/chapters/06_back_to_looping/number_square_answer.php

  7. Pas het vorige programma aan en print:
    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 
    

    Antwoord :
    ProgramArcadeGames.com/chapters/06_back_to_looping/problem_7.php

  8. Schrijf de code dat het volgende print :
    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
    

    Tip: Dit is zoals probleem 6, maar de binnenste lus heeft geen is vast getal, maar een variabele. Gebruik dus niet range(10)...

    Heb je minstens 10 minuten gewerkt aan deze oefening kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/top_right_triangle.php

    Bewaar zeker de code van deze oefeningen want dergelijke oefeningen zijn zeer belangrijk en zullen je achteraf veel tijd doen besparen.

  9. Schrijf de code dat hetvolgende print :
    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
    

    Dit is een moeilijke. Tip: Twee lussen zijn nodig binnen een andere lus die de rijen controleert. Eerst is er een lus dat spaties print, dan een lus dat getallen print. Om te beginnen kan je eerst hetvolgende printen :

    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
    

    Wanneer dit lukt, maak je binnenin een nieuwe lus dat juist genoeg spaties print dat er nodig zijn om rechts te alligneren.

    Heb je minstens 10 minuten gewerkt aan deze oefening kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/bottom_left_triangle.php

  10. Schrijf de code dat hetvolgende print (Het alligneren is moeilijk, probeer eerst de getallen):
      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 
    

    Tip: Start met het aanpassen van de code in probleem 1 :

     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 
    

    Dan pas je de code aan zodat je hetvolgende krijgt :

     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 
    

    Tenslotte gebruik je het if statement om de spaties te printen indien de getallen kleiner zijn dan 10.

    Heb je minstens 10 minuten gewerkt aan deze oefening kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/multiplication_table.php

  11. Schrijf de code dat het volgende print:
                      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
    

    Tip: schrijf eerst de code die dit print :

    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 
    

    Schrijf nu de code die dit print :

    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 
      

    Probeer tenslotte de spaties toe te voegen om het uiteindelijk resultaat te krijgen.

    Heb je minstens 10 minuten gewerkt aan deze oefening kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/top_triangle.php

  12. Schrijf de code die het volgende print :
                      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
    

    Dit kan je doen door probleem 11 en 9 te combineren.

    Heb je minstens 10 minuten gewerkt aan deze oefening kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/three_quarters.php

  13. Schrijf de code die hetvolgende print :
                      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
    
    
    

    Heb je minstens 10 minuten gewerkt aan deze oefening kan je hier het antwoord vinden :
    ProgramArcadeGames.com/chapters/06_back_to_looping/full_diamond.php

6.3 Herhaling

6.3.1 Multiple Choice kwis

Click here for a multiple-choice quiz.

6.3.2 Korte inhoud werkblad

Click here for the chapter worksheet.

6.3.3 Oefening

Click here for the chapter lab.


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