• Programowanie
  • Python int bez pułapek - konwersja liczb i tekstu

Python int bez pułapek - konwersja liczb i tekstu

Radosław Stępień • 13 listopada 2026
Linia produkcyjna przetwarza geometryczne kształty na złote kostki. Widać tu proces, jakby tworzony w **int python**, gdzie różne formy stają się jednolite.

Spis treści

Przyjmujesz kwotę z formularza albo numer strony jako dane wejściowe i nagle Python zgłasza błąd przy dodawaniu jej do liczby? Zwykle potrzebujesz wtedy typu int, ale samo wywołanie int() może po cichu zmienić wartość, jeśli wejściem jest liczba z częścią ułamkową.

Kod w python tworzy talię kart, wczytuje graczy z pliku i rozdaje im karty.

int przechowuje liczby całkowite, ale konwersja wymaga uwagi

  • int reprezentuje liczby całkowite, także ujemne i większe niż typowy zakres maszynowy.
  • int(4.9) daje 4, a nie zaokrąglone 5.
  • int("101", 2) odczytuje tekst jako liczbę zapisaną w systemie dwójkowym.
  • bool jest podtypem int, więc True zachowuje się liczbowo jak 1.
  • int("3.5") kończy się błędem, bo tekst zawiera zapis dziesiętny z kropką.

int przechowuje liczby całkowite bez typowego limitu bitowego

W Pythonie int służy do reprezentowania liczb bez części ułamkowej, na przykład liczby rekordów, indeksu elementu albo identyfikatora używanego w obliczeniach. Typ przyjmuje wartości dodatnie, ujemne i zero. Nie ma stałej granicy wynikającej z 32- czy 64-bitowego formatu, choć bardzo duże liczby wymagają więcej pamięci i czasu na obliczenia.

To rozróżnienie łatwo przeoczyć, gdy porównujesz Pythona z językami, w których typ całkowity ma sztywny zakres. Dokumentacja typów wbudowanych Pythona opisuje całkowitą precyzję int. Prawdę mówiąc, dla codziennego kodu ważniejszy od limitu rozmiaru jest wybór właściwego sposobu konwersji.

int() obcina część ułamkową zamiast zaokrąglać

Masz 7.8 i potrzebujesz liczby całkowitej? int(7.8) zwraca 7, a int(-7.8) zwraca -7. Funkcja odrzuca część ułamkową w kierunku zera, więc dla liczb ujemnych wynik może zaskoczyć osoby spodziewające się zaokrąglenia w dół.

Jeśli potrzebujesz zaokrąglenia, wybierz round(); jeśli chcesz obciąć część ułamkową, użyj int(). To nie są zamienne operacje, a wybór wpływa na wynik rozliczenia, licznika czy podziału porcji danych. Uważam, że przy kwotach i pomiarach najpierw trzeba ustalić regułę zaokrąglania, a dopiero potem konwertować typ.

int(7.8)       # 7
round(7.8)     # 8
int(-7.8)      # -7

Tekst liczbowy konwertuj dopiero po sprawdzeniu jego formatu

Wczytana wartość z input() jest tekstem, nawet jeśli na ekranie widzisz cyfry. Dlatego int("42") zadziała, ale int("4.2") zgłosi ValueError. Jeśli tekst ma postać ułamka dziesiętnego, najpierw można odczytać go jako float, a potem zdecydować, czy wynik obciąć, zaokrąglić czy odrzucić.

Funkcja przyjmuje też podstawę zapisu, na przykład int("101", 2) daje 5. W praktyce wygodnie rozpoznać sytuację po źródle wartości, zamiast łapać każdy błąd i zamieniać go na dowolną liczbę.

SytuacjaPrzyczyna lub skutekCo zrobić
int("42")Tekst zawiera poprawną liczbę całkowitą w systemie dziesiętnym.Konwersja jest właściwa.
int("4.2")Kropka i część ułamkowa nie pasują do zapisu liczby całkowitej.Użyj float() i wybierz regułę dalszej konwersji albo odrzuć wejście.
int("101", 2)Cyfry są zapisane w systemie dwójkowym.Podaj podstawę 2.
int("010", 0)Podstawa 0 interpretuje zapis podobnie do literału Pythona; taki zapis z zerem z przodu jest niedozwolony.Użyj zapisu "10" albo podaj konkretną podstawę, np. 10.

Takie zachowanie opisuje dokumentacja funkcji int(). Dla danych od użytkownika obsłuż niepoprawny zapis jawnie, na przykład przez try i except ValueError, zamiast zakładać, że każda odpowiedź da się przekształcić.

