Site Tools


marc:linux:python:datatype_conversion

Marc Verhaar 2021/04/17 08:39

Datatype conversion

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.

Op een ander moment datatypes veranderen kan echter ook:

Van float naar int:

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!

Van string naar integer:

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'>
marc/linux/python/datatype_conversion.txt · Last modified: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki