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