ผลลัพธ์ของ% ใน Python คืออะไร


241

อะไร%ในการคำนวณหรือไม่? ฉันดูเหมือนจะไม่สามารถคิดออกว่ามันทำอะไร

มันคำนวณเปอร์เซ็นต์ของการคำนวณเช่น: 4 % 2เท่ากับ 0 ได้อย่างไร

คำตอบ:


304

โอเปอเรเตอร์% (modulo) ให้ผลที่เหลือจากการหารอาร์กิวเมนต์แรกด้วยวินาที อาร์กิวเมนต์ที่เป็นตัวเลขจะถูกแปลงเป็นประเภททั่วไปก่อน อาร์กิวเมนต์ด้านขวาเป็นศูนย์ยกข้อยกเว้น ZeroDivisionError อาร์กิวเมนต์อาจเป็นตัวเลขทศนิยมเช่น 3.14% 0.7 เท่ากับ 0.34 (ตั้งแต่ 3.14 เท่ากับ 4 * 0.7 + 0.34) ตัวดำเนินการแบบโมดูโลให้ผลลัพธ์ที่มีเครื่องหมายเดียวกับตัวถูกดำเนินการตัวที่สอง (หรือศูนย์) ค่าสัมบูรณ์ของผลลัพธ์นั้นเล็กกว่าค่าสัมบูรณ์ของตัวถูกดำเนินการที่สอง [2]

นำมาจากhttp://docs.python.org/reference/expressions.html

ตัวอย่างที่ 1: 6%2ประเมินเป็น0เพราะไม่มีเศษเหลือหาก 6 หารด้วย 2 (3 ครั้ง)

ตัวอย่างที่ 2 : 7%2ประเมินค่า1เนื่องจากมีส่วนที่เหลือ1เมื่อ 7 ถูกหารด้วย 2 (3 ครั้ง)

ดังนั้นเพื่อสรุปว่าจะส่งคืนส่วนที่เหลือของการดำเนินการหารหรือ0ถ้าไม่มีส่วนที่เหลือ ดังนั้น6%2วิธีการหาที่เหลือของ 6 หารด้วย 2


7
เหตุใดตัวอย่างทั้งหมดจึงมีจำนวนที่มากขึ้นทางด้านขวา ใครสามารถอธิบายผลลัพธ์ของ 2% 6 ที่ให้ผลลัพธ์ 2 ได้
wookie

8
ตัวเลขตัวแรกคือตัวเศษและตัวที่สองเป็นตัวส่วน ในตัวอย่างที่ 2 ของคุณหารด้วย 6 คือ 0 ส่วนที่เหลือ 2 ดังนั้นผลลัพธ์จึงเป็น 2
เดวิด

4
โปรดอัปเดตคำตอบของคุณมีคำตอบที่ถูกต้องมากขึ้นด้านล่าง ในC / C ++ % ใช้สำหรับ 'rem' ในขณะที่ Python% ใช้สำหรับ 'mod' เช่น- 21 % 43 ใน Python
azam

คุณช่วยอธิบายได้-11%5 = 4ไหมว่าทำไม
dahiya_boy

@dahiya_boy ฉันได้เพิ่มคำอธิบายของ GvR ไปยังคำตอบ upvoted น้อยของฉันด้านล่าง
เปาโล Scardine

143

ค่อนข้างปิดหัวข้อ%นอกจากนี้ยังใช้ในการดำเนินการจัดรูปแบบสตริงต้องการ%=แทนที่ค่าลงในสตริง:

>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x 
'abc_value_'

อีกครั้งนอกหัวข้อ แต่ดูเหมือนจะเป็นคุณลักษณะที่บันทึกไว้เล็กน้อยซึ่งพาฉันไปชั่วขณะหนึ่งเพื่อติดตามและฉันคิดว่ามันเกี่ยวข้องกับการคำนวณแบบ Pythons modulo ซึ่งหน้า SO อันดับนี้สูง


มีการใช้ตรรกะ% ที่ใช้เป็นข้อมูลอ้างอิงในการจัดรูปแบบสตริงหรือไม่หรือเป็นเพียงอุบัติเหตุจากประวัติศาสตร์ที่มีการใช้สัญลักษณ์มากเกินไป? นี่ควรเป็นคำถามของตัวเองเหรอ?
WAF

