H7 - While : UITWERKINGEN

Opdracht 7.1 Voorspellen wat een while doet


Stroomdiagram voor
functie evenGetallenTot10
  1. Op regel 1 krijgt getal de waarde 0, en op regel 2 wordt dat geprint.
  2. Regel 3: Zolang het getal onder de 10 is, wordt het blok onder de while uitgevoerd.
  3. Regels 4 en 5 horen bij het while-blok en worden dus uitgevoerd: het getal wordt met 2 opgehoogd en daarna geprint.
  4. De code springt terug naar regel 3 en controleert opnieuw of het getal kleiner is dan 10. Is het getal kleiner dan 10, dan wordt de while-loop opnieuw uitgevoerd (regels 4 en 5). Is het getal niet kleiner dan 10, dan springt de code voorbij de while-loop naar regel 7 en wordt geprint: "Klaar!"

Opdracht 7.2 Aftellen

print("Vanaf welk getal wil je aftellen?")
invoer = input()
tijd = int( invoer )
while tijd > 0:
  print("tijd is", tijd)
  tijd -= 1
print("AF!")

Opdracht 7.3 Driehoekkunst

import turtle

### FUNCTIEDEFINITIE

#tekent een driehoek met de gegeven lengte
def tekenDriehoek( lengte ):
    turtle.forward( lengte )
    turtle.right( 120 )
    turtle.forward( lengte )
    turtle.right( 120 )
    turtle.forward( lengte )
    turtle.right( 120 )

def vraagGebruikerOmLengte():
    print("Geef een getal tussen de 50 en 200:")
    invoer = input()
    lengte = int (invoer)
    print( "De eerste driehoek wordt", lengte, "groot.")
    return lengte


### HOOFDPROGRAMMA
turtle.pendown()

lengte = vraagGebruikerOmLengte()
while lengte > 10:
    tekenDriehoek( lengte )
    lengte = lengte - 10              #kan ook met:   lengte -= 10
	
turtle.done()

Opdracht 7.4 Aaa!

aantal_a= 0

while aantal_a < 3:
	print( "a" )
	aantal_a += 1

print("Klaar!")

Opdracht 7.5 Strafregels

aantal_strafregels= 0

while aantal_strafregels < 100:
	print( "Ik mag code van een ander niet kopiëren." )
	aantal_strafregels += 1

print("Klaar!")

Opdracht 7.6 Toegang met wachtwoord

Stappenplan
WACHTWOORD = "Geheim"
goed_geraden = False                #om te beginnen staat de vlag op False

while not goed_geraden:             #herhaal zolang vlag nog op False staat
    print( "Voer wachtwoord in: " ) #vraag het wachtwoord
    invoer = input()
    if invoer == WACHTWOORD:        #goed geraden
        print("Goed zo!")
        goed_geraden = True         #de vlag wordt op True gezet, hierna zal de while loop niet opnieuw uitgevoerd gaan worden
    else:                           #fout geraden
        print("Fout... probeer het opnieuw")

Opdracht 7.7 Raad het geheime getal

import random
#GLOBALE VARIABELEN
TE_RADEN_GETAL = random.randint(0,100) #computer kiest een willekeurig getal tussen 0 en 100 (0 of 100 kan ook)

#HOOFDPROGRAMMA
goed_geraden = False # Maak een logische vlag, om te beginnen staat de vlag op False

while not goed_geraden: #herhaal zolang vlag nog op False staat
    print(  "Gok een getal tussen de 0 en 100 (0 of 100 mag ook)!" )
    invoer = input()
    gebruikers_antwoord = int( invoer )

    if gebruikers_antwoord == TE_RADEN_GETAL: #goed geraden
        print("Goed geraden!")
        goed_geraden = True #de vlag wordt op True gezet, hierna zal de while loop niet opnieuw uitgevoerd gaan worden
    else: #fout geraden
        print("Jammer, fout... probeer het opnieuw")

print("Bedankt voor het spelen")

Opdracht 7.8 Herhaaldelijk complimentjes geven

gebruiker_wil_stoppen = False #  A:  Maak een logische vlag

while not gebruiker_wil_stoppen: # B: Maak een herhaling
  print("Typ 'J' voor een complimentje")
  print("Gebruik een andere toets als je geen complimentje wilt.")
  invoer = input()

  if invoer == "J":
    print( "Ik vind je aardig!" )
  else:
    gebruiker_wil_stoppen = True    # C: pas de vlag aan

print("Wat jammer dat je geen complimentje meer wilt ontvangen.")

Opdracht 7.9 Som van een aantal getallen. De gebruiker geeft het aan als het klaar is

Stappenplan
totaal = 0

klaar = False

while not klaar:                            #zolang niet klaar, herhaal dan
    print("Geef een getal (of 'X' op te stoppen): ")
    invoer = input(  )                      #vraag gebruiker om invoer

    if invoer == 'X':
        klaar = True
    else:
        ingevoerde_getal = int( invoer )    #zet de invoer om in een getal
        print("Je hebt ingevoerd:", ingevoerde_getal )
        totaal += ingevoerde_getal          #tel ingevoerde getal op bij het totaal

