Python Sonuç Tam Sayıysa

Pythonda mesela bir a değişkeni tanımladık birde b
a / b nin cevabı tam sayıysa şu uyarıyı ver nasıl diyebilirim ?

Merhaba, aşağıdaki kodları bir inceleyin isterseniz:

def f(x, y):
    if float(x / y) == int(x / y):
        print("tamsayı")
    elif float(x / y) != int(x / y):
        print("ondalıklı sayı")

f(2, 1)
# tamsayı
f(10, 5)
# tamsayı
f(5, 2)
# ondalıklı sayı
    

veya:

def g(x, y):
    if x / y == x // y:
        print("tamsayı")
    elif x / y != x // y:
        print("ondalıklı sayı")


g(4, 2)
# tamsayı
f(12, 6)
# tamsayı
f(15, 2)
# ondalıklı sayı

python çok demokratik çareler tükenmiyor pek çok yöntem var, ek olarak kalan sıfırsa kontrolünden de gidilebilir(tam bölünüyorsa);

def ek(x, y):
	if x % y == 0:
		print('tamsayı')
	else:
		print('ondalıklı sayı')
ek(6, 6)
# tamsayı
ek(15, 2)
# ondalıklı sayı

def if ve else den sonra 4’er boşluk var ama bu editorde bir türlü kod yazamadım, bir püf noktası var ama??, dilde_olupbiten ne güzel yazmış, işte bilmek başka şey.

Kodlardan önce bir satır boşluk bırakmayı deneyin.

1 Beğeni
[code]
# Kodları bu aralığa yazarsanız, kodlar renklenir.
[/code]
1 Beğeni

evet % kodu mantıklı x % y zaten 0 ise tam sayı olmuş oluyor sağ olasın

Python’da bulunan isinstance fonksiyonunu bu tür işler için kullanırız.

>>> x = 3
>>> y = 3.5
>>>
>>> isinstance(x, int)
True
>>> isinstance(y, int)
False
>>>
1 Beğeni

Ama bölme işleminde bu fonksiyonu kullanmak istenilen sonucu vermiyor. Biliyorsunuz, bölme işleminin sonucu hep float cinsinden üretiliyor.
Örnek:

>>> x = 9 / 3
>>> isinstance(x, int)
False
>>> 

Python 2’de Python 3’ten farklı olarak bölme işlemi her zaman float türünde döndürülmüyor. Eklemeyi unutmuşum, teşekkür ederim :slight_smile:

>>> isinstance(9 / 3, int)
True
>>> isinstance(9 / 3.0, int)
False
>>>
1 Beğeni

Hımm, Python2 için geçerli olan bu durumu bilmiyordum, teşekkür ederim. :slight_smile:

Biraz zorlamak gerekirse :

def tamsayi(x,y):
   if(str(x/y).endswith(".0")):
       return True
   else:
       return False

Şu satırda sonunun 0 olacağını nereden biliyorsunuz ki:

if(str(x/y).endswith(".0")

@hasser’in paylaştığı kodlar, yalnızca Python3 için geçerlidir. Python3’de bir tamsayı başka bir tamsayıya bölündüğünde kalan 0 olsa dahi bölüm float tipinde bir veridir.

>>> 9 / 3
3.0
>>> 9 / 4
2.25
>>> 

Mesela benim paylaştığım kodlar da sadece Python3’de istenen sonucu verir. Bu başlıktaki cevaplardan sadece @trdjango’nun paylaştığı kodlar hem Python2’de hem de Python3’te istenen sonucu verir.

@hasser, @dildeolupbiten, yanlış anlamışım kodu, şimdi anladım.

2 Beğeni