Elke oefening kan worden opgelost met de theorie/technieken die tot en met dit hoofdstuk zijn overlopen. Echter worden in de voorbeeldoplossingen soms meer geavanceerde technieken gebruikt die tot een meer elegante oplossingen leiden. Noteer bovendien dat er steeds verschillende oplossingen mogelijk zijn.

H03.1

Hoger lager

c = int(input())

guess = int(input())

while guess != c:
    if guess > c:
        print("Lager")
    else:
        print("Hoger")
    guess = int(input())
print("Goed gevonden!")

Gelukkig nieuwjaar !

n = int(input())
for i in range(n, 0, -1):
    print(i)
print("Gelukkig nieuwjaar !")

Gewoon even printen

a = int(input())
b = int(input())

for i in range(a, b+1):
    if i%2 == 0:
        print(i)

Tik Tak

h1 = int(input())
m1 = int(input())
h2 = int(input())
m2 = int(input())

print(h1, ":", m1, sep="")
h = h1
m = m1
while h != h2 or m != m2:
    m += 1  # kan je ook doen als m +=1
    if m == 60:
        m = 0
        h += 1
    print(h, ":", m, sep="")

Dynamica 1

v0 = float(input())
a = float(input())
dt = int(input())
print(f"De initiële snelheid is {round(v0, 2)}")

for i in range(dt):
    v0 += a
    if i != dt - 1:
        print(f"Versnellen naar {round(v0, 2)}")
print(f"De finale snelheid is {round(v0, 2)}")

Loonbrief

# willekeurig getal inlezen
willekeurig_getal = int(input())

# totaalbedrag initialiseren met willekeurig getal
totaalbedrag = willekeurig_getal

# loon van alle werknemers één voor één inlezen
loon, werknemers = input(), 0
while loon != 'stop':

    # loon van werknemer optellen bij het totaalbedrag
    werknemers += 1
    totaalbedrag += int(loon)

    # totaalbedrag uitschrijven zoals het door de werknemer gefluisterd wordt
    print(f'werknemer #{werknemers} fluistert €{totaalbedrag}')

    # loon van volgende werknemer inlezen
    loon = input()

# gemiddeld loon uitschrijven
print(f'gemiddeld loon: €{(totaalbedrag - willekeurig_getal) / werknemers:.2f}')

Vreemde eend

x = input()
woord1  = ""
teller1 = 0
woord2  = ""
teller2 = 0

while x != "stop":
    if woord1 == "":
        woord1 = x
        teller1 += 1
    elif x == woord1:
        teller1 += 1
    elif woord2 == "":
        woord2 = x
        teller2 += 1
    else:
        teller2 += 1
    x = input()

if woord2 == "":
    print("er is geen vreemde eend in de bijt")
elif teller1 == teller2:
    print("vreemde eend kan niet ondubbelzinnig bepaald worden")
elif teller1 > teller2:
    print(f'de vreemde eend in de bijt is "{woord2}"')
else:
    print(f'de vreemde eend in de bijt is "{woord1}"')

Waterdicht

w1 = input()
w2 = input()

while w1 == w2:
    w1 = input()
    w2 = input()
    
if w1 == "kop":
    print("kop wint")
else:
    print("munt wint")

Hoger lager 2

c = int(input("correct antwoord: "))
t = int(input("aantal gokken: "))
i = 0

guess = int(input("eerste gok: "))
i += 1

while guess != c and i < t:
    if guess > c:
        print("Lager")
    else:
        print("Hoger")
    guess = int(input("gok: "))
    i += 1

if guess == c:
    print("Goed gevonden!")
else:
    print("Niet gevonden")

H03.2

Faculteit hulp

n = int(input())
ant = 1
for i in range(1, n+1):
    ant *= i
print(ant)

Faculteit

def faculteit(n):
    f = 1
    for fi in range(2, n + 1):
        f *= fi
    return f

gevallen = int(input())
for _ in range(gevallen):
    n = int(input())
    if n < 14:
        print(faculteit(n))
    else:
        print('invoer te groot')

Verjaardagsparadox hulp

n = int(input())
calc = 1
for i in range(n):
    calc *= (365-i)/365
print(1-calc)

Verjaardagsparadox

qn = 1.0
for n in range(2, 76):
    # kans berekenen
    qn *= (365.0 - n + 1) / 365      # reële deling

    # kans uitschrijven
    if not n % 5:
        print(n, 1 - qn)

Chaos hulp

d = float(input())
r = float(input())
print(r*d*(1-d))

Chaos

# simulatieparameters inlezen
dichtheid = float(input())
vruchtbaarheid = float(input())
stappen = int(input())

# initiële dichtheid uitschrijven
print(dichtheid)