5
จัดทำเอกสารไม่ดี? ฉันไม่คิดอย่างนั้น: การดำเนินการจัดรูปแบบสตริง
KurzedMetal

@KurzedMetal - %=ไม่ปรากฏที่หน้านั้น
P. Myer Nore

@WAF %ผู้ประกอบการได้รับเลือกเพราะมันสะท้อนเปอร์เซ็นต์ตัวระบุที่ใช้ภายในสตริง
MI Wright

@ P.Myer ไม่ทราบว่านี่เป็นเวลาเกือบ 3 ปีต่อมา แต่อาจช่วยเหลือผู้อื่นได้ อ่านพาราแรกที่ไฮไลต์ในไม่กี่วินาที 5.6.2 ลิงก์ข้างต้นโดย KurzedMetal "x% = {}" เป็นเพียงรูปแบบย่อสำหรับ "x = x% {... }"
Sujay Phadke

58

นิพจน์เช่นx % yประเมินไปยังส่วนที่เหลือของx ÷ y- ดีในทางเทคนิคมันเป็น "โมดูลัส" แทน "เตือน" ดังนั้นผลลัพธ์อาจแตกต่างกันถ้าคุณกำลังเปรียบเทียบกับภาษาอื่น ๆ ที่%เป็นผู้ประกอบการที่เหลือ มีความแตกต่างเล็กน้อยบางอย่าง (ถ้าคุณสนใจในผลที่เกิดขึ้นจริงโปรดดูที่ "ทำไมชั้นของ Integer Division Python" ร้อง)

ลำดับความสำคัญเหมือนกันกับตัวดำเนินการ/(การหาร) และ*(การคูณ)

>>> 9 / 2
4
>>> 9 % 2
1
  • 9 หารด้วย 2 เท่ากับ 4
  • 4 คูณ 2 คือ 8
  • 9 ลบ 8 คือ 1 - ส่วนที่เหลือ

Python gotcha : ขึ้นอยู่กับเวอร์ชันของ Python ที่คุณใช้%เป็นตัวดำเนินการสอดแทรกสตริง (คัดค้าน) ดังนั้นโปรดระวังถ้าคุณมาจากภาษาที่มีการคัดเลือกประเภทอัตโนมัติ (เช่น PHP หรือ JS) ซึ่งนิพจน์เช่น'12' % 2 + 3นั้นถูกต้อง: ใน งูหลามมันจะส่งผลTypeError: not all arguments converted during string formattingซึ่งอาจจะค่อนข้างสับสนสำหรับคุณ

[อัพเดตสำหรับ Python 3]

ความคิดเห็นของผู้ใช้ n00p:

9/2 คือ 4.5 ในหลาม คุณต้องทำหารจำนวนเต็มเช่น: 9 // 2 ถ้าคุณต้องการให้ไพ ธ อนบอกคุณว่ามีวัตถุทั้งหมดเหลืออยู่หลังจากการหาร (4)

เพื่อความแม่นยำการหารด้วยจำนวนเต็มเคยเป็นค่าเริ่มต้นใน Python 2 (โปรดทราบว่าคำตอบนี้เก่ากว่าเด็กผู้ชายของฉันที่อยู่ในโรงเรียนแล้วและตอนที่ 2.x เป็นกระแสหลัก):

$ python2.7
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4
>>> 9 // 2
4
>>> 9 % 2
1

ใน9 / 2ผลลัพธ์ของPython ที่ทันสมัย4.5:

$ python3.6
Python 3.6.1 (default, Apr 27 2017, 00:15:59)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4.5
>>> 9 // 2
4
>>> 9 % 2
1

[อัพเดต]

ผู้ใช้ dahiya_boy ถามในเซสชั่นความคิดเห็น:

Q.คุณช่วยอธิบายได้-11 % 5 = 4ไหมว่าทำไม- dahiya_boy

นี่มันแปลกจริงไหม? หากคุณลองใน JavaScript:

> -11 % 5
-1

