Temukan sisa pembagian nomor

155

Bagaimana saya bisa menemukan sisa pembagian angka dengan Python?

Misalnya:
Jika angka 26 dan angka yang dibagi 7, maka sisa pembagian adalah 5.
(karena 7 + 7 + 7 = 21 dan 26-21 = 5.)

Bob
sumber
8
Sepertinya dia sudah melakukannya :)
Chris Dixon
Saya sarankan mencari operator modulo
yurib
11
Saya tidak melihat di mana dia menyebutkan sesuatu tentang pekerjaan rumah
p1l0t

Jawaban:

205

Anda mencari operator modulo:

a % b

sebagai contoh:

26 % 7

Tentu saja, mungkin mereka ingin Anda menerapkannya sendiri, yang juga tidak terlalu sulit.

Uku Loskit
sumber
13
Perhatikan bahwa operator modulo selalu mengembalikan angka positif, jadi untuk angka negatif itu tidak mungkin apa yang Anda harapkan ketika berbicara tentang sisanya: -10 % 3 == 2. Namun a/b*b + a%b == atetap berlaku, karena python selalu membulatkan ke -Infinity, tidak seperti beberapa bahasa lain, yang membulatkan ke 0 tetapi akan mengembalikan -1.
marcelj
6
Itu karena Python %melakukan modulus yang benar, yang mengembalikan nilai pada kisaran [0, divisor)dan berpasangan dengan pembagian lantai (menuju infinity negatif). Bahasa C menggunakan %operator untuk operasi selanjutnya yang mengembalikan nilai pada kisaran (-divisor, divisor)dan berpasangan dengan baik dengan pembagian standar (menuju nol).
Aaron Franke
196

Sisa dari suatu divisi dapat ditemukan menggunakan operator %:

>>> 26%7
5

Jika Anda membutuhkan hasil bagi dan modulo, ada divmodfungsi bawaan :

>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)
tzot
sumber
47

26% 7 (Anda akan mendapatkan sisanya)

26/7 (Anda akan mendapatkan pembagi bisa menjadi nilai float)

26 // 7 (Anda akan mendapatkan nilai integer only integer))

Karush Mahajan
sumber
18

Jika Anda ingin mendapatkan hasil bagi dan tetap dalam satu baris kode (penggunaan lebih umum), gunakan:

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)
Alok Nayak
sumber
17

Jika Anda ingin menghindari modulo, Anda juga dapat menggunakan kombinasi dari empat operasi dasar :)

26 - (26 // 7 * 7) = 5
alys
sumber
15

Dari Python 3.7, ada math.remainder()fungsi baru :

from math import remainder
print(remainder(26,7))

Keluaran:

-2.0  # not 5

Catatan, seperti di atas, tidak sama dengan %.

Mengutip dokumentasi :

matematika sisa (x, y)

Kembalikan sisa gaya x IEEE 754 gaya sehubungan dengan y. Untuk hingga x dan hingga bukan nol y, ini adalah perbedaan x - n * y, di mana n adalah bilangan bulat terdekat dengan nilai pasti dari hasil bagi x / y. Jika x / y persis setengah dari dua bilangan bulat berturut-turut, bilangan bulat genap terdekat digunakan untuk n. Sisa r = sisanya (x, y) dengan demikian selalu memenuhi abs (r) <= 0,5 * abs (y).

Kasus khusus mengikuti IEEE 754: khususnya, sisa (x, math.inf) adalah x untuk setiap x terbatas, dan sisanya (x, 0) dan sisanya (math.inf, x) meningkatkan ValueError untuk setiap non-NaN x. Jika hasil dari operasi sisanya adalah nol, nol itu akan memiliki tanda yang sama dengan x.

Pada platform yang menggunakan floating-point IEEE 754, hasil dari operasi ini selalu benar-benar representable: tidak ada kesalahan pembulatan yang diperkenalkan.

Issue29962 menjelaskan alasan untuk membuat fungsi baru.

Chris_Rands
sumber
math.remainder mungkin tidak berfungsi seperti yang Anda harapkan misalnya untuk python 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough
4

Gunakan% sebagai ganti / ketika Anda membagi. Ini akan mengembalikan sisanya untuk Anda. Jadi dalam kasus Anda

26 % 7 = 5
Bender Yang Terbesar
sumber
4

Modulo akan menjadi jawaban yang benar, tetapi jika Anda melakukannya secara manual, ini akan berhasil.

num = input("Enter a number: ")
div = input("Enter a divisor: ")

while num >= div:
    num -= div
print num
Cooper
sumber
5
Hanya berfungsi jika num adalah> = 0 dan dif> 0.
12431234123412341234123
4

Kita dapat menyelesaikan ini dengan menggunakan operator modulus (%)

26% 7 = 5;

tetapi 26/7 = 3 karena akan memberikan hasil bagi tetapi% operator akan memberikan sisanya.

KATTAMURU ANIL
sumber
3
Jika Anda menggunakan Python 2, 26/7 = 3, untuk Python 3, 26/7 adalah sekitar 3,7142857142857144
Antti A
2

Anda dapat menemukan sisanya menggunakan Contoho operator modul

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

Ini akan mencetak 4

Swarnima Shishodia
sumber
0

Jika Anda ingin sisa masalah divisi Anda, cukup gunakan aturan sisa yang sebenarnya, seperti dalam matematika. Memang ini tidak akan memberi Anda hasil desimal.

valone = 8
valtwo = 3
x = valone / valtwo
r = valone - (valtwo * x)
print "Answer: %s with a remainder of %s" % (x, r)

Jika Anda ingin membuatnya dalam format kalkulator, cukup gantikan valone = 8 dengan valone = int(input("Value One")). Lakukan hal yang sama dengan valtwo = 3, tetapi jelas vairables berbeda.

S. Ahmad
sumber
Anda harus melakukan cast valone/valtwoke int. selain itu akan menghasilkan angka float.
Ali Yılmaz
-1

Anda dapat menetapkan suatu fungsi dan menyebutnya sisa dengan 2 nilai seperti rem (angka1, angka2) yang mengembalikan angka1% angka2 kemudian buat sesaat dan tetapkan benar lalu cetak dua input untuk fungsi Anda yang memegang nomor 1 dan 2 kemudian cetak (rem (angka1, angka2)

pengguna13790410
sumber
1
Silakan tambahkan contoh yang berfungsi. Menjelaskan beberapa kode teoretis mungkin sulit dimengerti.
mischva11