Ga naar hoofdinhoud

15d Proberen tot het lukt

info

Deze les gebruikt break, uit Stoppen met break.

Vraag je iemand om een getal, dan wil je het meestal opnieuw vragen als het misgaat, in plaats van op te geven. Dat doe je met try in een loop:

while True:
tekst = input("Hoe oud ben je? ")
try:
leeftijd = int(tekst)
break
except ValueError:
print("Dat is geen getal, probeer het nog eens.")

print(f"Volgend jaar ben je {leeftijd + 1}.")
  • while True: blijft eindeloos herhalen.
  • Lukt int(tekst), dan komt Python bij break en stopt de loop.
  • Lukt het niet, dan springt Python naar except. break gebeurt dan niet, en de loop vraagt opnieuw.

Zonder input() zie je hetzelfde met een lijst pogingen, alsof iemand drie keer iets typt:

pogingen = ["tien", "", "10"]

for tekst in pogingen:
try:
leeftijd = int(tekst)
break
except ValueError:
print(f"'{tekst}' is geen getal, probeer het nog eens.")

print(f"Volgend jaar ben je {leeftijd + 1}.")

Uitvoer:

'tien' is geen getal, probeer het nog eens.
'' is geen getal, probeer het nog eens.
Volgend jaar ben je 11.

Opdracht 15d.1: Alleen de getallen​

Tel alle teksten uit de lijst op die een getal zijn. Sla de rest over.

Verwachte uitvoer:

Samen: 10
teksten = ["3", "vier", "5", "", "2"]
som = 0

for tekst in teksten:
    som += int(tekst)

print(f"Samen: {som}")
Klik hier voor een tip.

Zet som += int(tekst) in een try. In het except-blok hoeft niets te gebeuren, maar een blok mag niet leeg zijn: schrijf daar continue.

Klik hier voor de oplossing.
teksten = ["3", "vier", "5", "", "2"]
som = 0

for tekst in teksten:
try:
som += int(tekst)
except ValueError:
continue

print(f"Samen: {som}")

Uitvoer:

Samen: 10

Opdracht 15d.2: Een gemiddeld cijfer​

Bereken het gemiddelde van de cijfers die float() kan lezen. Tel ook hoeveel er zijn overgeslagen.

Verwachte uitvoer:

Gemiddelde: 7.75 (2 overgeslagen)
cijfers = ["7.5", "8", "zes", "6,5"]
goed = []
fout = 0

# Schrijf hier je loop

print(goed, fout)
Klik hier voor een tip.

Lukt float(cijfer), dan gaat het getal in goed met append. Lukt het niet, dan tel je fout += 1. Het gemiddelde is daarna sum(goed) / len(goed), met :.2f voor twee cijfers achter de punt.

Klik hier voor de oplossing.
cijfers = ["7.5", "8", "zes", "6,5"]
goed = []
fout = 0

for cijfer in cijfers:
try:
goed.append(float(cijfer))
except ValueError:
fout += 1

print(f"Gemiddelde: {sum(goed) / len(goed):.2f} ({fout} overgeslagen)")

Uitvoer:

Gemiddelde: 7.75 (2 overgeslagen)