Python Cursus. Hoofdstuk 7 - Iteraties Gemengde Opgaven: While en For-loop

Uitwerkingen Gemengde Opgaven

Terug naar de uitleg en gewone opgaven over For-loops
Terug naar de uitleg en gewone opgaven over While-loops
Terug naar de cursus pagina

Gemengde opgave 7.0 Kleurrijke Spirograaf

import turtle
import random

#GLOBALE VARIABELEN
kleurenlijst = ["red", "green", "yellow", "blue"]

#HOOFDPROGRAMMA
turtle.pendown()
turtle.speed(100) #iets sneller laten tekenen

grootte = 200
while grootte > 10:
	kleur = random.choice(kleurenlijst)
	turtle.pencolor(kleur)
	turtle.forward(grootte)
	turtle.right(65)
	grootte -= 1 #grootte steeds met 1 kleiner maken

turtle.done()

Gemengde opgave 7.1a Letters gemeen

woord1 = input( "Geef woord 1: " )
woord2 = input( "Geef woord 2: " )
letters_gemeen = "" #om gemeenschappelijke letters in op te slaan

for letter in woord1:
	if (letter in woord2):
		if (letter not in letters_gemeen): #was nog niet gevonden
			print( "Letter", letter, "zit in beide woorden" )
			letters_gemeen += letter #voeg toe

Afsluitende opgave 7.1b Aantal letters gemeen

Zonder functies:
woord1 = input( "Geef woord 1: " )
woord2 = input( "Geef woord 2: " )
letters_gemeen = ""

for letter in woord1:
    if (letter in woord2) and (letter not in letters_gemeen):
        letters_gemeen += letter

if letters_gemeen == "":
    print( "De woorden hebben geen tekens gemeen." )
else:
    print( "De woorden delen de volgende tekens:", letters_gemeen )
of met gebruik van functies:
#FUNCTIE DEFINTIE
# de functie gemeen krijgt twee strings als parameters.
# Het retourneert het aantal tekens dat de strings gemeen hebben.
def bepaalLettersGemeen( woord1, woord2 ):
    tekens_overeenkomstig = ""
    for letter in woord1:
        if (letter in woord2) and (letter not in tekens_overeenkomstig):
            tekens_overeenkomstig += letter
    aantal_tekens_overeenkomstig =  len( tekens_overeenkomstig )
    return aantal_tekens_overeenkomstig


#HOOFDPROGRAMMA
#gebruiker om invoer vragen
ingevoerdeWoord1 = input( "Geef woord 1: " )
ingevoerdeWoord2 = input( "Geef woord 2: " )

aantal_letters_gemeen = bepaalLettersGemeen( ingevoerdeWoord1, ingevoerdeWoord2 )

#geef feedback aan gebruiker
if aantal_letters_gemeen <= 0:
    print( "De woorden delen geen tekens." )
elif aantal_letters_gemeen == 1:
    print( "De woorden hebben 1 teken gemeen." )
else:
    print( "De woorden hebben", aantal_letters_gemeen, "tekens gemeen." )

Gemengde opgave 7.2 Zessen tellen

#Opgave Zessen tellen

#random library importeren:
import random

#invoer vragen:
invoer = input("Hoeveel dobbelstenen? ")
aantal = int( invoer )

#teller voor aantal zessen aanmaken:
zessen_teller = 0

#loop om alle dobbelstenen gooien:
for i in range (0, aantal):

    #losse worp met een dobbelsteen:
    dobbel = random.randint(1,6)

    #checken of het een 6 is
    if dobbel == 6:
        zessen_teller = zessen_teller + 1

# de loop is klaar, dus we kunnen ons antwoord afdrukken:
print ( "Het aantal zessen in", aantal, "worpen was:", zessen_teller  )

Gemengde opgave 7.3 Tafel van vermenigvuldiging

# Tafel van vermenigvuldiging.
num = 3

#druk de bovenste rij af
print(". |", end=" ")
for teller in range(1, num+1):
  print(teller, end=" ")
print()


for teller1 in range(1, num+1):
  print (teller1, "|", end=" ") #druk de getallen links af
  for teller2 in range(1, num+1):
    antwoord = teller1 * teller2
    print (antwoord, end=" ") #druk de antwoorden af
  print()

Gemengde opgave 7.4 Hoger-Lager

import random

te_gokken_getal = random.randint (0, 100)
keren_gegokt = 0

goed_gegokt = False
while goed_gegokt == False:
    invoer = input( "Gok een getal tussen 0 en 100" )
    gok = int( invoer )
    if gok < 0:
        print("Invoer moet minstens 0 zijn")
    elif gok > 100:
        print("Getal is kleiner of gelijk aan 100")
    elif gok == te_gokken_getal:
        print("GOED GERADEN!")
        goed_gegokt = True
    elif gok < te_gokken_getal:
        print("HOGER!")
    else:
        print("LAGER!")
    keren_gegokt +=1

    print("Je hebt al", keren_gegokt, "keren gegokt.")

