Python'da bir sayının bölünme kalanını nasıl bulabilirim?
Örneğin:
Sayı 26 ve bölünmüş sayı 7 ise, kalan bölüm 5'tir
(7 + 7 + 7 = 21 ve 26-21 = 5 olduğu için).
Python'da bir sayının bölünme kalanını nasıl bulabilirim?
Örneğin:
Sayı 26 ve bölünmüş sayı 7 ise, kalan bölüm 5'tir
(7 + 7 + 7 = 21 ve 26-21 = 5 olduğu için).
Yanıtlar:
modulo operatörünü arıyorsunuz:
a % b
Örneğin:
26 % 7
Tabii ki, belki de kendiniz uygulamanızı istediler, bu da çok zor olmayacaktı.
-10 % 3 == 2
. Ancak a/b*b + a%b == a
yine de doğrudur, çünkü python her zaman -Infinity'e yuvarlar, diğer dillerden farklı olarak 0'a yuvarlanan ancak -1 döndürür.
%
, aralıktaki değerleri döndüren [0, divisor)
ve katlanmış bölümle (negatif sonsuza doğru) iyi bir şekilde eşleştiren gerçek bir modül gerçekleştirir . C dilleri %
operatörü, aralıktaki değerleri döndüren (-divisor, divisor)
ve standart bölümle (sıfıra doğru) iyi bir şekilde eşleştiren kalan işlemler için operatörü kullanır .
26% 7 (kalan alacaksınız)
26/7 (bölen float değeri olabilir)
26 // 7 (yalnızca bölen tamsayı değerini alırsınız))
Bir kod satırında bölüm ve kalan (daha genel bir kullanım bilgisi) almak istiyorsanız, şunu kullanın:
quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)
Python 3.7'den yeni bir math.remainder()
fonksiyon var:
from math import remainder
print(remainder(26,7))
Çıktı:
-2.0 # not 5
Not yukarıdaki gibi, aynı şey olmadığını olarak %
.
Belgelerin alıntılanması :
matematik. kalan (x, y)
X'in IEEE 754 stili geri kalanını y'ye göre döndürün. Sonlu x ve sonlu sıfır olmayan y için bu, x - n * y arasındaki farktır; burada n, x / y bölümünün tam değerine en yakın tamsayıdır. X / y birbirini izleyen iki tamsayının tam ortasındaysa, n için en yakın çift sayı kullanılır. Kalan r = kalan (x, y) böylece her zaman abs (r) <= 0.5 * abs (y) 'yi karşılar.
Özel durumlar IEEE 754'ü takip eder: özellikle kalan (x, math.inf) herhangi bir sonlu x için x, kalan (x, 0) ve kalan (math.inf, x) NaN olmayan x için ValueError değerini yükseltir. Kalan işlemin sonucu sıfırsa, bu sıfır x ile aynı işarete sahip olacaktır.
IEEE 754 ikili kayan nokta kullanan platformlarda, bu işlemin sonucu her zaman tam olarak temsil edilebilir: yuvarlama hatası verilmez.
Issue29962 , yeni işlev oluşturmanın mantığını açıklamaktadır.
Bölünürken / yerine% kullanın. Bu geri kalan kısmı sizin için geri getirecektir. Yani senin durumunda
26 % 7 = 5
Modulo doğru cevap olacaktır, ancak manuel olarak yapıyorsanız bu işe yaramalıdır.
num = input("Enter a number: ")
div = input("Enter a divisor: ")
while num >= div:
num -= div
print num
Bunu modül operatörü (%) kullanarak çözebiliriz
% 26 7 = 5;
ancak 26/7 = 3 çünkü bölüm verecek, ancak% operatör kalanını verecektir.
Modulo operatörünü kullanarak kalanları bulabilirsiniz Örnek
a=14
b=10
print(a%b)
Yazdırılacak 4
Eğer bölünme probleminizin geri kalanını istiyorsanız, tıpkı matematikte olduğu gibi gerçek kalan kurallarını kullanın. Bu size ondalık bir çıktı vermez.
valone = 8
valtwo = 3
x = valone / valtwo
r = valone - (valtwo * x)
print "Answer: %s with a remainder of %s" % (x, r)
Eğer bir hesap biçiminde yapmak istiyorum, sadece yerine valone = 8
sahip valone = int(input("Value One"))
. Aynısını yapın valtwo = 3
, ancak farklı vairable'lar açıkça.
valone/valtwo
int için. aksi halde kayan sayı ile sonuçlanır.
bir işlev tanımlayabilir ve kalanını, sayı1% sayı2 döndüren rem (sayı1, sayı2) gibi 2 değerle çağırabilir, sonra bir süre oluşturabilir ve bunu true olarak ayarlayabilir, ardından 1 ve 2 numaralı işlev tutma işleviniz için iki girişi yazdırabilir ve daha sonra (rem (number1, number2)