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 symbol
en 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 1sym2_width
bepaalt de breedte van de streep gemaakt van symbool 2.
In [1]: print_crazy_striped_diamond(7, ".", "%", 2, 1)
Out:
.
. .
. . %
. . % .
. . % . .
. . % . . %
. . % . . % .
. % . . % .
% . . % .
. . % .
. % .
% .
.
# jouw oplossing