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


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.


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)

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


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)

17

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

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

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.


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

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

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.


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


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.


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)


1
Silakan tambahkan contoh yang berfungsi. Menjelaskan beberapa kode teoretis mungkin sulit dimengerti.
mischva11
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.