Tìm phần còn lại của một số


155

Làm thế nào tôi có thể đi tìm phần còn lại của một số trong Python?

Ví dụ:
Nếu số là 26 và số chia là 7, thì phần còn lại là 5.
(vì 7 + 7 + 7 = 21 và 26-21 = 5.)


8
Có vẻ như anh ấy đã làm :)
Chris Dixon

Tôi khuyên bạn nên tìm kiếm toán tử modulo
yurib

11
Tôi không thấy nơi anh ấy đề cập bất cứ điều gì về bài tập về nhà
p1l0t

Câu trả lời:


205

bạn đang tìm toán tử modulo:

a % b

ví dụ:

26 % 7

Tất nhiên, có lẽ họ muốn bạn tự thực hiện nó, điều này cũng không quá khó khăn.


13
Lưu ý rằng toán tử modulo luôn trả về một số dương, vì vậy đối với các số âm, nó có thể không phải là điều bạn mong đợi khi nói về phần còn lại : -10 % 3 == 2. Tuy nhiên a/b*b + a%b == avẫn đúng, vì python luôn làm tròn về -Infality, không giống như một số ngôn ngữ khác, làm tròn về 0 nhưng sẽ trả về -1.
marcelj

6
Đó là bởi vì Python %thực hiện một mô-đun thực, trả về các giá trị trên phạm vi [0, divisor)và kết hợp tốt với phân chia nổi (hướng tới vô cực âm). Các ngôn ngữ C sử dụng %toán tử cho các hoạt động còn lại trả về các giá trị trên phạm vi (-divisor, divisor)và kết hợp tốt với phép chia tiêu chuẩn (về 0).
Aaron Franke

196

Phần còn lại của một bộ phận có thể được phát hiện bằng cách sử dụng toán tử %:

>>> 26%7
5

Trong trường hợp bạn cần cả thương số và modulo, có divmodhàm dựng sẵn :

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

47

26% 7 (bạn sẽ nhận được phần còn lại)

26/7 (bạn sẽ nhận được ước số có thể là giá trị float)

26 // 7 (bạn sẽ chỉ nhận được giá trị số nguyên)


18

Nếu bạn muốn lấy thương số và phần còn lại trong một dòng mã (usecase chung hơn), hãy sử dụng:

quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)

17

Nếu bạn muốn tránh modulo, bạn cũng có thể sử dụng kết hợp bốn thao tác cơ bản :)

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

15

Từ Python 3.7, có một math.remainder()chức năng mới :

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

Đầu ra:

-2.0  # not 5

Lưu ý, như trên, nó không giống như %.

Trích dẫn tài liệu :

môn Toán. phần còn lại (x, y)

Trả về phần còn lại theo kiểu IEEE 754 của x đối với y. Đối với hữu hạn x và hữu hạn khác không y, đây là sự khác biệt x - n * y, trong đó n là số nguyên gần nhất với giá trị chính xác của thương số x / y. Nếu x / y chính xác là một nửa giữa hai số nguyên liên tiếp, số nguyên chẵn gần nhất được sử dụng cho n. Phần còn lại r = phần còn lại (x, y) do đó luôn thỏa mãn abs (r) <= 0,5 * abs (y).

Các trường hợp đặc biệt tuân theo IEEE 754: cụ thể, phần còn lại (x, math.inf) là x cho bất kỳ x hữu hạn nào, và phần còn lại (x, 0) và phần còn lại (math.inf, x) nâng cao ValueError cho mọi x không phải NaN x. Nếu kết quả của phép toán còn lại bằng 0, số 0 đó sẽ có cùng dấu với x.

Trên các nền tảng sử dụng dấu phẩy động nhị phân IEEE 754, kết quả của thao tác này luôn thể hiện chính xác: không có lỗi làm tròn nào được đưa ra.

Số phát hành29962 mô tả cơ sở lý luận để tạo chức năng mới.


math.remainder có thể không hoạt động theo cách bạn mong đợi ví dụ cho python 3.7 >>> math.remainder (-2,99,2) -0,9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough

4

Sử dụng% thay vì / khi bạn chia. Điều này sẽ trả lại phần còn lại cho bạn. Vì vậy, trong trường hợp của bạn

26 % 7 = 5

4

Modulo sẽ là câu trả lời đúng, nhưng nếu bạn đang thực hiện thủ công thì nó sẽ hoạt động.

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

while num >= div:
    num -= div
print num

5
Chỉ hoạt động nếu num là> = 0 và Dif> 0.
12431234123412341234123

4

Chúng ta có thể giải quyết điều này bằng cách sử dụng toán tử mô đun (%)

26% 7 = 5;

nhưng 26/7 = 3 vì nó sẽ cho thương số nhưng toán tử% sẽ cho phần còn lại.


3
Nếu bạn sử dụng Python 2, 26/7 = 3, đối với Python 3, 26/7 là khoảng 3.7142857142857144
Antti A

2

Bạn có thể tìm thấy phần còn lại bằng cách sử dụng toán tử modulo

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

Nó sẽ in 4


0

Nếu bạn muốn phần còn lại của bài toán chia, chỉ cần sử dụng các quy tắc còn lại thực tế, giống như trong toán học. Cấp điều này sẽ không cung cấp cho bạn một đầu ra thập phân.

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

Nếu bạn muốn làm điều này trong một định dạng máy tính, chỉ cần thay thế valone = 8 bằng valone = int(input("Value One")). Làm tương tự với valtwo = 3, nhưng rõ ràng vai khác nhau.


bạn phải truyền valone/valtwotới int. nếu không nó sẽ dẫn đến một số float.
Ali Yılmaz

-1

bạn có thể xác định hàm và gọi phần còn lại với 2 giá trị như rem (number1, number2) trả về number1% number2 sau đó tạo một lúc và đặt thành true sau đó in ra hai đầu vào cho hàm của bạn giữ số 1 và 2 sau đó in (rem (số 1, số 2)


1
Vui lòng thêm một ví dụ làm việc. Giải thích một số mã lý thuyết có thể khó hiểu.
mischva11
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.