print( "Totaal is", totaal )                #druk aan einde het totaal af

Opdracht 7.10 Pincode invoeren

PINCODE = "1234"
pogingen = 0
mag_nog_raden = True

while mag_nog_raden: #herhaal zolang niet juist ingevoerd is

    print( "Voer pincode in: " )
    invoer = input() #vraag om de pincode
    print( "Je hebt ingevoerd:", invoer)

    if invoer == PINCODE:
        print("Toegang verleend")
        mag_nog_raden = False
    else:
        pogingen += 1
        if pogingen < 3:
            print("Fout... probeer het opnieuw.")
        else: # te veel foute pogingen
            print(pogingen, "foutieve pogingen gedaan. Toegang geweigerd.")
            mag_nog_raden = False

Opdracht 7.11 Wachtwoord met bijhouden van aantal foute pogingen

Stappenplan
WACHTWOORD = "GEHEIM"
goed_geraden = False #om te beginnen staat de vlag op False
aantal_foute_pogingen = 0 #om te beginnen zijn nog geen pogingen gedaan

while not goed_geraden: #herhaal zolang nog niet geraden
    print( "Voer wachtwoord in:" )
    ingevoerde_wachtwoord= input( )  #vraag gebruiker om wachtwoord
	print( "Je hebt ingevoerd:", ingevoerde_wachtwoord)

    if ingevoerde_wachtwoord == WACHTWOORD: #er is goed geraden
        print("Wachtwoord is juist!")
        goed_geraden = True #de vlag wordt op True gezet, hierna zal de while-loop niet nog een keer uitgevoerd gaan worden

    else: #fout geraden
        print("Ingevoerde wachtwoord is, fout... probeer het nog een keer") #vlag blijft op niet geraden, de loop wordt weer een keer herhaald
        aantal_foute_pogingen += 1
        print("Aantal foute pogingen:", aantal_foute_pogingen)

H7 - Afsluitende opdrachten : UITWERKINGEN

Afsluitende opdracht 7.1 Rekenspel

import random

spel_afgelopen = False #om te beginnen is spel nog niet afgelopen

while not spel_afgelopen: #zolang spel nog niet is afgelopen, herhaal dan:
    #bepaal willekeurige getallen
    getal1 = random.randint(0,10)
    getal2 = random.randint(0,10)

    #vraag gebruiker om antwoord en sla op als int
    print("Hoeveel is " + str(getal1) + " + " + str(getal2) + "?")
    invoer = input()
    antwoord = int( invoer )

    #controleer of antwoord correct is
    if antwoord == (getal1 + getal2):
        print("Goed zo! Je krijgt nog een som.")
    else: #antwoord fout, spel afgelopen

        print("Jammer, je bent af.")
        print("Het antwoord was: "+ str(getal1) + " + " + str(getal2) + " = " + str(getal1 + getal2) )
		spel_afgelopen = True #pas vlag aan, spel is nu afgelopen


print("Bedankt voor het spelen.")

Afsluitende opdracht 7.2 Rekenspel met punten

import random

punten = 100
spel_afgelopen = False #om te beginnen is spel nog niet afgelopen

while not spel_afgelopen: #zolang spel nog niet is afgelopen, herhaal dan:
    #bepaal willekeurige getallen
    getal1 = random.randint(0,10)
    getal2 = random.randint(0,10)

    #vraag gebruiker om antwoord en sla op als int
    print("Hoeveel is " + str(getal1) + " * " + str(getal2) + "?")
    invoer = input()
    antwoord = int( invoer )

    #controleer of antwoord correct is
    if antwoord == (getal1 * getal2):
        punten += 10 #antwoord goed, 10 punten er bij
        print("Goed zo! Je score is nu" + str(punten) +".")
        print("Je krijgt nog een opgave.")

    else: #antwoord fout, spel afgelopen
        punten -= 10 #antwoord fout, 10 punten eraf
        print("Jammer, fout")
        print("Je score is nu" + str(punten) +".")
        print("Het goede antwoord was: "+ str(getal1) + " * " + str(getal2) + " = " + str(getal1 + getal2) )


    if punten == 0:
        spel_afgelopen = True #pas vlag aan, spel is nu afgelopen
	    print("Jammer! Je bent nu af.")

print("Bedankt voor het spelen." )
Extra uitdaging:
import random

spel_afgelopen = False
punten = 100
#vraag naar type bewerking
bewerking = input("Geef aan welk type opdracht je wil maken door de juiste operator in te typen. Kies uit +, -, * of /: ")


