تقسیم یکی از عملگرهای اساسی ریاضی در برنامهنویسی است و پایتون روشهای سادهای برای انجام این عملیات ارائه میدهد. پایتون زبان برنامهنویسی پرکاربردی است که در حوزههای مختلفی مثل پردازش داده، توسعه برنامههای اینترنتی، تحلیل داده و هوش مصنوعی استفاده میشود. در این مطلب از مجله فرادرس، سعی میکنیم نحوه انجام عملیات تقسیم در پایتون را در کاملترین حالت تعریف کنیم. تسلط اساسی بر عملگرهای ریاضی برای مقابله کردن با مسائل بسیار پیچیده این حوزهها امر بسیار ضروری است. برای اجرای تقسیم در پایتون میتوانید از /
برای اعداد «اعشاری» (Float) و از //
برای اعداد «صحیح» (Integer) استفاده کنید. همچنین زمانی که میخواهید یک آرایه را بر آرایه دیگری تقسیم کنید، میتوانید از تابع پیشساخته کتابخانه NumPy به نام np.divide
کمک بگیرید. علاوه بر علامتهای گفته شده تقسیم در پایتون، علامت ٪
باقیمانده یک تقسیم صحیح را برمیگرداند. تقسیم صحیح در پایتون، تقسیمی است که مقسوم و مقسومعلیه را به خارج قسمت و باقیمانده تبدیل میکند، بهگونهای که خارج قسمت را به ما برمیگرداند و باقیمانده را حذف میکند.
بهکمک عملگرهای بالا میتوانید رویکرد کدنویسی خود را با مسائل خاص سازگار کنید. هرقدر که در موضوع عمیقتر شویم، روشهای مختلفی را برای تقسیم اعداد در پایتون شامل استفاده از ورودیهای کاربر، توابع پیشساخته و کتابخانهها کشف خواهیم کرد که در ادامه این مطلب به آنها میپردازیم. بنابراین، برای بررسی تخصصیتر مبحث به ادامه متن توجه کنید.
انواع تقسیم در پایتون چیست؟
تقسیم Float اعداد را همیشه بهصورت اعشار برمیگرداند. حتی اگر تقسیم ما جواب صحیح داشته باشد.
برای مثال به قطعهکد زیر توجه کنید.
result = 8 / 3
print(result)
# Output: 2.6666666666666665
تقسیم بالا جواب را با مقدار کامل اعشار نمایش میدهد در حالی که تقسیم Integer یا تقسیم صحیح، حتی اگر اعشار بزرگ یا زیادی داشته باشد، کل جوابی که به ما بر میگرداند، خارجقسمت تقسیم یا همان قسمت صحیح عدد است. به عنوان مثال به قطعه کد زیر توجه کنید.
result = 9 // 2
print(result)
# Output: 4
این مدلهای تقسیم با استفاده از عملگرهای مختلفی اجرا میشوند.
- تقسیم Float (/): عملگر /
یا عملگر تقسیم، ۲ عدد را بر هم تقسیم میکند و یک مقدار Float را برمیگرداند (همانطور که در بالا بیان کردیم حتی اگر هر دو عدد و جوابشان عدد صحیح باشند.) و از هر ۲ نوع عدد صحیح و Float مقدار میپذیرد و خروجی میدهد.
- تقسیم Integer یا همان تقسیم صحیح (//): عملگر //
نامهای متفاوتی مانند تقسیم Integer، تقسیم صحیح یا تقسیم گرد شده به پایین دارد. به این معنا که جواب را با هر مقدار رقم اعشار به اولین عدد صحیح با اعشار صفر از پایین گرد میکند. این عملگر ۲ عدد Float یا صحیح را میگیرد، به هم تقسیم میکند و خارجقسمت تقسیم را برمیگرداند. توجه کنید که در این نوع تقسیم، مقدار باقیمانده را از دست میدهیم. از این تقسیم زمانی استفاده میکنیم که نتیجه را به عنوان یک عدد صحیح بخواهیم و به قسمت اعشار جواب نیاز نداشته باشیم.
تقسیم با استفاده از عملگرهای اصلی پایتون
در این بخش ما سه عملگر اصلی تقسیم در پایتون را بررسی میکنیم. همه انواع تقسیمهای موجود در پایتون هم بهکمک این عملگرها انجام میشوند. این عملگرها بهصورت /
، //
و ٪
نمایش داده میشوند، انواع مختلف تقسیم را مدیریت میکنند و میتوانند نتایج گوناگونی را ارائه دهند.
تقسیم با عملگر «/»
عملگر /
در پایتون فرایند تقسیم Float را انجام میدهد. وقتی که از این عملگر استفاده میشود، حتی اگر هر ۲ عملوند عدد صحیح باشند، نتیجه همیشه بهصورت مقدار اعشار نمایش داده میشود. بیشترین کاربرد این عملگر در ارتباط با اعداد اعشار و آرگومانها است.
در ادامه مثالی از تقسیم با عملگر /
را نمایش میدهیم.
result = 8 / 3
print(result)
خروجی قطعه کد بالا چنین خواهد بود.
2.6666666666666665
تقسیم با عملگر «//»
عملگر //
تقسیم صحیح یا تقسیم گرد شده به پایین را انجام میدهد. این عملگر بزرگترین عدد صحیح کوچکتر یا مساوی جواب تقسیم را برمیگرداند در واقع نتیجه را به سمت نزدیکترین عدد صحیح از پایین گرد یا رند میکند. عملگر //
در مقابل هر دو نوع داده اعداد صحیح و Float کاملا شبیه هم و یکسان عمل میکند.
در ادامه مثالی از عمل تقسیم با عملگر //
را مشاهده میکنید.
>>> result1 = 7 // 3 >>> print(result1) # Output: (integer division) 2 >>> result2 = 7.0 // 3.0 >>> print(result2) # Output: (floor division with floating point values) 2.0
نکته: توجه کنید که عملگر //
فقط نتیجه را به پایین گرد میکند یا به بیان سادهتر فقط باقیمانده را برمیگرداند و اگر مقادیر ورودی اعشار داشته باشند بدون تغییر در مقادیر ورودی، عمل تقسیم را انجام میدهد و نتیجه گرد شده را برمیگرداند.
در ادامه این مطلب از مجله فرادرس، مثالی از نکته بالا در عمل تقسیم با عملگر //
را مشاهده میکنید.
>>> result3 = 5 // 1.5 >>> print(result2) # Output: (floor division with different kind of values) 3.0
این عملگر زمانی کاربرد دارد که نیازمند کار با اعداد صحیح هستید یا قصد شمردن پیشامدهای خاصی را در یک محدوده مشخص دارید.
تقسیم با عملگر «٪»
عملگر ٪
در پایتون، که بهعنوان عملگر باقیمانده هم نامیده میشود، همانگونه که از نامش انتظار میرود باقیمانده عملیات تقسیم را برمیگرداند. یکی از کاربردهای عملگر ٪
این است که مشخص میکند آیا اعداد مختلف بر یکدیگر بخشپذیر هستند یا نه. قطعه کد زیر مثالی را از عمل تقسیم با عملگر ٪
نمایش میدهد.
>>> remainder = 9 % 4 >>> print(remainder) 1
عملگر ٪
در سناریوهای مختلفی مثل تعیین زوج یا فرد بودن اعداد قابل استفاده است. برای نمونه به کد زیر توجه کنید.
number = 13
if number % 2 == 0:
print("Even")
else:
print("Odd")
# Output: Odd
از آنجا که باقیمانده تقسیم عدد ۱۳ بر ۲ برابر با صفر نیست، خروجی، کلمه «فرد» (odd) را نمایش خواهد داد.
خلاصه عملگرهای تقسیم در پایتون
بهطور خلاصه، زبان برنامه نویسی پایتون، ۳ عملگر اصلی را برای اجرای انواع مختلف تقسیم ارائه میدهد.
- عملگر /
: تقسیم اعشار
- عملگر //
: تقسیم صحیح یا پیدا کردن خارج قسمت عملیات
- عملگر ٪
: محاسبه باقیمانده عملیات تقسیم
به کمک درک تفاوت میان این عملگرها شما میتوانید به صورت ماهرانه انواع وظایف مربوط به تقسیم را در پایتون مدیریت کنید. در ادامه، میگوییم که نحوه ایجاد توابع سفارشی برای انجام عمل تقسیم در پایتون چگونه است.
نحوه ایجاد توابع سفارشی برای انجام عمل تقسیم در پایتون
در پایتون برای مدیریت انواع مختلف اعداد و عملیات، میتوانید توابعی را بصورت سفارشی و دلخواه برای انجام عمل تقسیم طراحی کنید.
برای تعریف یک تابع تقسیم ابتدایی و ساده، میتوان از عملگر /
برای تقسیم اعشاری یا از عملگر //
برای تقسیم صحیح استفاده کرد.
def custom_float_division(a, b):
return a / b
def custom_integer_division(a, b):
return a // b
print( custom_float_division(5.2, 2))
print( custom_integer_division(3, 2))
این توابع برای اعداد مثبت و منفی، اعداد صحیح و مقادیر اعشاری کاربرد دارند. خروجی کدهای بالا بهصورت زیر خواهد بود.
2.6 1
زمانی که بخواهید باقیمانده یک عملیات تقسیم را بدست آورید، باید از عملگر باقیمانده ٪
، استفاده کنید.
def custom_mod(a, b):
return a % b
custom_mod(4,2)
خروجی تابع بالا بهصورت زیر خواهد بود.
0
تاکنون قسمت زیادی از مبحث تقسیم در پایتون را پوشش دادهایم، اما هنوز مطلب مفید و مهم دیگری باقیمانده است. در ادامه به این مسئله خواهیم پرداخت که چگونه میشود عمل تقسیم در پایتون را با کمک کتابخانهای مثل NumPy انجام داد.
چگونه از NumPy برای تقسیم در پایتون استفاده کنیم؟
وقتی با دادههایی در مقیاس بزرگ سروکار داریم یا نیازمند اجرای سریعتر عملیات هستیم، بسیار مهم است که از الگوریتمهای پربازده و کارآمدی استفاده کنیم. زبان برنامهنویسی قدرتمند پایتون اینجا بهکمک توسعهدهندگان میآید و کتابخانههای گوناگونی مثل NumPy و SciPy را ارائه میدهد. این کتابخانهها عملیات روی اعداد را به صورت بهینه انجام میدهند و با حداقل مصرف منابع، سرعت و دقت بیشتری را ارائه خواهند داد.
برای مثال بهوسیله NumPy میتوانید بهصورت عنصر به عنصر، عملیات تقسیم را در لیستها یا آرایههای پایتون، با استفاده از تابع numpy.divide()
انجام دهید. در ادامه، مثالی درباره استفاده از NumPy برای انجام عمل تقسیم روی لیستها مشاهده میکنید.
import numpy as np
array1 = np.array([1, 2, 3, 4])
array2 = np.array([2, 3, 4, 5])
result = np.divide(array1, array2)
print( result )
خروجی این تابع بهصورت زیر خواهد بود.
[0.5 , 0.66666667 , 0.75 , 0.8]
با تنظیم دقیق توابع تعریف شده توسط کاربر، برای مسئلههای مربوط به تقسیم در پایتون میتوان کارایی بالاتری را بهدست آورد.
ZeroDivisionError چیست؟
اکنون زمان آن رسیده که ببینیم «خطای تقسیم بر صفر» (ZeroDivisionError) چیست و چهطور میتوانیم آن را مدیریت کنیم. خطای تقسیم بر صفر در پایتون وقتی اتفاق میافتد که سعی کنیم هر عددی را به صفر تقسیم کنیم. البته که این مسئله در دنیای ریاضی هم جواب مشخصی ندارد ولی بهخاطر اینکه هرچه مقسومعلیه کوچکتر باشد، جواب عمل تقسیم عدد بزرگتری میشود بهطور قراردادی بین ریاضیدانان چنین توافق شده که تقسیم بر صفر برابر با بینهایت شود. اما در هر صورت در برنامهنویسی پایتون نمیتوانیم هیچ عددی را بر صفر تقسیم کنیم، چون باعث ایجاد خطا میشود. در ادامه، به کمک مثالی، این موضوع را توضیح میدهیم. در این مثال ساده عددی را به صفر تقسیم میکنیم و میبینیم که پایتون خطای ZeroDivisionError را نشان میدهد.
a=20
b=0
print(a/b)
خروجی قطعه کد بالا به این صورت میشود.
Hangup (SIGHUP) Traceback (most recent call last): File "Solution.py", line 3, in print(a/b) ZeroDivisionError: division by zero
چگونه خطای ZeroDivisionError را برطرف کنیم؟
در ادامه، روشهای مدیریت خطای تقسیم بر صفر در پایتون را فهرست کردهایم.
- استفاده از عبارات شرطی
- استفاده از تکنیک try/except
- مدیریت ورودی کاربر
استفاده از عبارات شرطی برای بررسی مقسوم علیه
خطای ZeroDivisionError به آسانی با استفاده از عبارات شرطی برطرف میشود. فقط کافی است بررسی کنیم مقسومعلیه صفر نباشد. در غیر این صورت به کاربر اطلاع میدهیم که صفر شده و باید تغییر کند، اجرای برنامه را متوقف یا عملیات مورد نظر برای این لحظه را اجرا میکنیم. به مثال زیر توجه کنید.
a=15.0
b=5.0
if b==0:
print("Denominator is zero")
else:
print(a/b)
خروجی عدد 3.0 میشود. در مثال بعدی هم ما صفر بودن یا نبودن مقسومعلیه را چک میکنیم. مقسومعلیه صفر است، اما به کمک عبارت شرطی if-else
این مشکل را مدیریت میکنیم.
a=15.0
b=0
if b==0:
print("Denominator is zero")
else:
print(a/b)
خروجی این کد بهصورت زیر خواهد بود.
Denominator is zero
برطرف کردن خطای ZeroDivisionError در پایتون با استفاده از عبارت try/except
در ادامه از تکنیکی در پایتون به نام «مدیریت استثنا» (Exception Handler) استفاده کردهایم. این تکنیک برنامهنویسی پایتون، مخصوص مدیریت خطاها، طراحی شده است. از آنجایی که پایتون خطایی برای تقسیم بر صفر بهنام ZeroDivisionError
دارد اگر خطایی رخ دهد، هم به اطلاع کاربر میرساند، هم قابل برنامهریزی و مدیریت است.
a = 16.0
b = 0
try:
result = a / b
except ZeroDivisionError:
result = 0
print(result)
خروجی این کد برابر با 0
میشود.
مدیریت ورودی کاربر با استفاده از عبارت try/except در پایتون
کد زیر یک ورودی از کاربر گرفته و سعی میکند، متغیر a را بر آن تقسیم کند. اگر کاربر عبارت معتبری را وارد کند، محاسبات انجام شده و نتیجه را برمیگرداند در غیر این صورت پیامی چاپ میشود که از کاربر میخواهد عددی بزرگتر از صفر وارد کند. البته توجه کنید که سیستم مدیریت استثنا در این کد، ۲ نوع خطا زیر را مدیریت میکند.
a = 18.0
try:
b= int(input('Enter a number: '))
ans = a / b
print(f'Answer is: {ans}')
except (ZeroDivisionError, ValueError):
print('Please enter number greater than zero')
جمع بندی
تا اینجا نحوه تقسیم در پایتون را با مثالهای مختلف یاد گرفتیم، در ادامه نکات دیگری را نیز بیان میکنیم. درک تسلط به این عملیات بسیار مهم است. مهارت و چیرهدستی برای استفاده از انواع مختلف تقسیم در پایتون سبب افزایش تسلط شما بر کدنویسی شده و به نوشتن کدهای کارآمدتر با قابلیت استفاده چندباره کمک خواهد کرد.
علاوه بر این، درک این مفاهیم باعث تقویت زیربنای علمی شما در پایتون میشود یا به اصطلاح باعث خواهد شد از پایه قوی رشد کنید و به شما این امکان را میدهد که مطالب پیچیدهتر را به آسانی متوجه شوید.
سوالات متداول
در این بخش از مطلب مجله فرادرس با سوالات متداولی رو بهرو میشوید که احتمالا برای شما هم هنگام کارکردن با عملیات تقسیم در پایتون بهوجود خواهد آمد.
تفاوت بین تقسیم Float و عدد صحیح در پایتون چیست؟
تقسیم عدد صحیح یا «//» بزرگترین عدد ممکن از نوع Integer را از عملیات تقسیم برمیگرداند. برای مثال، با برش قسمت اعشار در مقدار نتیجه تقسیم، 2 / 5، برابر با 2 میشود. تقسیم Float یا «/ » خارج قسمت را به صورت دقیق با تمام اعداد اعشار محاسبه میکند و برمیگرداند. برای مثال میتوان به 2.5 = 2 / 5 اشاره کرد.
روش تقسیم متغیرها در پایتون چیست؟
میتوان از عملگرهای ساده «/» یا «//» برای تقسیم متغیرها در پایتون استفاده کرد. به عنوان مثال اگر دو متغیر a و b را بخواهید بر یکدیگر تقسیم کنید و خارج قسمت را بطور کامل بهدست آورید میتوانید بهصورت زیر و به سادگی این عملیات را انجام دهید. منظور از خارج قسمت، جواب کامل مقدار احتمالی کامل اعشار است.
a = 10
b = 3
quotient = a / b
print(quotient)
خروجی کدهای فوق بهصورت زیر خواهد بود.
3.3333333333333335
روش تقسیم باقی مانده در پایتون چیست؟
برای استخراج باقیمانده عملیات تقسیم در پایتون از ٪ استفاده کنید. این عملگر بعد از انجام عمل تقسیم عملوند سمت چپ روی عملوند سمت راست، باقیمانده را برمیگرداند. برای نمونه به کد زیر توجه کنید.
remainder = 17 % 5
print(remainder)
خروجی کدهای فوق بهصورت زیر خواهد بود.
2
چرا رفتار Python 3 در تقسیم متفاوت از Python 2 است؟
Python 3.x رفتار عادی عملگر تقسیم را تغییر داده تا در نتیجه تقسیم بین دو عدد صحیح، جواب تقسیم بهطور کامل با مقدار اعشار نمایش داده شود. در Python 2.x فقط درصورتی جواب بهصورت کامل و اعشاری داده میشد که حداقل یکی از عملوندهای دو سر علامت تقسیم بهصورت Float داده شده باشند. جواب عملیات 3 / 2.0
برابر با 1.5 میشود و جواب عملیات 3 // 2.0
برابر با عدد 1.0 میشود اما اگر هر دو عملوند از نوع عدد صحیح باشند، عمل تقسیم قسمت اعشار عدد را به ما بر نمیگرداند، به مثال 3 / 2 = 1
و 3 // 2 = 1
توجه کنید . در واقع مقدار اعشار جواب، برای تقسیم بین دو عدد صحیح در Python 2.x نمایش داده نمیشود که باعث ایجاد اختلال در برنامههایی که با ریاضیات و اعداد سر و کار دارند میشود. این مشکل در Python 3.x رفع شده و همین علت رفتار متفاوت Python 3.x در تقسیم با Python 2.x میباشد.
source