— Marc Verhaar 2021/04/17 08:39
Bij vragen naar userinput voor het vullen van een variabele wordt de input omgezet naar een stringvariabele. Wanneer dit niet gewenst is (je vraagt naar een cijfer om berekeningen te kunnen doen) moet dat dus omgezet worden naar een integer of een float.
Als je bijvoorbeeld probeert om strings te “concatenaten” met een integer krijg je een TypeError foutmelding:
length = len("Deze string heeft 31 karakters.")
print(length)
print(type(length))
[print("De variabele 'length' heeft" + length + "karakters")]
Output:
31
<class 'int'>
Traceback (most recent call last):
File "/home/marcv/mounts/cloud/Dev/100daysofpython/test.py", line 4, in <module>
[print("De variabele 'length' heeft" + length + "karakters")]
TypeError: can only concatenate str (not "int") to str
Je zou dit kunnen ondervangen door bij het vragen om de input de ingegeven waarde gelijk te veranderen in een string:
length = str(len("Deze string heeft 31 karakters."))
print(length)
print(type(length))
[print("De variabele 'length' heeft " + length + " karakters")]
Output:
31
<class 'str'>
De variabele 'length' heeft 31 karakters
Overigens kun je hier ook omheen werken door niet concatenate (+) te gebruiken maar door komma's te gebruiken. De type van de variabele is dan weliswaar een integer maar de uitkomst wordt wel op de juiste manier geprint:
length = len("Deze string heeft 31 karakters.")
print(length)
print(type(length))
print("De variabele 'length' heeft ", length, " karakters")
Output:
31
<class 'int'>
De variabele 'length' heeft 31 karakters
Als de invoer een cijfer moet zijn wordt dit toch standaard omgezet naar een string:
cijfer = input("Geef een cijfer:\n")
print(type(cijfer))
Output:
<class 'str'>
Je kunt hier bij het vragen om input gelijk al rekening mee houden door:
nummer = int(input("Welk cijfer wil je gebruiken?\n"))
print(type(nummer))
Output:
<class 'int'>
Soms is dat echter niet gewenst. Wanneer we bijvoorbeeld de twee nummers van een getal met 2 cijfers willen optellen:
two_digit_number = int(input("Type a two digit number:\n"))
print(two_digit_number[0] + two_digit_number[1])
Dit resulteert in een foutcode: TypeError: 'int' object is not subscriptable
Dit moeten we dus anders aanpakken:
number = input("Type a two digit number:\n")
print(int(number[0]) + int(number[1]))
Op deze manier wordt de variabele nummer gelijk gevuld met een integer.
x = 3.6 print(x) output: 3.6
print(float(x)) output: 3.6
print(int(x)) output: 3
Bij conversie van float naar integer wordt alles achter de float dus gewoon weggelaten!
x = "3" print(type(x)) print(type(int(x))) output: <class 'str'> <class 'int'>
Samenvatting:
Datatype bepalen bij vragen om invoer:
a = 123 print(a) print(type(a)) a = str(123) print(a) print(type(a)) a = "123" print(a) print(type(a)) a = float(123) print(a) print(type(a)) Output: 123 <class 'int'> 123 <class 'str'> 123 <class 'str'> 123.0 <class 'float'>