ASCII Art#

In deze opgave bekijk je een klassieke kunstvorm: ASCII art!

Waarschuwing

Bij de volgende opgaven geldt een belangrijke beperking!

In deze opgave mag je de string-vermenigvuldigs- en string-opteloperatoren niet gebruiken. Omdat ons doel is om lusconstructies te gebruiken, moet je lussen gebruiken om te herhalen, ook als het met deze operatoren korter zou kunnen. Hier is Ă©Ă©n uitzondering op, echter; je mag string-vermenigvuldiging gebruiken met het spatieteken " ". Dat wil zeggen, je mag een aantal opeenvolgende spaties maken met constructies als

" "*5

Tip

Eerst ontwerpen!

De bedoeling van deze opgave is om je redeneervermogen over lussen en geneste lussen verder te vergroten. Voor veel van de opgaves (met name de gestreepte ruit) moet je zorgvuldig nadenken over de waarde van je luscontrolevariabele tijdens het uitvoeren van je lus of lussen. “Debuggen door willekeurige wijzingingen”; dat wil zeggen, je luscondities of variabelen willekeurig wijzigen; zal tot veel frustratie leiden. De oplossing is om goed na te denken over je lussen!

Opgave 1#

Schrijf een functie print_rect die drie argumenten width, height en symbol accepteert, en een rechthoek van width bij height met symbolen afdrukt op het scherm.

In [1]: print_rect(4, 6, "%")
Out:
% % % %
% % % %
% % % %
% % % %
% % % %
% % % %

Tip

Als je de voorbeelden van geneste lussen bekijkt, zul je zien dat deze opgave daar behandeld wordt! De enige verschillen zijn dat

  • De breedte een variabele is, in plaats van een constante

  • De hoogte een variabele is, in plaats van een constante

  • Het af te drukken teken een variabele is, in plaats van een constante

# jouw oplossing

Opdracht 2#

Schrijf een functie print_triangle die drie argumenten width, symbol en right_side_up accepteert, en een driehoek van symbolen op het scherm afdrukt.

width is een getal die de breedte van de basis van de driehoek bepaalt en right_side_up is een boolean die bepaalt of de driehoek met de punt naar boven (True) of naar onder (False) moet worden afgedrukt.

In [1]: print_triangle(3, "@", True)
Out:
@
@ @
@ @ @

In [2]: print_triangle(3, "@", False)
Out:
@ @ @
@ @
@
# jouw oplossing

Opdracht 3#

Gebruik nu jouw functie print_triangle om een functie print_bumps(num, symbol1, symbol2) te schrijven die het gegeven aantal “heuvels” van twee symbolen afdrukt, waarbij elke heuvel groter is dan de volgende, zoals in het volgende voorbeeld:

In [1]: print_bumps(4, "%", "#")
Out:
%
#
%
% %
# #
#
%
% %
% % %
# # #
# #
#
%
% %
% % %
% % % %
# # # #
# # #
# #
#
# jouw oplossing

Opdracht 4#

Voor deze en de volgende “ruit”-functies mag je string-vermenigvuldiging gebruiken, maar alleen voor strings van spaties, zoals " " * n en dergelijke. Elk zichtbaar karakter moet afzonderlijk afgedrukt worden, net zoals in de functies van de eerdere opgaven. Het is echter niet verplicht om de operator * te gebruiken voor strings van spaties.

Schrijf een functie print_diamond(width, symbol) die een ruit met symbol-en afdrukt waarvan de maximale breedte bepaald wordt door width.

In [1]: print_diamond(3, "&")
Out:
   &
  & &
 & & &
  & &
   &
# jouw oplossing

Opdracht 5#

Schrijf nu een functie print_striped_diamond(width, sym1, sym2) die een “gestreepte ruit” van sym1 en sym2 afdrukt.

Bijvoorbeeld:

In [1]: print_striped_diamond(7, ".", "%")
Out:
      .
     . %
    . % .
   . % . %
  . % . % .
 . % . % . %
. % . % . % .
 % . % . % .
  . % . % .
   % . % .
    . % .
     % .
      .
# jouw oplossing

Opdracht 6#

Een uitdaging!

Schrijf tot slot een functie print_crazy_striped_diamond(width, sym1, sym2, sym1_width, sym2_width) die een “gestreepte ruit” van sym1 en sym2 afdrukt waarbij de strepen verschillende breedtes kunnen hebben.

  • sym1_width bepaalt de breedte van de streep gemaakt van symbool 1

  • sym2_width bepaalt de breedte van de streep gemaakt van symbool 2.

In [1]: print_crazy_striped_diamond(7, ".", "%", 2, 1)
Out:
      .
     . .
    . . %
   . . % .
  . . % . .
 . . % . . %
. . % . . % .
 . % . . % .
  % . . % .
   . . % .
    . % .
     % .
      .
# jouw oplossing