Bu makalede, Python’da kullanılan farklı sayılar, bir veri türünden diğerine nasıl dönüştürüleceği ve Python’da desteklenen matematiksel işlemler hakkında bilgi edineceksiniz.
Python’da Sayı Veri Türü
Pythonint
, float
vecomplex
sayıları destekler. Python’da int, float ve complex sınıf olarak tanımlanırlar.
Tamsayılar ve ondalık sayılar, ondalık bir noktanın varlığı (.) veya yokluğu ile ayrılır. 5 tamsayı, 5.0 ise ondalıklı sayısıdır.
Karmaşık sayılar, x + yj
biçiminde yazılır; burada x
, gerçek kısımdır ve y
, hayali kısımdır.
Bir değişkenin veya değerin hangi sınıfa ait olduğunu bilmek için type()
işlevini ve belirli bir sınıfa ait olup olmadığını kontrol etmek için isinstance()
işlevini kullanabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | a = 5 # Çıktı: <class 'int'> print(type(a)) # Çıktı: <class 'float'> print(type(5.0)) # Çıktı: (8+3j) c = 5 + 3j print(c + 3) # Çıktı: True print(isinstance(c, complex)) |
Çıktı:
1 2 3 4 5 6 | <class 'int'> <class 'float'> (8+3j) True |
Tam sayılar herhangi bir uzunlukta olabilirken, ondalık sayıların sayısı yalnızca 15 ondalık basamağa kadar doğrudur (16. sıra yanlıştır).
Günlük uğraştığımız sayılar ondalık (taban 10) sayı sistemidir. Ancak bilgisayar programcılarının (genellikle gömülü programcı) ikili (taban 2), onaltılık (taban 16) ve sekizli (taban 8) sayı sistemleri ile çalışması gerekir.
Python’da, bu sayıların önüne bir önek yerleştirerek bu sayıları temsil edebiliriz. Aşağıdaki tabloda bu önek listelenmektedir.
Sayı Sistemi | Prefix |
---|---|
Binary | ‘0b’ yada ‘0B’ |
Octal | ‘0o’ yada ‘0O’ |
Hexadecimal | ‘0x’ yada ‘0X’ |
Python Sayı Sistemleri Örnekleri:
1 2 3 4 5 6 7 | print(0b1101011) print(0xFB + 0b10) print(0o15) |
Çıktı:
1 2 3 4 5 | 107 253 13 |
Python Tür Dönüşümü
Bir sayı türünü diğerine dönüştürebiliriz. Bu aynı zamanda baskı olarak da bilinir.
Toplama, çıkarma gibi tamsayılar, işlenenlerden biri kayarsa, dolaylı (otomatik) olarak ondalığa zorlar.
1 2 3 4 5 6 7 8 9 10 | a=10 print( type(a) ) a=a+10.5 print( type(a) ) a=a+5+4j print( type(a) ) |
Çıktı:
1 2 3 4 5 | <class 'int'> <class 'float'> <class 'complex'> |
Python built-in yapısı bizi şaşırtacak bazı hesaplamalar yapar. 1.1 ve 2.2 toplamının 3.3 olduğunu biliyoruz, ancak Python aynı fikirde değil.
1 2 3 4 | >>> (1.1 + 2.2) == 3.3 False |
Ne oluyor?
Kayan nokta sayılarının bilgisayar donanımında ikili kesirler olarak uygulandığı ve bilgisayarın sadece ikili (0 ve 1) anladığı anlaşılmaktadır. Bu nedenle, bildiğimiz ondalık kesirlerin çoğu bilgisayarımızda doğru bir şekilde saklanamıyor.
Bir örnek verelim. 1/3 bölümünü ondalık sayı olarak gösteremeyiz. Bu 0.33333333 verecek … bu sonsuz uzunluğa sahiptir ve sadece yaklaşık olarak tahmin edebiliriz.
Ondalık kesir 0.1 çıkıyor 0.000110011001100110011 sonsuz uzunluğunda ikili bir kesir ile sonuçlanır … ve bilgisayarımız sadece sınırlı sayıda depolar.
Bu sadece yaklaşık 0,1 olur, ancak asla eşit olmaz. Bu nedenle, bilgisayar donanımımızın sınırlamasıdır ve Python’da bir hata değildir.
1 2 3 4 | >>> 1.1 + 2.2 3.3000000000000003 |
Bu sorunun üstesinden gelmek için Python ile gelen ondalık modülü kullanabiliriz. Ondalık sayıları 15 ondalık basamağa kadar hassasiyete sahipken, ondalık modül kullanıcı tarafından ayarlanabilir hassasiyete sahiptir.
1 2 3 4 5 6 7 | import decimal print(0.1) print(decimal.Decimal(0.1)) |
Çıktı:
1 2 3 4 | 0.1 0.1000000000000000055511151231257827021181583404541015625 |
Bu modül, okulda öğrendiğimiz gibi ondalık hesaplamalar yapmak istediğimizde kullanılır.
Ayrıca önemi de korur. 25.50 kg’ın 25.5 kg’dan daha doğru olduğunu biliyoruz, çünkü bire kıyasla iki önemli ondalık basamağı var.
1 2 3 4 5 6 7 | from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50')) |
Çıktı:
1 2 3 4 | 3.3 3.000 |
Yukarıdaki örnekte sondaki sıfırlara dikkat edin.
Neden ondalık sayı yerine her seferinde Ondalık uygulama? Ana sebep verimliliktir. Ondalık nokta işlemleri, Ondalık işlemlerden daha hızlı gerçekleştirilmelidir.
Float yerine Decimal ne zaman alırr?
Aşağıdaki durumlarda genellikle Decimal kullanırız.
- Tam ondalık gösterime ihtiyaç duyan finansal uygulamalar yaparken.
- Gerekli hassasiyet seviyesini kontrol etmek istediğimizde.
- Önemli ondalık basamaklar kavramını uygulamak istediğimizde.
- Operasyonların okulda yaptığımız gibi yapılmasını istediğimizde
Python Kesirleri (Python Fractions)
Python, kesirler modülünü kullanarak kesir sayılarını içeren işlemleri sağlar.
Bir kesirin, her ikisi de tamsayı olan bir pay ve bir payda vardır. Bu modül rasyonel sayı aritmetiği desteğine sahiptir.
Kesir nesnelerini çeşitli şekillerde oluşturabiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 | import fractions # Sonuc: 3/2 print(fractions.Fraction(1.5)) # Sonuc: 5 print(fractions.Fraction(5)) # Sonuc: 1/3 print(fractions.Fraction(1,3)) |
Çıktı:
1 2 3 4 5 | 3/2 5 1/3 |
Bu veri türü tüm temel işlemleri destekler. İşte birkaç örnek.
1 2 3 4 5 6 7 8 9 10 11 12 | from fractions import Fraction as F print(F(1,3) + F(1,3)) print(1 / F(5,6)) print(F(-3,10) > 0) print(F(-3,10) < 0) |
Çıktı:
1 2 3 4 5 6 | 2/3 6/5 False True |
Python Matematiksel İşlemler (Python Math Kütüphanesi)
Python, trigonometri, logaritma, olasılık ve istatistik gibi farklı matematiği gerçekleştirmek için math ve random gibi modüller sunar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import math print(math.pi) print(math.cos(math.pi)) print(math.exp(10)) print(math.log10(1000)) print(math.sinh(1)) print(math.factorial(6)) |
Çıktı:
1 2 3 4 5 6 7 8 | 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720 |
İşte Python math modülünde bulunan tam liste fonksiyonları ve öznitelikleri.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import random print(random.randrange(10,20)) x = ['a', 'b', 'c', 'd', 'e'] print(random.choice(x)) random.shuffle(x) print(x) print(random.random()) |
Çıktı:
1 2 3 4 5 6 | 14 c ['b', 'a', 'd', 'c', 'e'] 0.4547744318374104 |
1 Yorum