İ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.
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.
İ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:
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 / 2sana5değil5.0verir. Tam sayı istiyorsan//kullan.//negatif sonsuza yuvarlar, bu yüzden-7 // 2,-3değ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:
İ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:
- Float'ları
==ile karşılaştırma. "Yeterince yakın" istiyorsanmath.isclose(a, b)kullan ya daabs(a - b) < bir_toleranskontrol et. - Para için
decimal.Decimalkullan. Standart kütüphanenindecimalmodülü kesin ondalık aritmetik sağlar —0.1 + 0.2gibi 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.
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:
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:
Boolean operatörleri and, or ve not'tur, semboller yerine İngilizce kelimelerle yazılır:
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:
False0,0.0None- Boş kaplar:
"",[],{},set(),()
Geri kalan her şey truthy'dir. Bu, daha doğal görünen kontroller yazmana izin verir:
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:
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:
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çinDecimalkullan. - Truthy olma durumu —
0ve 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.