print("Spel afgelopen.")

Gemengde opgave 7.5 Omgekeerde van Hoger-Lager

gemaakte_pogingen = 0
laagste = 0
hoogste = 1001
MAX_POGINGEN = 10

print( "Denk aan een getal tussen 1 en 1000." )

while gemaakte_pogingen < MAX_POGINGEN :
    computer_gok = int( (laagste + hoogste) / 2 )

    prompt = "Ik raad "+str( computer_gok )+". Is jouw getal"+\
        " (L)ager of (H)oger, of is dit (C)orrect? "
    antwoord = input( prompt )

    gemaakte_pogingen += 1
    print("Poging nummer: ", gemaakte_pogingen)

    if antwoord == "C":
        break
    elif antwoord == "L":
        hoogste = te_gokken_getal
    elif antwoord =="H":
        laagste = te_gokken_getal
    else:
        print( "Antwoord H, L, of C." )

    if laagste >= hoogste-1:
        print( "Je moet een fout gemaakt hebben,",
            "want je hebt gezegd dat het getal hoger is dan",
            laagste, "maar ook lager dan", hoogste )


if gemaakte_pogingen == 1:
    print( "In 1 keer geraden! Ik kan gedachten lezen!" )
elif gemaakte_pogingen == MAX_POGINGEN:
    print( "In", MAX_POGINGEN, "nog niet geraden... niet echt zo's slim programma!" )
else:
    print( "Ik moest", teller, "keer raden." )

Gemengde opgave 7.6 Priemgetal testen

invoer = input ( "Geef een nummer: " )
getal = int( invoer )
if getal < 2:
    print( getal, "is niet priem" )
else:
    i = 2
    delerGevonden = False
    while i < getal and delerGevonden == False:
        if getal%i == 0:
            print( getal, "is niet priem" )
            delerGevonden = True
        i += 1

    if delerGevonden == False:
        print( getal, "is priem" )

Afsluitende opgave 7.7 Spelbord

import turtle

#CONSTANTEN EN VARIABELEN:
BOARD_SIZE = 3
CELL_SIZE = 100

#FUNCTIE DEFINITIES:
#tekent een rechthoek
def drawSquare( CELL_SIZE ):
    for i in range(4):
        turtle.forward( CELL_SIZE )
        turtle.right(90)


#tekent een vierkant bord met formaat bord_size * bord_size
def drawBord( BOARD_SIZE ):
    for column_nr in range ( BOARD_SIZE ):
     for row_nr in range (BOARD_SIZE ):

        turtle.goto( CELL_SIZE*column_nr, -CELL_SIZE*row_nr )
        turtle.pendown()
        drawSquare( CELL_SIZE )
        turtle.penup()

#FUNCTIE AANROEPEN:
drawBord( BOARD_SIZE )
turtle.done()

Gemengde opgave (OPTIONEEL) 7.8 Fibonacci

# Fibonacci.

#invoer vragen:
fibgetal = int( input("Tot hoeveel Fibonacci getallen moet ik uitrekenen? "))

# als de invoer 1 of 2 is, kunnen we de lijst rechtstreeks afdrukken.
# pas bij hogere invoer hoeven we te rekenen
if fibgetal == 1:
    print ("1")
elif fibgetal  == 2:
    print ("1 1")
else:
    #voor gevallen > 2 moeten we gaan rekenen:

    #de aanpak is als volgt:
    #   - we maken een startlijst met de eerste 2 fibonaccigetallen
    #   - we maken een loop die steeds het volgende fibonaccigetal uitrekent en aan de lijst toevoegt
    #   - als de loop voorbij is, drukken we de lijst op het scherm af

    #startlijst met de 1e 2 fibonaccigetallen:
    fiblijst = [1, 1]

    #bijhouden hoeveel fibonaccigetallen we al hebben berekend
    #deze begint op 2, omdat we de eerste 2 getallen al in de lijst hebben gestopt
    stap = 2

    #de loop die de volgende fibonaccigetallen gaat uitrekenen:
    while stap < fibgetal:

        #het nieuwe getal is de som van de laatste 2 elementen van de lijst
        #bepaal eerst de lengte van de lijst
        lengte = len(fiblijst)

        #bereken het nieuwe getal door de achterste twee elementen bij elkaar op te tellen:
        nieuw_fib = fiblijst[lengte-2] + fiblijst[lengte-1]

        #voeg het nieuwe getal achteraan de lijst
        fiblijst.append(nieuw_fib)

        #niet vergeten de stap te verhogen!
        stap = stap + 1

    #De lijst is nu gevuld, dus die hoeven we alleen nog af te drukken:
    for element in fiblijst:
        print (element, end="")#door de end="" op het einde, blijven we op dezelfde afdrukregel

Terug naar de uitleg en gewone opgaven over For-loops
Terug naar de uitleg en gewone opgaven over While-loops
Terug naar de cursus pagina