Python Sayıları, Tür Dönüşümü ve Matematik

Bu makalede, Python'da kullanılan farklı sayıları, bir veri türünden diğerine nasıl dönüştürüleceğini ve Python'da desteklenen matematiksel işlemleri öğreneceksiniz.

Python'da Sayı Veri Türü

Python tam sayıları, kayan noktalı sayıları ve karmaşık sayıları destekler. Onlar olarak tanımlanır int, floatve complexPython sınıfların.

Tam sayılar ve kayan noktalar, ondalık noktanın varlığı veya yokluğuyla ayrılır. Örneğin, 5 bir tamsayı iken 5.0 bir kayan nokta sayısıdır.

Karmaşık sayılar formda yazılır x + yj; burada x gerçek kısım ve y hayali kısımdır.

Biz kullanabilirsiniz type()değişken veya bir değer ve ait olan sınıf bilmek işlevini isinstance()belirli bir sınıfa ait olup olmadığını kontrol etmek işlevi.

Bir örneğe bakalım:

 a = 5 print(type(a)) print(type(5.0)) c = 5 + 3j print(c + 3) print(isinstance(c, complex))

Yukarıdaki programı çalıştırdığımızda aşağıdaki çıktıyı alıyoruz:

 (8 + 3j) Doğru

Tam sayılar herhangi bir uzunlukta olabilirken, bir kayan noktalı sayı yalnızca 15 ondalık basamağa kadar doğrudur (16. basamak yanlıştır).

Her gün uğraştığımız sayılar ondalık (10 tabanında) sayı sistemidir. Ancak bilgisayar programcılarının (genellikle yerleşik programcıların) ikili (taban 2), onaltılık (taban 16) ve sekizlik (taban 8) sayı sistemleri ile çalışması gerekir.

Python'da, bu sayıların önüne uygun şekilde bir önek koyarak bu sayıları temsil edebiliriz. Aşağıdaki tablo bu önekleri listelemektedir.

Sayı sistemi Önek
İkili '0b' veya '0B'
Sekizli '0o' veya '0O'
Onaltılık "0x" veya "0X"

İşte bazı örnekler

 # Output: 107 print(0b1101011) # Output: 253 (251 + 2) print(0xFB + 0b10) # Output: 13 print(0o15)

Programı çalıştırdığınızda, çıktı:

 107 253 13

Tür Dönüşümü

Bir tür sayıyı diğerine dönüştürebiliriz. Bu aynı zamanda zorlama olarak da bilinir.

Toplama, çıkarma gibi işlemler, işlenenlerden biri float ise tamsayıyı örtük olarak (otomatik olarak) yüzmeye zorlar.

 >>> 1 + 2.0 3.0

Yukarıda 1'in (tamsayı) toplama için 1.0'a (float) zorlandığını ve sonucun da bir kayan nokta sayısı olduğunu görebiliriz.

Ayrıca int(), float()ve complex()türler arasında açıkça dönüştürme yapmak için yerleşik işlevleri de kullanabiliriz . Bu işlevler dizelerden bile dönüşebilir.

 >>> int(2.3) 2 >>> int(-2.8) -2 >>> float(5) 5.0 >>> complex('3+5j') (3+5j)

Float'tan tamsayıya dönüştürme yapılırken sayı kesilir (ondalık kısımlar kaldırılır).

Python Ondalık

Python yerleşik sınıf float, bizi şaşırtabilecek bazı hesaplamalar yapar. Hepimiz 1.1 ve 2.2'nin toplamının 3.3 olduğunu biliyoruz, ancak Python aynı fikirde değil gibi görünüyor.

 >>> (1.1 + 2.2) == 3.3 False

Ne oluyor?

Kayan nokta sayılarının bilgisayar donanımında ikili kesirler olarak uygulandığı ortaya çıktı, çünkü bilgisayar yalnızca ikili (0 ve 1) anlıyor. Bu nedenle, bildiğimiz ondalık kesirlerin çoğu bilgisayarımızda doğru bir şekilde saklanamaz.