นี่เป็นเพราะใน JavaScript %เป็นตัวดำเนินการ "ที่เหลืออยู่" ในขณะที่ใน Python มันเป็นตัวดำเนินการ "โมดูลัส" (นาฬิกาคณิตศาสตร์)

คุณสามารถรับคำอธิบายได้โดยตรงจาก GvR :


แก้ไข - dahiya_boy

ใน Java และ iOS ในขณะที่ในหลามและทับทิม-11 % 5 = -1-11 % 5 = 4

เหตุผลครึ่งหนึ่งนั้นอธิบายไว้โดยเปาลาสการ์ดีนและคำอธิบายที่เหลืออยู่ที่นี่

ใน Java และ iOS %จะช่วยให้ส่วนที่เหลือซึ่งหมายความว่าถ้าคุณแบ่ง11% 5 ให้Quotient = 2 and remainder = 1และ-11% 5Quotient = -2 and remainder = -1ให้

โค้ดตัวอย่างใน swift iOS

ป้อนคำอธิบายรูปภาพที่นี่

แต่เมื่อเราพูดถึงไพ ธ อนมันให้โมดูลัสของนาฬิกา และใช้งานได้กับสูตรด้านล่าง

mod(a,n) = a - {n * Floor(a/n)}

นั่นหมายความว่า

mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}

ดังนั้น, mod(11,5) = 1

และ

mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}

ดังนั้น, mod(-11,5) = 4

โค้ดตัวอย่างใน python 3.0

ป้อนคำอธิบายรูปภาพที่นี่


ทำไมต้องเป็น Integer Division Python

ฉันถูกถาม (อีกครั้ง) ในวันนี้เพื่ออธิบายว่าทำไมการหารจำนวนเต็มใน Python ส่งคืนพื้นของผลลัพธ์แทนที่จะตัดให้เป็นศูนย์เช่น C

สำหรับตัวเลขบวกไม่มีความประหลาดใจ:

>>> 5//2
2

แต่ถ้าตัวถูกดำเนินการตัวใดตัวหนึ่งเป็นลบผลลัพธ์จะถูกปูพื้นเช่นถูกปัดเศษจากศูนย์ (ไปทางอนันต์ลบ):

>>> -5//2
-3
>>> 5//-2
-3

