تقسیم بر صفر از نظر ریاضی در این قرارداد معنی نداره و پایتون با ZeroDivisionError توقف میکنه. راه درست همیشه گرفتن این استثنا نیست؛ اگه ورودی خاص رفتار تعریفشدهای داره، میتونیم قبل از تقسیم اون رو بررسی کنیم. این کار مسیر عادی و حالت مرزی رو واضح نگه میداره و مانع مخفیشدن خطاهای نامرتبط میشه.
مثال برای محاسبه میانگین فهرست خالی مقدار None در نظر گرفته؛ این یک تصمیم قراردادیه، نه قانون همیشگی همه برنامهها. در فعالیت تقسیم هزینه، قرارداد صفر نفر رو صفر تعریف میکنه. خطای رایج گذاشتن شرط بعد از عمل تقسیمه؛ در اون صورت اجرا قبل از رسیدن به شرط متوقف شده. شرط باید پیش از عملیات نامعتبر باشه. تعداد نفرها در این تمرین عدد صحیح نامنفی است، پس درباره نفر منفی تصمیمی نمیگیریم. مقدار هزینه هم عدد نامنفی است و نتیجه تقسیم میتونه اعشاری باشه. return مقدار را به آزمون تحویل میده و نیازی به قالببندی متنی نداره.
✍️ مثال حلشده:
def mean_or_none(values):
if not values:
return None
return sum(values) / len(values)
حالا نوبت توئه: تابع share(total, people) سهم هزینه را بهصورت عدد برگرداند؛ اگر people صفر است، خروجی 0 باشد و در غیر این صورت total/people. total نامنفی و people عدد صحیح نامنفی است. (90,3) باید 30، (10,4) باید 2.5 و (90,0) باید 0 بدهد؛ شرط را قبل از تقسیم اجرا کن.
فعالیت شما
تابع share(total, people) سهم هزینه را بهصورت عدد برگرداند؛ اگر people صفر است، خروجی 0 باشد و در غیر این صورت total/people. total نامنفی و people عدد صحیح نامنفی است. (90,3) باید 30، (10,4) باید 2.5 و (90,0) باید 0 بدهد؛ شرط را قبل از تقسیم اجرا کن.