Bir örnek alalım. 1/3 kesirini ondalık sayı olarak temsil edemeyiz. Bu, sonsuz uzunlukta olan 0.33333333'ü verecektir ve biz sadece ona yaklaşabiliriz.

Görünüşe göre 0.1 ondalık kesir, 0.000110011001100110011 gibi sonsuz uzunlukta bir ikili kesirle sonuçlanacak… ve bizim bilgisayarımız bunun yalnızca sınırlı bir sayısını saklıyor.

Bu sadece yaklaşık 0.1 olacaktır, ancak asla eşit olmayacaktır. Bu nedenle, bilgisayar donanımımızın sınırlamasıdır ve Python'daki bir hata değildir.

 >>> 1.1 + 2.2 3.3000000000000003

Bu sorunun üstesinden gelmek için Python ile birlikte gelen ondalık modülü kullanabiliriz. Kayan noktalı sayılar 15 ondalık basamağa kadar hassasiyete sahipken, ondalık modül kullanıcı tarafından ayarlanabilir hassasiyete sahiptir.

Farkı görelim:

 import decimal print(0.1) print(decimal.Decimal(0.1))

Çıktı

 0.1 0.1000000000000000055511151231257827021181583404541015625

Bu modül, okulda öğrendiğimiz gibi ondalık hesaplamalar yapmak istediğimizde kullanılır.

Aynı zamanda önemini de korur. Bire göre iki önemli ondalık basamağa sahip olduğundan 25.50 kg, 25.5 kg'dan daha doğru olduğunu biliyoruz.

 from decimal import Decimal as D print(D('1.1') + D('2.2')) print(D('1.2') * D('2.50'))

Çıktı

 3.3 3.000

Notice the trailing zeroes in the above example.

We might ask, why not implement Decimal every time, instead of float? The main reason is efficiency. Floating point operations are carried out must faster than Decimal operations.

When to use Decimal instead of float?

We generally use Decimal in the following cases.

  • When we are making financial applications that need exact decimal representation.
  • When we want to control the level of precision required.
  • When we want to implement the notion of significant decimal places.

Python Fractions

Python provides operations involving fractional numbers through its fractions module.

A fraction has a numerator and a denominator, both of which are integers. This module has support for rational number arithmetic.

We can create Fraction objects in various ways. Let's have a look at them.

 import fractions print(fractions.Fraction(1.5)) print(fractions.Fraction(5)) print(fractions.Fraction(1,3))

Output

 3/2 5 1/3

While creating Fraction from float, we might get some unusual results. This is due to the imperfect binary floating point number representation as discussed in the previous section.

Fortunately, Fraction allows us to instantiate with string as well. This is the preferred option when using decimal numbers.

 import fractions # As float # Output: 2476979795053773/2251799813685248 print(fractions.Fraction(1.1)) # As string # Output: 11/10 print(fractions.Fraction('1.1'))

Output

 2476979795053773/2251799813685248 11/10

This data type supports all basic operations. Here are a few examples.

 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)

Output

 2/3 6/5 False True

Python Mathematics

Python offers modules like math and random to carry out different mathematics like trigonometry, logarithms, probability and statistics, etc.

 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))

Output

 3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720

Here is the full list of functions and attributes available in the Python math module.

 import random print(random.randrange(10, 20)) x = ('a', 'b', 'c', 'd', 'e') # Get random choice print(random.choice(x)) # Shuffle x random.shuffle(x) # Print the shuffled x print(x) # Print random element print(random.random())

Yukarıdaki programı çalıştırdığımızda çıktıyı aşağıdaki gibi alıyoruz. (Rastgele davranıştan dolayı değerler farklı olabilir)

 18 e ('c', 'e', ​​'d', 'b', 'a') 0,5682821194654443

Python rastgele modülünde bulunan işlevlerin ve özniteliklerin tam listesi burada.

Ilginç makaleler...