สิ่งนี้รบกวนบางคน แต่มีเหตุผลทางคณิตศาสตร์ที่ดี การดำเนินการหารจำนวนเต็ม (//) และพี่น้องของมัน, การดำเนินการ modulo (%), ไปด้วยกันและตอบสนองความสัมพันธ์ทางคณิตศาสตร์ที่ดี (ตัวแปรทั้งหมดเป็นจำนวนเต็ม):

a/b = q with remainder r

ดังนั้น

b*q + r = a and 0 <= r < b

(สมมติว่า a และ b เป็น> = 0)

หากคุณต้องการให้ความสัมพันธ์ขยายออกไปเป็นลบ a (ทำให้ b เป็นบวก) คุณมีสองทางเลือก: ถ้าคุณตัด q เป็นศูนย์ r จะกลายเป็นลบดังนั้นค่าคงที่จะเปลี่ยนเป็น 0 <= abs (r) <ไม่เช่นนั้นคุณ สามารถวาง q ไปทางอนันต์เชิงลบได้และค่าคงที่จะเป็น 0 <= r <b [อัพเดท: แก้ไขย่อหน้านี้]

ในทฤษฎีจำนวนคณิตศาสตร์นักคณิตศาสตร์มักชอบตัวเลือกหลัง (ดูเช่นWikipedia ) สำหรับ Python ฉันเลือกได้เหมือนกันเพราะมีบางแอปพลิเคชั่นที่น่าสนใจของการดำเนินการแบบโมดูโลโดยที่สัญลักษณ์ของ a นั้นไม่น่าสนใจ ลองพิจารณาการประทับเวลา POSIX (วินาทีนับตั้งแต่จุดเริ่มต้นของปี 1970) และเปลี่ยนเป็นเวลาของวัน เนื่องจากมี 24 * 3600 = 86400 วินาทีในหนึ่งวันการคำนวณนี้เป็นเพียง% 86400 แต่ถ้าเราต้องแสดงเวลาก่อนปี 1970 โดยใช้ตัวเลขติดลบกฎ "การตัดปลายสู่ศูนย์" จะให้ผลลัพธ์ที่ไร้ความหมาย! ใช้กฎพื้นมันทั้งหมดทำงานได้ดี

แอปพลิเคชันอื่นที่ฉันคิดว่าเป็นการคำนวณตำแหน่งพิกเซลในคอมพิวเตอร์กราฟิก ฉันแน่ใจว่ามีมากขึ้น

สำหรับด้านลบ b โดยวิธีการทุกอย่างเพียงแค่พลิกและค่าคงที่กลายเป็น:

0 >= r > b.

เหตุใด C จึงไม่ทำเช่นนี้ อาจเป็นไปได้ว่าฮาร์ดแวร์ไม่ได้ทำในขณะที่ C ได้รับการออกแบบ และฮาร์ดแวร์อาจไม่ได้ทำเช่นนี้เพราะในฮาร์ดแวร์ที่เก่าแก่ที่สุดตัวเลขลบถูกแสดงว่าเป็น "เครื่องหมาย + ขนาด" แทนที่จะแสดงส่วนประกอบของทั้งสองใช้วันนี้ (อย่างน้อยสำหรับจำนวนเต็ม) คอมพิวเตอร์เครื่องแรกของฉันคือเมนเฟรมข้อมูลควบคุมและใช้ส่วนประกอบหนึ่งอย่างสำหรับจำนวนเต็มและลอย รูปแบบของ 60 รายการหมายถึงศูนย์ลบ!

ทิมปีเตอร์สใครจะรู้ว่าฝังโครงกระดูกจุดของไพ ธ อนไว้ที่ไหนแสดงความกังวลเกี่ยวกับความปรารถนาของฉันที่จะขยายกฎเหล่านี้ไปยังโมดูโลจุดลอย เขาอาจพูดถูก กฎที่ถูกตัดทอนไปทางลบจะทำให้สูญเสียความแม่นยำสำหรับ x% 1.0 เมื่อ x เป็นจำนวนลบที่น้อยมาก แต่นั่นไม่เพียงพอสำหรับฉันที่จะทำลายโมดูโลจำนวนเต็มและ // เป็นคู่ที่แน่นแฟ้น

PS โปรดทราบว่าฉันใช้ // แทน / - นี่คือไวยากรณ์ Python 3 และอนุญาตให้ใช้ใน Python 2 เพื่อเน้นว่าคุณรู้ว่าคุณกำลังเรียกใช้การหารจำนวนเต็ม / โอเปอเรเตอร์ใน Python 2 นั้นคลุมเครือเนื่องจากมันจะส่งกลับผลลัพธ์ที่แตกต่างกันสำหรับตัวถูกดำเนินการจำนวนเต็มสองตัวสำหรับแบบ int และแบบ float หรือแบบลอยสองแบบ แต่นั่นเป็นเรื่องที่แยกจากกันโดยสิ้นเชิง ดู PEP 238

โพสต์โดย Guido van Rossum เวลา 9:49 น


1
นอกจากนี้เอกสารคงhelp(divmod) q, r = divmod(x y) <==> q*y + r == x
chepner

49

โมดูลัสคือการดำเนินการทางคณิตศาสตร์บางครั้งอธิบายว่า "นาฬิกาเลขคณิต" ฉันพบว่าการอธิบายว่ามันเป็นเพียงเศษเสี้ยวที่ทำให้เข้าใจผิดและสับสนเพราะปกปิดเหตุผลที่ใช้ในวิทยาศาสตร์คอมพิวเตอร์ มันถูกใช้เพื่อพันรอบ ๆ

คิดว่าเป็นนาฬิกา: สมมติว่าคุณดูนาฬิกาในเวลา "ทหาร" ซึ่งช่วงเวลาเริ่มตั้งแต่ 0:00 - 23.59 ตอนนี้ถ้าคุณต้องการบางสิ่งบางอย่างเกิดขึ้นทุกวันเวลาเที่ยงคืนคุณต้องการให้เวลาปัจจุบัน mod 24 เป็นศูนย์:

ถ้า (ชั่วโมง% 24 == 0):

คุณสามารถคิดถึงชั่วโมงทั้งหมดในการพันรอบประวัติศาสตร์เป็นวงกลม 24 ชั่วโมงขึ้นไปและชั่วโมงปัจจุบันของวันนี้คือ mod number ที่ไม่มีที่สิ้นสุดนาน 24 มันเป็นแนวคิดที่ลึกซึ้งยิ่งกว่าส่วนที่เหลือมันเป็นวิธีทางคณิตศาสตร์ เพื่อจัดการกับรอบและเป็นสิ่งสำคัญมากในวิทยาการคอมพิวเตอร์ นอกจากนี้ยังใช้ล้อมรอบอาร์เรย์ช่วยให้คุณสามารถเพิ่มดัชนีและใช้โมดูลัสเพื่อตัดกลับไปที่จุดเริ่มต้นหลังจากที่คุณไปถึงจุดสิ้นสุดของอาร์เรย์


1
นี่คือวิธีการใช้งานใน Python:a % b = a - b * floor(a/b)
Aiman ​​Al-Eryani


7

ส่วนภาษา% ใช้สำหรับโมดูลัส Python ก็ไม่มีข้อยกเว้น


11
เท่าที่ฉันเห็นไพ ธ อนนั้นผิดปกติเพราะมันใช้% สำหรับโมดูลัส Fortran, C / C ++ และ Java ใช้% เพื่อหมายถึงส่วนที่เหลือ (ดูstackoverflow.com/questions/13683563/ …ความแตกต่างคือวิธีจัดการค่าลบและเศษส่วน) ภาษาที่สร้างความแตกต่าง (เช่น Ada, Haskell และ Scheme) ใช้คำว่า "rem" และ "mod" (หรือ "ส่วนที่เหลือ" และ "โมดูโล") แทนที่จะเป็น%
Jim Pivarski

5
ปรับปรุง: ฉันพบตารางที่ยิ่งใหญ่นี้ของการดำเนินงานแบบโมดูโล / ที่เหลือตามภาษาen.wikipedia.org/wiki/Modulo_operation Python ผิดปกติ แต่ไม่ซ้ำกัน (ตัวอย่างเช่น TCL และ Lua แบ่งปันการประชุม Python)
Jim Pivarski

5

% ผู้ประกอบการ Modulo ยังสามารถใช้สำหรับการพิมพ์สตริง (เช่นเดียวกับใน C) ตามที่กำหนดไว้ใน Google https://developers.google.com/edu/python/strings

      # % operator
  text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')

ดูเหมือนว่าจะปิดหัวข้อนี้ แต่แน่นอนว่ามันจะช่วยให้ใครบางคน


4

x % yคำนวณที่เหลือของการแบ่งxหารด้วยyที่หารเป็นจำนวนเต็ม yส่วนที่เหลือมีสัญลักษณ์ของ


บน Python 3 การคำนวณจะให้ผล6.75; นี่เป็นเพราะการ/แบ่งเป็นจริงไม่ใช่การหารจำนวนเต็มเช่น (โดยค่าเริ่มต้น) บน Python 2 บน Python 2 1 / 4จะให้ 0 เนื่องจากผลลัพธ์จะถูกปัดเศษลง

การแบ่งจำนวนเต็มสามารถทำได้บน Python 3 ด้วย//ตัวดำเนินการดังนั้นเมื่อต้องการรับผลลัพธ์ 7 คุณสามารถดำเนินการได้:

3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6

นอกจากนี้คุณยังสามารถแบ่งสไตล์ Python บน Python 2 เพียงแค่เพิ่มบรรทัด

from __future__ import division

เป็นบรรทัดซอร์สโค้ดแรกในไฟล์ต้นฉบับแต่ละไฟล์


8
โปรดจำไว้ว่าเด็ก#สำหรับการแสดงความคิดเห็นและ//เป็นผู้ดำเนินการ
Mike Causer

3

ตัวดำเนินการโมดูลัสนั้นจะใช้สำหรับการแบ่งส่วนที่เหลือในจำนวนเต็มโดยทั่วไป แต่ใน Python สามารถใช้สำหรับจำนวนจุดลอยตัว

http://docs.python.org/reference/expressions.html

โอเปอเรเตอร์% (modulo) ให้ผลที่เหลือจากการหารอาร์กิวเมนต์แรกด้วยวินาที อาร์กิวเมนต์ที่เป็นตัวเลขจะถูกแปลงเป็นประเภททั่วไปก่อน อาร์กิวเมนต์ด้านขวาเป็นศูนย์ยกข้อยกเว้น ZeroDivisionError อาร์กิวเมนต์อาจเป็นตัวเลขทศนิยมเช่น 3.14% 0.7 เท่ากับ 0.34 (ตั้งแต่ 3.14 เท่ากับ 4 * 0.7 + 0.34) ตัวดำเนินการแบบโมดูโลให้ผลลัพธ์ที่มีเครื่องหมายเดียวกับตัวถูกดำเนินการตัวที่สอง (หรือศูนย์) ค่าสัมบูรณ์ของผลลัพธ์นั้นเล็กกว่าค่าสัมบูรณ์ของตัวถูกดำเนินการที่สอง [2]


3

มันเป็นมอดุโลยกเว้นเมื่อมันเป็นผู้ประกอบการสตริง C-รูปแบบการจัดรูปแบบเก่าไม่ได้เป็นมอดุโล ดูรายละเอียดที่นี่ คุณจะเห็นสิ่งนี้มากมายในรหัสที่มีอยู่


3

นอกจากนี้ยังมีฟังก์ชั่นในตัวที่มีประโยชน์ที่เรียกว่าdivmod:

divmod (a, b)

ใช้ตัวเลขสองตัว (ไม่ซับซ้อน) เป็นอาร์กิวเมนต์และส่งกลับตัวเลขที่ประกอบด้วยความฉลาดและส่วนที่เหลือเมื่อใช้การหารแบบยาว


2

ระวังตัวด้วย

(3 +2 + 1 - 5) + (4 % 2) - (1/4) + 6

แม้ในวงเล็บจะให้ผลลัพธ์เป็น 6.75 แทนที่จะเป็น 7 หากคำนวณใน Python 3.4


และตัวดำเนินการ '/' นั้นไม่ใช่เรื่องง่ายที่จะเข้าใจเช่นกัน (python2.7): ลอง ...

- 1/4

1 - 1/4

นี่เป็นหัวข้อนอกเรื่องเล็กน้อยที่นี่ แต่ควรพิจารณาเมื่อประเมินนิพจน์ด้านบน :)


