Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตัวดำเนินการดิวิชั่นใน Python?


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

โดยทั่วไป คำจำกัดความของ python ของ division(/) ขึ้นอยู่กับอาร์กิวเมนต์เท่านั้น ตัวอย่างเช่นใน python 2.7 การหาร 20/7 เป็น 2 เพราะทั้งสองอาร์กิวเมนต์เป็นจำนวนเต็ม อย่างไรก็ตาม 20./7 จะสร้าง 2.857142857142857 เป็นเอาต์พุตเนื่องจากอาร์กิวเมนต์เป็นตัวเลขทศนิยม

คำจำกัดความข้างต้นของ '/' มักทำให้เกิดปัญหากับแอปพลิเคชันที่ใช้ประเภทข้อมูลที่ผู้เขียนไม่คาดคิด

พิจารณาโปรแกรมง่ายๆ ในการแปลงอุณหภูมิจากเซลเซียสเป็นฟาเรนไฮต์ การแปลงจะให้ผลลัพธ์ที่แตกต่างกันสองแบบขึ้นอยู่กับอินพุต หากผู้ใช้รายหนึ่งระบุอาร์กิวเมนต์จำนวนเต็ม (18) และอาร์กิวเมนต์จุดทศนิยมอื่น (18.0) คำตอบก็ต่างกันโดยสิ้นเชิง แม้ว่าอินพุตทั้งหมดจะมีค่าตัวเลขเท่ากัน

#Conversion of celcius to Fahrendheit in python 2.6
>>> print 18*9/5 + 32
64
>>> print 18.0*9/5 + 32
64.4
>>> 18 == 18.0
True

จากด้านบน เราจะเห็นได้ว่าเมื่อเราผ่าน 18.0 เราจะได้เอาต์พุตที่ถูกต้อง และเมื่อเราผ่าน 18 เราได้รับเอาต์พุตที่ไม่ถูกต้อง ลักษณะการทำงานนี้เป็นเพราะใน python 2.x ตัวดำเนินการ "/" ทำงานเป็นตัวแบ่งพื้นในกรณีที่อาร์กิวเมนต์ทั้งหมดเป็นจำนวนเต็ม อย่างไรก็ตาม หากหนึ่งในอาร์กิวเมนต์เป็นค่าทศนิยม ตัวดำเนินการ “/” จะส่งกลับค่าทศนิยม

ฟังก์ชันการแปลงที่ชัดเจน (เช่น float(x)) สามารถช่วยป้องกันสิ่งนี้ได้ อย่างไรก็ตาม แนวคิดสำหรับ python นั้นควรเป็นภาษาที่เรียบง่ายและกระจัดกระจาย โดยไม่ต้องมีการแปลงจำนวนมากเพื่อครอบคลุมกรณีที่หายากของประเภทข้อมูลที่ไม่คาดคิด เริ่มต้นด้วยเวอร์ชัน Python 2.2 มีการเพิ่มตัวดำเนินการหารใหม่เพื่อชี้แจงสิ่งที่คาดหวัง ตัวดำเนินการสามัญ / ตัวดำเนินการจะส่งคืนผลลัพธ์ทศนิยมในอนาคต ตัวดำเนินการส่วนพิเศษ // จะแสดงผลแบบปัดเศษลง

>>> # Python 2.7 program to demonstrate the use of "//" for both integers and floating point number
>>> print 9//2
4
>>> print -9//2
-5
>>> print 9.0//2
4.0
>>> print -9.0//2
-5.0

ปฏิบัติการดิวิชั่นใน Python 3.x

ใน python 3.x ข้อบกพร่องที่กล่าวถึงข้างต้นจะถูกลบออกและตัวดำเนินการ '/' ทำการหารจุดทศนิยมสำหรับอาร์กิวเมนต์ทั้งจำนวนเต็มและทศนิยม

>>> #Conversion of celcius to Fahrendheit in python 3.x
>>> #Passing 18 (integer)
>>> print (18*9/5 + 32)
64.4
>>> #Passing 18.0(float)
>>> print(18.0*9/5 + 32)
64.4

เมื่อเราส่งอาร์กิวเมนต์ +ve หรือ –ve ก็ไม่ต่างกัน

>>> print(9/2)
4.5
>>> print(-9/2)
-4.5
>>> print(9.0/2)
4.5
>>> print(-9.0/2)
-4.5