# dichtheid uitschrijven tijdens opeenvolgende simulatiestappen
for _ in range(stappen - 1):

    # nieuwe dichtheid berekenen
    dichtheid = vruchtbaarheid * dichtheid * (1.0 - dichtheid)

    # nieuwe dichtheid uitschrijven
    print(dichtheid)

NYT

factor = int(input())
getal = input()  # str
vorige_getal = False
while getal != "NYT":
    getal = int(getal)  # int
    if vorige_getal is False:
        vorige_getal = getal - factor
    # acties
    if getal - vorige_getal != factor:
        print(f"{vorige_getal} -> {getal} ({getal-vorige_getal})")
    
    vorige_getal = getal
    getal = input()  # str

Vermoeden van Collatz

def len_Collatz(n):
    iter = 1
    while n != 1:
        if (n % 2) == 0:  # even
            n //= 2
        else:  # oneven
            n *= 3
            n += 1
        iter += 1
    return iter

t = int(input())
for _ in range(t):
    x = int(input())
    print(len_Collatz(x))

Vrienden bezoeken

# Geen modules nodig

# Invoer
d = int(input())  # het volgnummer van de dag
x = input()

# Bewerking
verkeersbord1 = "L"
verkeersbord2 = "L"
verkeersbord3 = "L"


for i in range(1, d):
    if verkeersbord1 == "L":  # Ga naar links bij het eerste verkeersbord
        # Ga richting huis A&B en verkeersbord 2
        verkeersbord1 = "R"  # verkeersbord omdraaien
        if verkeersbord2 == "L":  # verkeersbord2 naar links
            verkeersbord2 = "R"
        else:  # verkeersbord2 naar rechts
            verkeersbord2 = "L"
    elif verkeersbord1 == "R":  # ga naar rechts bij het eerste verkeersbord
        verkeersbord1 = "L"  # verkeersbord omdraaien
        # we staan aan verkeersbord 3
        if verkeersbord3 == "L":
            verkeersbord3 = "R"
        else:  # verkeersbord3 is rechts
            verkeersbord3 = "L"

if verkeersbord1 == "L":
    # komen aan verkeersbord2
    if verkeersbord2 == "L":
        print("A")
    else:  # verkeersbord1 is naar rechts
        print("B")
else: # verkeersbord1 is naar rechts
    # komen aan bij verkeersbord3
    if verkeersbord3 == "L":
        print("C")
    else:
        print("D")

De kikkerprins

# nauwkeurige definitie van de waarde e in de math module
import math

# inlezen hoeveel kikkers er in totaal zijn
kikkers = int(input())

# bepalen hoeveel kikkers we eerst moeten bekijken voor we starten om een
# kikker te kiezen
kikkers_in_eerste_reeks = math.ceil(kikkers / math.e)

# maximale score bepalen voor eerste reeks kikkers; in dit geval gebruiken we 
# een for-lus omdat we bij aanvang weten hoeveel kikkers we in de eerste reeks
# moeten bekijken als we weten hoeveel kikkers er in totaal zijn
maximale_score = float(input())
for _ in range(1, kikkers_in_eerste_reeks):
    score = float(input())
    if score > maximale_score:
        maximale_score = score
     
# resterende kikkers beoordelen totdat we een kikker zien die een hogere score
# heeft dan alle kikkers uit de eerste reeks of totdat we alle resterende
# kikkers beoordeeld hebben; in dit geval gebruiken we een while-lus, omdat we
# niet bij aanvang weten of we vroegtijdig zullen stoppen of alle resterende
# kikkers nog moeten beoordelen
score = float(input())   
kikker = kikkers_in_eerste_reeks + 1
while kikker < kikkers and score < maximale_score:
    score = float(input())   
    kikker += 1
    
# score uitschrijven van de kikker die we als laatste hebben beoordeeld; ofwel
# is dit de eerste kikker uit de tweede reeks die een hogere score had dan alle
# kikkers uit de eerste reeks, ofwel is dit de laatste kikker van de reeks
print(score)

Eerste verwittiging

# aantal gebouwen inlezen
gebouwen = int(input())

# naam van eerste gebouw inlezen
gebouw = input()

# hoogte van eerste gebouw inlezen (in meter) en instellen als huidige maximale hoogte
maximale_hoogte = int(input())

# eerste gebouw is altijd volledig zichtbaar
print(f'{gebouw} is zichtbaar van het gelijkvloers tot {maximale_hoogte} meter.')

# andere gebouwen één voor één verwerken
for _ in range(gebouwen - 1):

    # naam van gebouw inlezen
    gebouw = input()
    
    # hoogte van gebouw inlezen (in meter)
    hoogte = int(input())
    
    # gebouw is zichtbaar indien het boven de huidige maximale hoogte uitsteekt
    if hoogte > maximale_hoogte:
        print(f'{gebouw} is zichtbaar van {maximale_hoogte} meter tot {hoogte} meter.')
        maximale_hoogte = hoogte