Als developer, wil ik waarden op de juiste manier met elkaar vergelijken en weten wanneer Python iets als True of False ziet, zodat mijn if-statements de juiste beslissing nemen en er geen stille fouten in mijn code sluipen.
"85" > "20"
input() geeft altijd een string terug. Als je die string vergelijkt met een
getal of met een andere string, gelden andere regels dan bij getallen. De bug is stil:
geen foutmelding, maar een verkeerd antwoord.
Bij getallen is 85 > 20 duidelijk: True. Maar bij strings?
print(85 > 20) # True β getallen: 85 is groter
print("85" > "20") # True β maar om de verkeerde reden!
# Python vergelijkt "8" vs "2": ord("8")=56, ord("2")=50 β 56 > 50
Strings worden karakter-voor-karakter vergeleken op hun Unicode-waarde (ord()).
Het eerste karakter dat verschilt bepaalt de uitkomst β de lengte telt niet mee.
"85" > "20" is True, maar
"9" > "20" is ook True (omdat ord("9")=57 > ord("2")=50).
Vergelijk altijd integers als je getallen vergelijkt.
Kies twee strings en zie hoe Python ze vergelijkt: karakter voor karakter, op Unicode-waarde. Het eerste karakter dat verschilt bepaalt de uitkomst.
Typ een expressie zoals "85" > "20", 85 > 20,
ord("8") of int("85") > 20.
De onderstaande code vraagt de gebruiker om het percentage vrije schijfruimte. Er zitten twee bugs in: de input wordt niet gecast en de vergelijking is verkeerd.
free_str = input("Vrije ruimte (%): ") # bijv. "5" of "85"
# BUG: vergelijkt strings!
if free_str > "20":
print("Genoeg ruimte, backup starten!")
else:
print("Te weinig ruimte")
Test met de invoer "5" β het programma zegt ten onrechte "OK". Fix de bug.
Acceptatiecriteria
input()-waarde wordt gecast naar int() vΓ³Γ³r de vergelijking."5" print het script "Te weinig ruimte"."85" print het script "Genoeg ruimte, backup starten!"."9" > "20" True geeft maar 9 > 20 False.