Werken met getallen die als strings zijn opgeslagen, is een veelvoorkomend probleem in Python. Of je nu gebruikersinvoer parseert, databestanden leest of informatie uit API’s haalt, je moet die stringrepresentaties vaak omzetten in daadwerkelijke getallen om berekeningen uit te voeren. En natuurlijk int()
is de Python-functie dé oplossing, maar die is niet altijd zo eenvoudig als het lijkt. Soms kunnen de strings verschillende grondtallen hebben (zoals binair of hexadecimaal), of ze kunnen ongeldig zijn, of zelfs decimalen bevatten. Uitzoeken hoe je dat allemaal efficiënt en veilig kunt afhandelen, is de sleutel tot het voorkomen van crashes en bugs die frustrerend en dodelijk kunnen zijn. Deze handleiding beschrijft de verschillende manieren om strings in gehele getallen om te zetten in Python. Alles komt aan bod, van eenvoudige conversies tot lastige gevallen waarin je invoer niet zo zuiver is. Verwacht een paar tips over het omgaan met verschillende getallenstelsels, het verwerken van ongeldige invoer zonder uitzonderingen te genereren en het converteren van float-achtige strings. Het doel is om die getallen uit de stringvorm te halen en klaar te maken voor berekeningen, zonder daarbij je verstand te verliezen.
Strings naar gehele getallen converteren in Python
Methode 1: Een decimale tekenreeks naar een geheel getal converteren
Dit zijn de basisprincipes: je string is een normaal decimaal getal, zoals “42”.Geef het gewoon door aan int()
en je bent klaar. Sommige strings doen soms vreemde dingen, vooral als ze spaties of andere tekens bevatten, dus zorg ervoor dat je invoer schoon is of verwijder het eerst.
s = "42" n = int(s) print(n * 2) # Output: 84
In sommige configuraties, vooral met gebruikersinvoer, kan het helpen om foutafhandeling (proberen/behalve) toe te voegen, maar voor schone gegevens is dat alles wat je nodig hebt. Onthoud wel dat als de string geen correct getal is, je een ValueError
.krijgt.
Methode 2: Strings in andere bases converteren (binair, hexadecimaal, octaal)
Als het getal in een ander grondtal staat, zoals binair (“1010”) of hexadecimaal (“1A”), dan moet je bepalen int()
welk grondtal je moet gebruiken. Dit verrast veel mensen, omdat het int("1010")
standaard decimaal is (wat 1010 oplevert, niet 10!).
# Binary b = "1010" n = int(b, 2) # Output: 10 # Hexadecimal h = "1A" m = int(h, 16) # Output: 26
Python ondersteunt talstelsels van 2 tot en met 36, dus er is volop flexibiliteit. Let wel op: als je het juiste talstelsel niet specificeert, wordt het als decimaal geparseerd, en dat kan tot verwarrende bugs leiden als je niet oplet.
Methode 3: Ongeldige invoer veilig verwerken
Eerlijk gezegd: gebruikersinvoer of rommelige data? Die zullen niet altijd perfect zijn. Het inpakken van de int()
aanroep in een try/except -blok is dus een levensredder. Het voorkomt dat je programma crasht bij malafide invoer zoals “abc” of “12.3”.
s = "abc" try: n = int(s) print(n) except ValueError: print("Invalid input: cannot convert to integer")
Als je alleen positieve gehele getallen verwacht, bijvoorbeeld uit een bestand, kun je dit controleren met str.isdigit()
. Maar wees gewaarschuwd: isdigit()
herkent geen negatieve getallen of decimalen.
s = "12345" if s.isdigit(): print(int(s)) else: print("Not a pure digit string")
Ik weet niet waarom, maar bij sommige invoermethoden, vooral degene met tekens of decimalen, isdigit()
is het gewoon niet voldoende. In dat geval is de ‘proberen/uitzonderen’ -route veiliger.
Methode 4: Float-achtige strings naar gehele getallen converteren
Heb je ooit “88.8” of “12.5” als strings gezien? Die direct proberen te converteren int()
is een no-go – Python genereert fouten. De oplossing is om die string eerst om te zetten naar een float en hem vervolgens te casten naar een int. Zo blijft het simpel, maar pas op: dit kapt af naar nul, waardoor je het breukdeel verliest.
s = "88.8" n = int(float(s)) # Result: 88 (fraction truncated)
Als u liever afrondt naar het dichtstbijzijnde gehele getal, kunt u dit omwisselen int()
met round()
.
s = "88.8" n = round(float(s)) # Result: 89
Methode 5: Een lijst met strings naar gehele getallen converteren
Bij het werken met lijsten met getallenreeksen is het niet nodig om de lus elke keer handmatig uit te voeren. Gebruik map() of lijstbegrip – handig en snel.
xs = ["1", "2", "3"] # Using map: nums = list(map(int, xs)) # [1, 2, 3] # Using list comprehension: nums = [int(x) for x in xs]
Ongeldige items gevonden? Verpak de logica in een aangepaste functie die try/except
fouten netjes afhandelt. Voorkomen is beter dan genezen, vooral als je gegevensbron niet helemaal schoon is.
Veelvoorkomende valkuilen waar u op moet letten
- ❌ Het proberen
int()
van niet-numerieke strings zoals “hello” triggertValueError
. Probeer het te detecteren voordat het vastloopt. - ❌ Vermijd het direct doorgeven van floats zoals “12.5” – converteer deze eerst naar float en dan naar int, anders krijg je fouten.
- ❌ Het grondtal vergeten: “1010” is decimaal 1010, tenzij je grondtal=2 opgeeft. Anders is het niet binair.
Laatste gedachten
Strings omzetten in integers in Python is niet bepaald een hersenoperatie, maar weten hoe je met verschillende formaten en mogelijke fouten moet omgaan, maakt het verschil tussen een onbetrouwbaar script en een betrouwbaar script. Of je nu gebruikersinvoer parseert, met binaire data werkt of rommelige datasets opschoont, deze technieken geven je een toolkit om alles soepel te laten verlopen.
Als je deze beheerst, wordt je code niet zo kwetsbaar. Soms is het alleen een beetje irritanter, maar dat is programmeren, toch?