باگ منطقی لزوماً traceback تولید نمیکنه. برنامه اجرا میشه و مقدار برمیگردونه، اما با قانون مسئله هماهنگ نیست. شرطهای مرزی از رایجترین محلهای این باگ هستن. تفاوت > و >= فقط یک کاراکتره، ولی روی خود مقدار مرز اثر مستقیم داره. برای بررسی باید جمله مسئله رو به یک مقایسه دقیق تبدیل کنیم.
مثال، حداقل امتیاز قبولی رو با بزرگترمساوی میسنجه. اگر بهاشتباه > بنویسیم، کسی که دقیقاً روی مرزه رد میشه. خطای رایج امتحانکردن فقط یک عدد خیلی بالا و یک عدد خیلی پایینه؛ هر دو پیادهسازی ممکنه در اون مثالها یکسان جواب بدن. بهجاش سه ورودی انتخاب کن: یکی درست زیر مرز، خود مرز و یکی درست بالاتر. برای این درس عددهای صحیح کافیاند و بحث ورودی نامعتبر نداریم. معنی True و False رو هم با جمله قرارداد مقایسه کن، نه با اسم تابع بهتنهایی؛ ممکنه اسم خوب باشه ولی شرط داخل تابع غلط نوشته شده باشه.
✍️ مثال حلشده:
def passed(score):
return score >= 50
assert passed(49) is False
assert passed(50) is True
assert passed(51) is True
حالا نوبت توئه: تابع is_adult(age) برای سن صحیح نامنفی، در ۱۸ سال و بیشتر True و زیر ۱۸ False میدهد. مثالهای 17،18،19 را بررسی کن و بگو چرا شرط >18 رفتار دقیق مرز را خراب میکند. این گام آموزشی است و قرار نیست مقدارهای خارج از قرارداد را مدیریت کنی.
فعالیت شما
تابع is_adult(age) برای سن صحیح نامنفی، در ۱۸ سال و بیشتر True و زیر ۱۸ False میدهد. مثالهای 17،18،19 را بررسی کن و بگو چرا شرط >18 رفتار دقیق مرز را خراب میکند. این گام آموزشی است و قرار نیست مقدارهای خارج از قرارداد را مدیریت کنی.