while not spel_afgelopen:
  getal1 =   random.randint(0,10)
  getal2 =   random.randint(0,10)
  if bewerking == "+":
    print("Wat is de som van", getal1, "en", getal2)
    antwoord = int(input("Voer je antwoord in: "))
    if antwoord == getal1 + getal2:
      punten += 10
      print("Goed zo! Je score is nu" + str(punten) +".")
      print("Je krijgt nog een opgave.")
    else:
      punten -= 10
      print("Helaas! Fout! Je score is nu" + str(punten) +".")
      print("Het goede antwoord was", getal1 + getal2, ".")

  elif bewerking == "-":
    print("Wat is het verschil van", getal1, "en", getal2)
    antwoord = int(input("Voer je antwoord in: "))
    if antwoord == getal1 - getal2:
      punten += 10
      print("Goed zo! Je score is nu" + str(punten) + ".")
      print("Je krijgt nog een opgave.")
    else:
      punten -= 10
      print("Helaas! Fout! Je score is nu" + str(punten) +".")
      print("Het goede antwoord was", getal1 - getal2, ".")


  elif bewerking == "*":
    print("Wat is het product van", getal1, "en", getal2)
    antwoord = int(input("Voer je antwoord in: "))
    if antwoord == getal1 * getal2:
      punten += 10
      print("Goed zo! Je score is nu" + str(punten) + ".")
      print("Je krijgt nog een opgave.")
    else:
      punten -= 10
      print("Helaas! Fout! Je score is nu" + str(punten) +".")
      print("Het goede antwoord was", getal1 * getal2, ".")		


  elif bewerking == "/":
        if getal2 == 0:                                      # delen door nul is niet gedefinieerd
            getal2 = random.randint(1,10)                   # zet ondergrens op 1

        print("Wat is het quotiënt van", getal1, "en", getal2, ". Denk aan de decimale punt. Geef maximaal twee decimalen.")
        antwoord = round(float(input("Voer je antwoord in: ")),2)
        if antwoord == round(getal1 / getal2,2):
      	    punten += 10
      	    print("Goed zo! Je score is nu" + str(punten) + ".")
            print("Je krijgt nog een opgave.")
        else:
      	    punten -= 10
      	    print("Helaas! Fout! Je score is nu" + str(punten) +".")
            print("Het goede antwoord was", round(getal1 / getal2,2), ".")

  else:
        print("Dat is een onbekende bewerking.")
        punten = 0

if punten == 0:
        spel_afgelopen = True
        print("Jammer! Je bent nu af.")


print("Bedankt voor het spelen.")

Afsluitende opdracht 7.3 Krimpende spirograaf

import turtle

### FUNCTIEDEFINITIE

#tekent een vierkant door 4 keer vooruit de gegeven lengte vooruit te lopen en 90 graden te draaien.
def tekenVierkant( lengte ):
	turtle.forward( lengte )
	turtle.right( 90 )
	turtle.forward( lengte )
	turtle.right( 90 )
	turtle.forward( lengte )
	turtle.right( 90 )
	turtle.forward( lengte )
	turtle.right( 90 )



def vraagGebruikerOmLengte():
    print("Geef een getal tussen de 50 en 400:")
    invoer = input()
    lengte = int (invoer)
    print( "Het eerste vierkant wordt", lengte, "groot.")
    return lengte

### HOOFDPROGRAMMA

turtle.pendown()
lengte = vraagGebruikerOmLengte()
while lengte > 10:
    tekenVierkant( lengte )
    turtle.right(15)
    lengte -= 10
turtle.done()

Afsluitende opdracht 7.4 Som berekenen

som = 0
klaar = False

while not klaar:                            #zolang niet klaar, herhaal dan
    print("Geef een getal (of 'X' om te stoppen): ")
    invoer = input(  )                      #vraag gebruiker om invoer

    if invoer == 'X':                       #gebruiker wil stoppen
        klaar = True                        #pas de logische vlag aan
    else:
        ingevoerde_getal = int( invoer )    #zet de invoer om in een getal
        print("Je hebt ingevoerd", ingevoerde_getal )
        som += ingevoerde_getal             #tel de ingevoerde getal op bij de som

print( "Som is", som )                      #druk aan einde de som af

Afsluitende opdracht 7.5 Gemiddelde berekenen

som = 0
aantal_getallen_ingevoerd = 0
klaar = False       # zet de logische vla op False

while not klaar:                            #zolang niet klaar, herhaal dan
    print("Geef een getal (of 'X' op te stoppen): ")
    invoer = input(  )                      #vraag gebruiker om invoer

    if invoer == 'X':                       #gebruiker wil stoppen
        klaar = True                        #pas de logische vlag aan
    else:
        aantal_getallen_ingevoerd += 1      #verhoog het aantal ingevoerd
        ingevoerde_getal = int( invoer )    #zet de invoer om in een getal
        print("Je hebt ingevoerd", ingevoerde_getal )
        som += ingevoerde_getal             #tel de ingevoerde getal op bij de som

if aantal_getallen_ingevoerd == 0 :         #als er geen getallen zijn ingevoerd, kan de gemiddelde niet berekend worden
    print("Er zijn helemaal geen getallen ingevoerd.")
else:
    print( "Som is", som )                      #druk aan einde de som af
    gemiddelde = som/aantal_getallen_ingevoerd  #bereken het gemiddelde
    print( "Het gemiddelde is", gemiddelde)     #druk de gemiddelde af