try:
    liczba = int(input("Podaj liczbę całkowitą: "))
except ValueError:
    print("Wpisz liczbę całkowitą, np. 12.")

bool przechodzi test typu jako liczba całkowita

Jest tu mały haczyk: bool jest podtypem int. W efekcie isinstance(True, int) zwraca True, a w działaniach arytmetycznych True zachowuje się jak 1 i False jak 0.

Ma to praktyczne znaczenie, gdy funkcja ma przyjmować liczbę, ale nie wartość logiczną. Sam warunek isinstance(x, int) nie odróżni tych przypadków. Jeśli argument ma być wyłącznie liczbą całkowitą, wyklucz typ bool osobno.

if isinstance(x, int) and not isinstance(x, bool):
    print("To liczba całkowita, nie bool")

Dobierz konwersję do danych, a nie do nazwy zmiennej

Wyobraź sobie, że formularz zwraca tekst "12.9", a program ma ustalić liczbę pełnych sztuk. Bezpośrednie int("12.9") nie zadziała, bo tekst nie jest zapisem liczby całkowitej. Po odczytaniu jako float wartość wyniesie 12.9, a konwersja przez int() da 12; jeśli biznesowa reguła wymaga zaokrąglenia, wynik będzie inny.

Prosta reguła pomaga uniknąć cichej zmiany danych: dla cyfr całkowitych w tekście użyj int(); dla ułamków najpierw ustal regułę, potem konwertuj. Gdy dane pochodzą z pliku lub formularza, sprawdź także puste wartości i nieoczekiwane znaki, bo poprawna konwersja zależy od rzeczywistego zapisu.

Najpierw sprawdź zapis, potem zamieniaj typ

Typ int jest prosty, dopóki wejściowa wartość rzeczywiście oznacza liczbę całkowitą. Kłopoty zwykle zaczynają się przy tekście z kropką, liczbach ujemnych, innej podstawie zapisu albo wartości logicznej podszywającej się pod liczbę.

Gdy znasz format danych i oczekiwany sposób zaokrąglania, wybór staje się jasny: int() konwertuje, ale nie zgaduje intencji. To właśnie tę decyzję dobrze podjąć przed zapisaniem wyniku w zmiennej.

FAQ - Najczęstsze pytania

int() obcina część ułamkową w kierunku zera, więc int(7.8) daje 7, a int(-7.8) daje -7. Jeśli potrzebujesz zaokrąglenia, użyj round(), ponieważ te funkcje stosują różne reguły.

Tekst "4.2" zawiera część ułamkową, dlatego bezpośrednia konwersja przez int() kończy się błędem ValueError. Najpierw odczytaj wartość przez float(), a następnie zdecyduj, czy ją obciąć, zaokrąglić, czy odrzucić zgodnie z regułą dla danych.

Podaj podstawę zapisu jako drugi argument, na przykład int("101", 2) zwraca 5. Podstawa 0 interpretuje zapis podobnie do literału Pythona, dlatego int("010", 0) jest niedozwolone; w takiej sytuacji użyj zapisu "10" albo konkretnej podstawy, na przykład 10.

bool jest podtypem int, więc True zachowuje się liczbowo jak 1, a False jak 0. Jeśli funkcja ma przyjmować wyłącznie liczby całkowite, sprawdź jednocześnie isinstance(x, int) i not isinstance(x, bool).

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi

python
int
konwersja
walidacja
systemy liczbowe
Autor Radosław Stępień
Radosław Stępień
Dziedzina programowania i technologii rozwija się w zawrotnym tempie, co sprawia, że ciągłe śledzenie nowinek i głębokie zrozumienie procesów są kluczowe. Nazywam się Radosław Stępień i od 13 lat aktywnie działam w branży IT, dzieląc się swoją wiedzą i doświadczeniem. Moje zainteresowania skupiają się na praktycznych aspektach tworzenia oprogramowania, analizie trendów technologicznych oraz budowaniu satysfakcjonującej ścieżki kariery w tym dynamicznym sektorze. Staram się przedstawiać złożone zagadnienia w sposób przystępny, opierając się na sprawdzonych informacjach i własnych obserwacjach z wieloletniej pracy. Zależy mi na tym, aby treści, które tworzę, były nie tylko merytoryczne i aktualne, ale przede wszystkim pomocne dla każdego, kto chce zgłębić tajniki IT lub rozwijać się zawodowo.

Udostępnij artykuł

Napisz komentarz