Bir sayının bölüm kalanını bulma


155

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


8
Zaten yaptığı gibi görünüyor :)
Chris Dixon

Modulo operatörüne
bakmanızı

11
Ödev hakkında bir şeyden bahsettiğini görmüyorum
p1l0t

Yanıtlar:


205

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ı.


13
Negatif sayılar için o kalanı bahsederken ne beklediğiniz olmayabilir bu yüzden modülo operatör her zaman pozitif bir sayı döndüren Not: -10 % 3 == 2. Ancak a/b*b + a%b == ayine de doğrudur, çünkü python her zaman -Infinity'e yuvarlar, diğer dillerden farklı olarak 0'a yuvarlanan ancak -1 döndürür.
marcelj

6
Çünkü Python's %, 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 .
Aaron Franke

196

Bir bölümün geri kalanı operatör kullanılarak bulunabilir %:

>>> 26%7
5

Hem bölüme hem de moduloya ihtiyacınız varsa, yerleşik divmodişlev vardır:

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)

47

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


18

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)

17

Modulodan kaçınmak istiyorsanız, dört temel işlemin bir kombinasyonunu da kullanabilirsiniz :)

26 - (26 // 7 * 7) = 5

16

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.


math.remainder beklediğiniz şekilde çalışmayabilir python 3.7 için örnek >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough

4

Bölünürken / yerine% kullanın. Bu geri kalan kısmı sizin için geri getirecektir. Yani senin durumunda

26 % 7 = 5

4

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

5
Yalnızca num> = 0 ve dif> 0 ise çalışır.
12431234123412341234123

4

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.


3
Python 2, 26/7 = 3 kullanıyorsanız, Python 3 için 26/7 yaklaşık 3.7142857142857144
Antti A

2

Modulo operatörünü kullanarak kalanları bulabilirsiniz Örnek

a=14
b=10
print(a%b)

Yazdırılacak 4


0

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.


Eğer döküm zorunda valone/valtwoint için. aksi halde kayan sayı ile sonuçlanır.
Ali Yılmaz

-1

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)


1
Lütfen çalışan bir örnek ekleyin. Bazı teorik kodları açıklamak zor olabilir.
mischva11
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.