Python Class Örneği -Kesirler-

Yorum Ekle

 


Python dilinde sınıf tanımlama, sınıfa metotlar ekleme, vs...
KESİR SINIFI

import random
class Kesir:
    tam = 0
    pay = 0
    payda = 0
    def __init__(self,tam,pay,payda):
        self.tam = tam
        self.pay = pay
        self.payda = payda
    
    def __str__(self):
        if self.tam == 0:
            return f"{self.pay}/{self.payda}"
        elif self.pay == 0:
            return f"{self.tam}"
        else:
            return f"{self.tam}({self.pay}/{self.payda})"
        
    def uret(self,maxSayi):
        self.tam= random.randint(0,maxSayi)
        self.pay = random.randint(1,maxSayi)
        self.payda = random.randint(self.pay+1,maxSayi+1)
        return self
    
    def tamToBilesik(self):
        tam = self.tam
        pay = self.pay
        payda = self.payda
        if tam >= 0:
            pay = payda * tam + pay
        else:
            pay = -(payda * abs(tam)+pay)
        tam = 0
        self.tam = tam
        self.pay = pay
        self.payda = payda
        return self
    
    def bilesikToTam(self):
        if self.pay > 0:
            self.tam = self.pay//self.payda
            self.pay = self.pay % self.payda
        else:
            self.tam = -(abs(self.pay)//self.payda)
            self.pay = abs(self.pay) % self.payda
        return self
        
    def genislet(self,sayi):
        self.pay *= sayi
        self.payda *= sayi
        return self
    
    def sadelestir(self):
        tam = self.tam
        pay = self.pay
        payda = self.payda
        a = int(min(pay,payda))
        for i in range(a+1,1,-1):
            if pay % i == 0 and payda % i == 0:
                pay = pay//i
                payda = payda//i
        self.tam = tam
        self.pay = pay
        self.payda = payda
        return self
    
    def toFloat(self):
        tam = self.tam
        pay = self.pay
        payda = self.payda
        if tam == 0:
            floatSayi = pay/payda
        elif tam < 0:
            floatSayi = -((payda*abs(tam)+pay)/payda)
        else:
            floatSayi = (payda*tam+pay)/payda
        return floatSayi
    
    def topla(kesir1,kesir2):
        k= Kesir(0,0,0)
        kesir1.tamToBilesik()
        kesir2.tamToBilesik()
        if kesir1.payda != kesir2.payda:
            k1payda =kesir1.payda
            k2payda = kesir2.payda
            kesir1.genislet(k2payda)
            kesir2.genislet(k1payda) 
        k.tam = kesir1.tam + kesir2.tam
        k.pay = kesir1.pay+kesir2.pay
        k.payda = kesir2.payda
        k.bilesikToTam()
        k.sadelestir()
        kesir1.sadelestir()
        kesir1.bilesikToTam()
        kesir2.sadelestir()
        kesir2.bilesikToTam()
        return k
    
    def cikar(kesir1,kesir2):
        k = Kesir(0,0,0)
        kesir1.tamToBilesik()
        kesir2.tamToBilesik()
        if kesir1.payda != kesir2.payda:
            k1payda =kesir1.payda
            k2payda = kesir2.payda
            kesir1.genislet(k2payda)
            kesir2.genislet(k1payda) 
        k.pay = kesir1.pay-kesir2.pay
        k.payda = kesir2.payda
        k.bilesikToTam()
        k.sadelestir()
        kesir1.sadelestir()
        kesir1.bilesikToTam()
        kesir2.sadelestir()
        kesir2.bilesikToTam()
        return k
                    
    def carp(kesir1,kesir2):
        k = Kesir(0,0,0)
        kesir1.tamToBilesik()
        kesir2.tamToBilesik()
        k.pay = kesir1.pay * kesir2.pay
        k.payda = kesir1.payda * kesir2.payda
        k.sadelestir()
        k.bilesikToTam()
        return k

    def bol(kesir1,kesir2):
        k = Kesir(0,0,0)
        kesir1.tamToBilesik()
        kesir2.tamToBilesik()
        k.pay = kesir1.pay * kesir2.payda
        k.payda = kesir1.payda * kesir2.pay
        k.sadelestir()
        k.bilesikToTam()
        return k

Kullanımı ise:

k1 = Kesir(1,2,3)
print("-"*60,f"\n#Kesir oluştur...  {k1}\n","-"*60)

k2 = Kesir.uret(k2,10)
print(f"#Rastgele kesir oluştur...  {k2}\n","-"*60)

k3 = Kesir.uret(k3,10)
print(f"#Tam sayılı kesri bileşik kesre dönüştür...  {k3} = {k3.tamToBilesik()}\n","-"*60)
print(f"#Bileşik kesri tam sayılı kesre dönüştür...  {k3} = {k3.bilesikToTam()}\n","-"*60)

k3 = Kesir.uret(k3,10)
genSayi =random.randint(1,10)
print(f"#Genişletme, {k3} kesrini {genSayi} ile genişlet...  {k3.genislet(genSayi)}\n","-"*60)
print(f"#Sadeleştirme, {k3} kesrini sadeleştir...  {k3.sadelestir()}\n","-"*60)

k1 = Kesir.uret(k1,10)
print(f"#Ondalık sayıya dönüştürme... {k1} = {k1.toFloat()}\n","-"*60)

k1 = Kesir.uret(k1,10)
k2 = Kesir.uret(k2,10)
print(f"#Toplama işlemi... {k1} + {k2} = {Kesir.topla(k1,k2)}\n","-"*60)

k1 = Kesir.uret(k1,10)
k2 = Kesir.uret(k2,10)
print(f"#Çıkarma işlemi... {k1} - {k2} = {Kesir.cikar(k1,k2)}\n","-"*60)

k1 = Kesir.uret(k1,10)
k2 = Kesir.uret(k2,10)
print(f"#Çarpma işlemi... {k1}  * {k2} = {Kesir.carp(k1,k2)}\n","-"*60)

k1 = Kesir.uret(k1,10)
k2 = Kesir.uret(k2,10)
print(f"#Bölme işlemi... {k1}  / {k2} = {Kesir.bol(k1,k2)}\n","-"*60)

------------------------------------------------------------ 
#Kesir oluştur...  1(2/3)
 ------------------------------------------------------------
#Rastgele kesir oluştur...  2(2/10)
 ------------------------------------------------------------
#Tam sayılı kesri bileşik kesre dönüştür...  2(2/8) = 18/8
 ------------------------------------------------------------
#Bileşik kesri tam sayılı kesre dönüştür...  18/8 = 2(2/8)
 ------------------------------------------------------------
#Genişletme, 8/11 kesrini 2 ile genişlet...  16/22
 ------------------------------------------------------------
#Sadeleştirme, 16/22 kesrini sadeleştir...  8/11
 ------------------------------------------------------------
#Ondalık sayıya dönüştürme... 9(7/11) = 9.636363636363637
 ------------------------------------------------------------
#Toplama işlemi... 1(1/6) + 7(4/6) = 8(5/6)
 ------------------------------------------------------------
#Çıkarma işlemi... 9(2/10) - 7(9/10) = 1(3/10)
 ------------------------------------------------------------
#Çarpma işlemi... 1/7  * 4(6/7) = 34/49
 ------------------------------------------------------------
#Bölme işlemi... 5(3/9)  / 9(2/3) = 16/29
 ------------------------------------------------------------


Yorum için açıklama