2
สิ่งนี้จะเป็น 7 ได้อย่างไร มันลดความซับซ้อน(1)+(0)-(0.25)+(6)ของ
J.Steve

1

มันยากสำหรับฉันที่จะหากรณีการใช้งานเฉพาะสำหรับการใช้งาน% ออนไลน์ได้อย่างง่ายดายเช่นทำไมการทำโมดูลัสเศษส่วนหรือการหารโมดูลัสเชิงลบส่งผลให้คำตอบว่าเป็นเช่นนั้น หวังว่าสิ่งนี้จะช่วยชี้แจงคำถามเช่นนี้:

โมดูลัสกองโดยทั่วไป:

การหารโมดูลัสส่งคืนส่วนที่เหลือของการดำเนินการหารทางคณิตศาสตร์ มันเป็นดังนี้:

สมมติว่าเรามีเงินปันผล 5 และตัวหารของ 2 การดำเนินการหารต่อไปนี้จะ (เท่ากับ x):

dividend = 5
divisor = 2

x = 5/2 
  1. ขั้นตอนแรกในการคำนวณโมดูลัสคือการดำเนินการหารจำนวนเต็ม:

    x_int = 5 // 2 (การหารจำนวนเต็มใน python ใช้ double slash)

    x_int = 2

  2. ถัดไปผลลัพธ์ของ x_int จะถูกคูณด้วยตัวหาร:

    x_mult = x_int * ตัวหาร x_mult = 4

  3. สุดท้ายเงินปันผลจะถูกลบออกจาก x_mult

    เงินปันผล - x_mult = 1

  4. ดังนั้นการดำเนินการโมดูลัสจึงส่งคืน 1:

    5% 2 = 1

