ฉันจะไปหาส่วนที่เหลือของตัวเลขใน Python ได้อย่างไร?
ตัวอย่างเช่น:
ถ้าตัวเลขเป็น 26 และหารด้วย 7 แล้วส่วนที่เหลือคือ 5
(ตั้งแต่ 7 + 7 + 7 = 21 และ 26-21 = 5)
ฉันจะไปหาส่วนที่เหลือของตัวเลขใน Python ได้อย่างไร?
ตัวอย่างเช่น:
ถ้าตัวเลขเป็น 26 และหารด้วย 7 แล้วส่วนที่เหลือคือ 5
(ตั้งแต่ 7 + 7 + 7 = 21 และ 26-21 = 5)
คำตอบ:
คุณกำลังมองหาผู้ประกอบการโมดูโล:
a % b
ตัวอย่างเช่น:
26 % 7
แน่นอนว่าพวกเขาอาจต้องการให้คุณใช้มันด้วยตัวเองซึ่งไม่ยากเกินไป
-10 % 3 == 2
โปรดทราบว่าผู้ประกอบการโมดูโลเสมอผลตอบแทนเป็นจำนวนบวกดังนั้นสำหรับตัวเลขที่ติดลบก็อาจจะไม่สิ่งที่คุณจะคาดหวังว่าเมื่อพูดคุยเกี่ยวกับส่วนที่เหลือ: อย่างไรก็ตามa/b*b + a%b == a
ยังคงเป็นจริงเนื่องจาก python จะปัดเศษไปที่ -Infinity ซึ่งไม่เหมือนกับภาษาอื่น ๆ บางอันซึ่งปัดไปทาง 0 แต่จะกลับ -1
%
ทำการโมดูลัสจริงซึ่งส่งคืนค่าในช่วง[0, divisor)
และจับคู่ได้ดีกับการหารแบบพื้น (ไปทางอนันต์ลบ) ภาษา C ใช้ตัว%
ดำเนินการสำหรับการดำเนินการส่วนที่เหลือซึ่งจะส่งคืนค่าในช่วง(-divisor, divisor)
และจับคู่ได้ดีกับการหารมาตรฐาน (ไปยังศูนย์)
ส่วนที่เหลือของแผนกสามารถค้นพบได้โดยใช้โอเปอเรเตอร์%
:
>>> 26%7
5
ในกรณีที่คุณต้องการทั้งความฉลาดและโมดูโลdivmod
ฟังก์ชันในตัวมีดังนี้:
>>> seconds= 137
>>> minutes, seconds= divmod(seconds, 60)
26% 7 (คุณจะได้รับส่วนที่เหลือ)
26/7 (คุณจะได้รับตัวหารสามารถเป็นค่าลอยตัว)
26 // 7 (คุณจะได้รับค่าจำนวนเต็มหารเท่านั้น))
หากคุณต้องการรับผลหารและส่วนที่เหลือในหนึ่งบรรทัดของรหัส (usecase ทั่วไปมากขึ้น) ใช้:
quotient, remainder = divmod(dividend, divisor)
#or
divmod(26, 7)
หากคุณต้องการหลีกเลี่ยงโมดูโลคุณสามารถใช้การทำงานพื้นฐานทั้งสี่ร่วมกันได้ :)
26 - (26 // 7 * 7) = 5
จาก 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อธิบายถึงเหตุผลในการสร้างฟังก์ชั่นใหม่
ใช้% แทนที่จะเป็น / เมื่อคุณแบ่ง สิ่งนี้จะคืนส่วนที่เหลือให้คุณ ดังนั้นในกรณีของคุณ
26 % 7 = 5
โมดูโล่จะเป็นคำตอบที่ถูกต้อง แต่ถ้าคุณทำด้วยตัวเองมันควรจะได้ผล
num = input("Enter a number: ")
div = input("Enter a divisor: ")
while num >= div:
num -= div
print num
เราสามารถแก้ปัญหานี้ได้โดยใช้ตัวดำเนินการโมดูลัส (%)
26% 7 = 5;
แต่ 26/7 = 3 เพราะมันจะให้ผลหาร แต่ตัวดำเนินการ% จะให้ส่วนที่เหลือ
คุณสามารถค้นหาส่วนที่เหลือโดยใช้ตัวดำเนินการ modulo ตัวอย่าง
a=14
b=10
print(a%b)
มันจะพิมพ์ 4
หากคุณต้องการส่วนที่เหลือของปัญหาการหารของคุณเพียงแค่ใช้กฎส่วนที่เหลือจริงเช่นเดียวกับในวิชาคณิตศาสตร์ ได้รับสิ่งนี้จะไม่ให้ผลลัพธ์ทศนิยม
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 มิฉะนั้นจะส่งผลให้มีจำนวนลอย
คุณสามารถกำหนดฟังก์ชั่นและเรียกมันว่าส่วนที่เหลือด้วย 2 ค่าเช่น rem (number1, number2) ที่ส่งกลับ number1% number2 จากนั้นสร้างครู่หนึ่งและตั้งค่าเป็นจริงจากนั้นพิมพ์สองอินพุตสำหรับฟังก์ชั่นของคุณถือหมายเลข 1 และ 2 (number1, number2)