ค้นหาส่วนที่เหลือของตัวเลข


155

ฉันจะไปหาส่วนที่เหลือของตัวเลขใน Python ได้อย่างไร?

ตัวอย่างเช่น:
ถ้าตัวเลขเป็น 26 และหารด้วย 7 แล้วส่วนที่เหลือคือ 5
(ตั้งแต่ 7 + 7 + 7 = 21 และ 26-21 = 5)


8
ดูเหมือนว่าเขาไม่ได้อยู่แล้ว :)
คริสดิซอน

ฉันขอแนะนำให้ค้นหาผู้ประกอบการโมดูโล
yurib

11
ฉันไม่เห็นว่าเขาพูดอะไรเกี่ยวกับการบ้าน
p1l0t

คำตอบ:


205

คุณกำลังมองหาผู้ประกอบการโมดูโล:

a % b

ตัวอย่างเช่น:

26 % 7

แน่นอนว่าพวกเขาอาจต้องการให้คุณใช้มันด้วยตัวเองซึ่งไม่ยากเกินไป


13
-10 % 3 == 2โปรดทราบว่าผู้ประกอบการโมดูโลเสมอผลตอบแทนเป็นจำนวนบวกดังนั้นสำหรับตัวเลขที่ติดลบก็อาจจะไม่สิ่งที่คุณจะคาดหวังว่าเมื่อพูดคุยเกี่ยวกับส่วนที่เหลือ: อย่างไรก็ตามa/b*b + a%b == aยังคงเป็นจริงเนื่องจาก python จะปัดเศษไปที่ -Infinity ซึ่งไม่เหมือนกับภาษาอื่น ๆ บางอันซึ่งปัดไปทาง 0 แต่จะกลับ -1
marcelj

6
นั่นเป็นเพราะไพ ธ อน%ทำการโมดูลัสจริงซึ่งส่งคืนค่าในช่วง[0, divisor)และจับคู่ได้ดีกับการหารแบบพื้น (ไปทางอนันต์ลบ) ภาษา C ใช้ตัว%ดำเนินการสำหรับการดำเนินการส่วนที่เหลือซึ่งจะส่งคืนค่าในช่วง(-divisor, divisor)และจับคู่ได้ดีกับการหารมาตรฐาน (ไปยังศูนย์)
Aaron Franke

196

ส่วนที่เหลือของแผนกสามารถค้นพบได้โดยใช้โอเปอเรเตอร์%:

>>> 26%7
5

ในกรณีที่คุณต้องการทั้งความฉลาดและโมดูโลdivmodฟังก์ชันในตัวมีดังนี้:

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

47

26% 7 (คุณจะได้รับส่วนที่เหลือ)

26/7 (คุณจะได้รับตัวหารสามารถเป็นค่าลอยตัว)

26 // 7 (คุณจะได้รับค่าจำนวนเต็มหารเท่านั้น))


18

หากคุณต้องการรับผลหารและส่วนที่เหลือในหนึ่งบรรทัดของรหัส (usecase ทั่วไปมากขึ้น) ใช้:

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

17

หากคุณต้องการหลีกเลี่ยงโมดูโลคุณสามารถใช้การทำงานพื้นฐานทั้งสี่ร่วมกันได้ :)

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

16

จาก Python 3.7 มีmath.remainder()ฟังก์ชั่นใหม่:

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

เอาท์พุท:

-2.0  # not 5

หมายเหตุข้างต้นก็ไม่เหมือนกัน%เป็น

การอ้างถึงเอกสาร :

คณิตศาสตร์ ส่วนที่เหลือ (x, y)