แอพลิเคชันเพื่อใช้โมดูลัสกับเศษส่วน

Example: 2 % 5 

การคำนวณของโมดูลัสเมื่อนำไปใช้กับเศษส่วนเป็นเช่นเดียวกับข้างต้น; อย่างไรก็ตามมันเป็นสิ่งสำคัญที่จะต้องทราบว่าการหารจำนวนเต็มจะส่งผลให้มีค่าเป็นศูนย์เมื่อตัวหารมีขนาดใหญ่กว่าเงินปันผล:

dividend = 2 
divisor = 5

การหารจำนวนเต็มให้ผลลัพธ์เป็น 0 โดยที่; ดังนั้นเมื่อดำเนินการตามขั้นตอนที่ 3 ข้างต้นแล้วมูลค่าของเงินปันผลจะถูกดำเนินการผ่าน (ลบออกจากศูนย์):

dividend - 0 = 2  —> 2 % 5 = 2 

แอพลิเคชันเพื่อใช้โมดูลัสกับการลบ

การแบ่งชั้นเกิดขึ้นซึ่งค่าของการหารจำนวนเต็มถูกปัดเศษลงเป็นค่าจำนวนเต็มต่ำสุด:

import math 

x = -1.1
math.floor(-1.1) = -2 

y = 1.1
math.floor = 1

