Menu
Playground'da Dene

Python Sayılar ve Boolean'lar: int, float, bool ve Aritmetik

Python'un tam sayıları, kayan noktalı sayıları ve boolean'ları nasıl ele aldığı — aritmetik, dönüşüm ve insanların takıldığı uç durumlar.

İki Tür Sayı, Bir Tür Doğruluk

Her gün kullanacağın sayısal tipler int ve float, artı doğru/yanlış değerler için bool. Normal bir Python programının ihtiyaç duyduğu neredeyse tüm aritmetik ve mantık için yeterlidir.

main.py
Output
Click Run to see the output here.

Python bazen boolean'ları tam sayıların bir alt tipi olarak adlandırır — True aslen 1, False aslen 0'dır — bu da ileride birkaç kullanışlı numaranın kapısını açar.

Tam Sayı Aritmetiği

Python'daki tam sayılar asla taşmaz. İlk faktöriyel fonksiyonunu yazıp diğer çoğu dilin çoktan sessizce negatif bir sayıya sarılmış olacağını fark edene kadar bu önemsiz gelir.

main.py
Output
Click Run to see the output here.

İkisi de ne kadar büyük olursa olsun kesin cevaplar üretir. Tek tavan bellektir.

Aritmetik operatörler beklediğin gibidir, artı birkaç tane daha:

main.py
Output
Click Run to see the output here.

Bu listeden aklında tutmaya değer üç şey var:

  • / Python 3'te her zaman bir float döner, iki taraf da tam sayı olsa bile. 10 / 2 sana 5 değil 5.0 verir. Tam sayı istiyorsan // kullan.
  • // negatif sonsuza yuvarlar, bu yüzden -7 // 2, -3 değil -4'tür. Alışılmadık ama tutarlı.
  • % kalanı verir, "bu sayı çift mi?" (n % 2 == 0) için ve sabit bir aralık içinde sarmak için kullanışlıdır.

Float'lar ve Onların Meşhur Tuzağı

Float'lar tasarım gereği kusurludur. İkili olarak saklanırlar, bu da çoğu ondalık kesri kesin olarak temsil edemez. Kitap örneği:

main.py
Output
Click Run to see the output here.

İlk satır 0.30000000000000004 yazar. İkincisi False yazar. IEEE 754 standardını izleyen her dil — Python, JavaScript, Java, C — bu davranışa sahiptir. Python'da bir hata değildir.

Pratikte bu iki anlama gelir:

  1. Float'ları == ile karşılaştırma. "Yeterince yakın" istiyorsan math.isclose(a, b) kullan ya da abs(a - b) < bir_tolerans kontrol et.
  2. Para için decimal.Decimal kullan. Standart kütüphanenin decimal modülü kesin ondalık aritmetik sağlar — 0.1 + 0.2 gibi sürprizler yok. Float'tan daha yavaştır, bu yüzden varsayılan değildir, ama para birimi için doğru seçimdir.
main.py
Output
Click Run to see the output here.

Sayı Tipleri Arası Dönüşüm

Python sessizce bir tam sayıyı string'e ya da string'i sayıya dönüştürmez. Bunu açıkça talep edersin:

main.py
Output
Click Run to see the output here.

Geçersiz dönüşümler ValueError fırlatır:

>>> int("hello")
ValueError: invalid literal for int() with base 10: 'hello'

Hata mesajı açık ve üzerine iş yapılacak kadar nettir. Girdiyi temizle ya da istisnayı yakala.

Boolean'lar, Biraz Derinlemesine

True ve False iki boolean değerdir — tam olarak gösterildiği gibi, başta büyük harfle yazılır. Çoğu karşılaştırma bunlardan birini üretir:

main.py
Output
Click Run to see the output here.

Boolean operatörleri and, or ve not'tur, semboller yerine İngilizce kelimelerle yazılır:

main.py
Output
Click Run to see the output here.

Bilmekte yarar olan bir incelik: and ve or illaki True ya da False döndürmez — ifadeyi belirleyen değeri döndürürler. 0 or "fallback" "fallback" döner; 5 and 10 10 döner. Bu, name = user_input or "anonymous" gibi kısa varsayılanlar yazmana izin verir ama bir boolean kontrolü beklenmedik bir tip verdiğinde anlamanın da bir yolu.

Truthy ve Falsy

Python birçok değeri if ya da while gibi bir boolean bağlamda kullandığında "doğru-msu" ya da "yanlış-msı" olarak ele alır. Falsy değerler şunlardır:

  • False
  • 0, 0.0
  • None
  • Boş kaplar: "", [], {}, set(), ()

Geri kalan her şey truthy'dir. Bu, daha doğal görünen kontroller yazmana izin verir:

main.py
Output
Click Run to see the output here.

if name: ifadesini "name içinde bir şey varsa" diye oku. if name != "":'dan çok daha temiz. Sadece sayılara dikkat — if count:, 0'ı "atla" olarak ele alır ki genellikle istediğin budur ama her zaman değil. Sıfır meşru bir değerse if count is not None: kullan.

Boolean Aritmetiği

Boolean'lar zaten tam sayı olduğu için onlar üzerinde aritmetik yapabilirsin:

main.py
Output
Click Run to see the output here.

Bu numara cebinde taşımaya değecek kadar sık ortaya çıkar. Bir listedeki kaç öğenin bir testi geçtiğini saymak istiyorsan, boolean döndüren bir generator'ı topla:

main.py
Output
Click Run to see the output here.

Pratik Çıkarımlar

  • Tam sayılar asla taşmaz. Onları serbestçe kullan.
  • / bir float döner; tam sayı bölmesi istiyorsan // kullan.
  • Float'ları == ile karşılaştırma; toleransla karşılaştır ya da para için Decimal kullan.
  • Truthy olma durumu — 0 ve boş string'lerin falsy olduğunu hatırladığın sürece — koşulları daha iyi okutur.

Sırada: input ve print, script'lerini sessiz programlardan sohbetlere dönüştüren iki araç.

Sıkça Sorulan Sorular

Python'da int ile float arasındaki fark nedir?

Bir int, ondalık noktası olmayan tam sayıdır; bir float, ondalık noktası olan bir sayıdır. Python'daki tam sayılar herhangi bir boyutta olabilir — taşma yoktur. Float'lar standart IEEE 754 kurallarına uyar, bu da ondalık aritmetikte minik miktarlarda hassasiyet kaybına yol açabilir.

Python'da neden 0.1 + 0.2, 0.3'e eşit değil?

Çünkü ikili kayan noktalı sayılar çoğu ondalığı kesin olarak temsil edemez. 0.1 + 0.2, 0.30000000000000004'e değerlenir. Bu bir Python hatası değil — IEEE 754 float'lı her dilde aynı davranış vardır. Kesin ondalık matematik için decimal modülünü kullan.

Python'da truthy ve falsy değerler nedir?

Python boolean bağlamda birçok değeri, tam olarak True ya da False olmasalar bile doğru ya da yanlış olarak ele alır. Sıfır, boş string, boş liste, boş dict ve None falsy'dir; çoğu diğer değer truthy'dir. if my_list: ifadesi "liste içinde bir şey varsa" diye okunur.

Coddy ile kodlamayı öğren

BAŞLA