Les 7: Meerdere oplossingen voor één probleem

Afdrukken

Op het einde van les 6 hebben jullie een paar opdrachtjes gekregen.
In deze les gaan we eens bekijken hoe we die kunnen oplossen.
Wat was de eerste opdracht alweer?

Kun jij je programma nu zo veranderen dat het vraagt tot hoever je de tafel wil laten uitrekenen?

Daar we met een nieuw lesje bezig zijn, laat ons dan ook een nieuw bestand aanmaken.
Zit je nog in python, dan verlaten we python met volgend commando:

exit()

Nu kunnen we een kopie maken van les 6 als volgt:

copy lesje6.py lesje7.py

En we openen lesje7.py met notepad:

notepad lesje7.py

We hebben alvast een 2de input veld nodig zodat het programma weet tot hoever de tafel moet gaan.
Zo ziet mijn programma er uit:

getal = input("Welke tafel wil je zien? De tafel van ...")
teller = input("Tot hoe ver wil je de tafel zien: ")
print ("Dit is de tafel van ", getal)
getal = int(getal); teller = int(teller)
print ("-----------------------")
for i in range(1,teller):
    print(i, " x ", getal, " = ", i * getal)

Valt je iets speciaals op aan het programma?
Hier worden 2 opdrachten op 1 regel uitgevoerd:

getal = int(getal); teller = int(teller)

Als je op dezelfde lijn een extra opdracht wilt uitvoeren, dan gebruik je een ";" als scheidingsteken voor de opdrachten.
Je kan zo wel 5 opdrachten op 1 regel plaatsten:

getal1 = 1; getal2 = 2; getal3 = 3; getal4 = 4; getal5 = getal3 + getal4

Maar zet ook niet teveel opdrachten op één regel. Probeer er steeds voor te zorgen dat je gemakkelijk je programma kunt lezen.
Als ik het programma opstart is dat wat er op het scherm komt:

D:\Python33\Voorbeelden>python lesje7.py
Welke tafel wil je zien? De tafel van ...4
Tot hoe ver wil je de tafel zien: 5
Dit is de tafel van  4
-----------------------
1  x  4  =  4
2  x  4  =  8
3  x  4  =  12
4  x  4  =  16

Ik vind het wel jammer dat het programma maar tot 4 gaat, terwijl het eigenlijk tot 5 zou moeten gaan.
En dat was ook de 2de opdracht: kun je ervoorzorgen dat het programma exact de tafel geeft?

Oplossing 1:

getal = input("Welke tafel wil je zien? De tafel van ...")
teller = input("Tot hoe ver wil je de tafel zien: ")
print ("Dit is de tafel van ", getal)
getal = int(getal); teller = int(teller) + 1
print ("-----------------------")
for i in range(1,teller):
    print(i, " x ", getal, " = ", i * getal)

Met het commando teller = int(teller) + 1 zorg ik ervoor de inhoud van de teller verhoogd wordt met 1.

Oplossing 2:

getal = input("Welke tafel wil je zien? De tafel van ...")
teller = input("Tot hoe ver wil je de tafel zien: ")
print ("Dit is de tafel van ", getal)
getal = int(getal); teller = int(teller)
print ("-----------------------")
for i in range(1,teller + 1):
    print(i, " x ", getal, " = ", i * getal)

Hier laat ik de inhoud van teller zoals die is, maar in de range zorg ik ervoor de lus draait tot teller + 1

Oplossing 3:

getal = input("Welke tafel wil je zien? De tafel van ...")
teller = int(input("Tot hoe ver wil je de tafel zien: ")) + 1
print ("Dit is de tafel van ", getal)
getal = int(getal); teller = int(teller)
print ("-----------------------")
for i in range(1,teller):
    print(i, " x ", getal, " = ", i * getal)

Vind je die moeilijk om te begrijpen? Op de 2de lijn wordt een functie binnen een functie gebruikt.

Oplossing 4:

getal = input("Welke tafel wil je zien? De tafel van ...")
teller = input("Tot hoe ver wil je de tafel zien: ")
print ("Dit is de tafel van ", getal)
getal = int(getal); teller = int(teller)
print ("-----------------------")
for i in range(1,teller):
    print(i, " x ", getal, " = ", i * getal)
print (teller, " x ", getal, " = ", teller * getal)

Deze oplossing vind ik niet zo mooi en is zelfs een beetje dom. De lus gaat niet ver genoeg en dat lossen we op door een extra print opdracht op het einde.

Oplossing 5:

getal = input('Welke tafel wil je zien? De tafel van ')
tot = input('Tot hoever? Wil je alsjeblieft 1 meer typen dan hoever je eigenlijk wil, dus als je tot en met tien wil type je elf. Tot ')
print ('De tafel van', getal)
getal = int(getal); tot = int(tot)
for i in range(1, tot):
    print (i, 'x', getal, '=', i * getal)

De laatste oplossing is eigenlijk niet echt een oplossing: we vragen gewoon aan de gebruiker om het op te lossen.
Het werkt wel, natuurlijk, maar het is leuker om de computer het werk te laten doen, in plaats van de gebruiker.

Wat heb je geleerd?

Dit was wel weer een moeilijke les. Maar je hebt een paar heel belangrijke dingen geleerd.

  • Je programma kan nu vragen welke tafel je wilt laten zien, maar ook tot hoever.
  • De computer kan rekenen met variabelen op allerlei plekken, bijvoorbeeld in range(1, teller + 1).
  • Je kan nieuwe variabelen maken met behulp van oude variabelen, bijvoorbeeld totteller = teller + 1.
  • Het is leuker om de computer slim te laten zijn dan de gebruiker.
  • De regels die naar binnen staan (4 spaties aan het begin) horen bij de for-lus. De regels die weer gewoon staan horen er niet meer bij.
  • Soms zijn er een heleboel oplossingen voor hetzelfde probleem.
  • Er bestaan slimme en minder slimme oplossingen

 

Plaats reactie


Beveiligingscode
Vernieuwen

Thursday the 21st. . Bigcommerce review - All rights reserved.