ดังนั้นเมื่อคุณทำการหารจำนวนเต็มคุณอาจได้ผลลัพธ์ที่แตกต่างจากที่คุณคาดไว้!

การนำขั้นตอนข้างต้นไปใช้กับเงินปันผลและตัวหารดังต่อไปนี้แสดงให้เห็นถึงแนวคิดของโมดูลัส:

dividend: -5 
divisor: 2 

ขั้นตอนที่ 1: ใช้การหารจำนวนเต็ม

x_int = -5 // 2  = -3

ขั้นตอนที่ 2: คูณผลลัพธ์ของการหารจำนวนเต็มด้วยตัวหาร

x_mult = x_int * 2 = -6

ขั้นตอนที่ 3: ลบเงินปันผลจากตัวแปรคูณสังเกตลบสองครั้ง

dividend - x_mult = -5 -(-6) = 1

ดังนั้น:

-5 % 2 = 1

0

โอเปอเรเตอร์% (modulo) ให้ผลที่เหลือจากการหารอาร์กิวเมนต์แรกด้วยวินาที อาร์กิวเมนต์ที่เป็นตัวเลขจะถูกแปลงเป็นประเภททั่วไปก่อน

3 + 2 + 1 - 5 + 4% 2 - 1/4 + 6 = 7

สิ่งนี้ขึ้นอยู่กับลำดับความสำคัญของโอเปอเรเตอร์


0

%เป็นโมดูโล 3 % 2 = 1,4 % 2 = 0

/ คือ (จำนวนเต็มในกรณีนี้) ส่วนดังนั้น:

3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6
1 + 4%2 - 1/4 + 6
1 + 0 - 0 + 6
7

0

เป็นการดำเนินการแบบโมดูโล http://en.wikipedia.org/wiki/Modulo_operation

http://docs.python.org/reference/expressions.html

ดังนั้นด้วยคำสั่งของการดำเนินการที่ทำงานออกไป

(3 + 2 + 1-5) + (4% 2) - (1/4) + 6

(1) + (0) - (0) + 6

7

1/4 = 0 เพราะเราทำเลขจำนวนเต็มตรงนี้



0

โมดูลัส - แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวาและผลตอบแทนที่เหลือ

ถ้ามันช่วย:

1:0> 2%6
=> 2
2:0> 8%6
=> 2
3:0> 2%6 == 8%6
=> true

... และต่อไป


0

ฉันพบว่าวิธีที่ง่ายที่สุดในการเข้าใจตัวดำเนินการโมดูลัส (%) คือการแบ่งส่วนที่ยาว เป็นส่วนที่เหลือและสามารถเป็นประโยชน์ในการกำหนดจำนวนให้เป็นเลขคู่หรือคี่:

4%2 = 0

  2
2|4
 -4
  0


11%3 = 2

  3
3|11
 -9
  2

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