ส่งคืนส่วนที่เหลือแบบ x ของ IEEE 754 ของ x เมื่อเทียบกับ y สำหรับ finite x และ finite nonzero y นี่คือความแตกต่าง x - n * y โดยที่ n คือจำนวนเต็มที่ใกล้เคียงที่สุดกับค่าที่แน่นอนของผลหาร x / y หาก x / y อยู่กึ่งกลางระหว่างจำนวนเต็มสองตัวติดต่อกันจำนวนเต็มคู่ที่ใกล้ที่สุดจะใช้สำหรับ n ส่วนที่เหลือ r = ส่วนที่เหลือ (x, y) ดังนั้นจะพึงพอใจกับ abs (r) <= 0.5 * abs (y) เสมอ

กรณีพิเศษทำตาม IEEE 754: โดยเฉพาะที่เหลือ (x, math.inf) คือ x สำหรับทุก ๆ x, และที่เหลือ (x, 0) และที่เหลือ (math.inf, x) ยก ValueError สำหรับผู้ที่ไม่ใช่ NaN x หากผลลัพธ์ของการดำเนินการส่วนที่เหลือเป็นศูนย์ศูนย์นั้นจะมีเครื่องหมายเหมือนกับ x

บนแพลตฟอร์มที่ใช้เลขฐานสองแบบไบนารีของ IEEE 754 ผลลัพธ์ของการดำเนินการนี้สามารถแสดงได้อย่างแน่นอนเสมอว่าไม่มีข้อผิดพลาดในการปัดเศษ

Issue29962อธิบายถึงเหตุผลในการสร้างฟังก์ชั่นใหม่


math.remainder อาจไม่ทำงานอย่างที่คุณคาดหวังเช่นสำหรับ python 3.7 >>> math.remainder (-2.99,2) -0.9900000000000002 >>> math.remainder (-3,2) 1.0
Dominic Barraclough


4

โมดูโล่จะเป็นคำตอบที่ถูกต้อง แต่ถ้าคุณทำด้วยตัวเองมันควรจะได้ผล

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

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

5
ใช้งานได้เฉพาะเมื่อ num คือ> = 0 และ dif> 0
12431234123412341234123

4

เราสามารถแก้ปัญหานี้ได้โดยใช้ตัวดำเนินการโมดูลัส (%)

26% 7 = 5;

แต่ 26/7 = 3 เพราะมันจะให้ผลหาร แต่ตัวดำเนินการ% จะให้ส่วนที่เหลือ


3
ถ้าคุณใช้ Python 2, 26/7 = 3, สำหรับ Python 3, 26/7 มีค่าประมาณ 3.7142857142857144
Antti A

2

คุณสามารถค้นหาส่วนที่เหลือโดยใช้ตัวดำเนินการ modulo ตัวอย่าง

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

มันจะพิมพ์ 4


0

หากคุณต้องการส่วนที่เหลือของปัญหาการหารของคุณเพียงแค่ใช้กฎส่วนที่เหลือจริงเช่นเดียวกับในวิชาคณิตศาสตร์ ได้รับสิ่งนี้จะไม่ให้ผลลัพธ์ทศนิยม

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

ถ้าคุณต้องการที่จะทำให้เรื่องนี้ในรูปแบบเครื่องคิดเลขเป็นเพียงการทดแทนด้วยvalone = 8 valone = int(input("Value One"))ทำเช่นเดียวกันกับvaltwo = 3แต่ vairables ที่แตกต่างกันอย่างเห็นได้ชัด


คุณต้องร่ายvalone/valtwoเป็น int มิฉะนั้นจะส่งผลให้มีจำนวนลอย
Ali Yılmaz

-1

คุณสามารถกำหนดฟังก์ชั่นและเรียกมันว่าส่วนที่เหลือด้วย 2 ค่าเช่น rem (number1, number2) ที่ส่งกลับ number1% number2 จากนั้นสร้างครู่หนึ่งและตั้งค่าเป็นจริงจากนั้นพิมพ์สองอินพุตสำหรับฟังก์ชั่นของคุณถือหมายเลข 1 และ 2 (number1, number2)


1
โปรดเพิ่มตัวอย่างการทำงาน การอธิบายรหัสทางทฤษฎีบางอย่างอาจยากที่จะเข้าใจ
mischva11
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.