حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش دیباگ و تست‌نویسی در پایتون؛ رفع خطا با تمرین

پروژه دیباگ فاکتور پایتون؛ بازتولید خطای محاسبه تخفیف

پروژه دیباگ پایتون؛ تعمیر فاکتور و جلوگیری از بازگشت باگ · 0٪

پروژه پایانی یک فاکتور ساده است: قیمت‌ها جمع می‌شن و یک درصد تخفیف روی جمع اعمال می‌شه. قبل از دست‌بردن به فرمول، باید یک تست بازتولید داشته باشیم که باگ رو نشان بده. این تست بعد از اصلاح هم باقی می‌مونه تا همان مشکل برنگرده. عددهای کوچک و قابل حساب ذهنی برای شروع بهتر از یک فاکتور بزرگ و شلوغ هستن.

مثال یک سبد هشتاد واحدی با تخفیف بیست‌وپنج درصد رو به شصت می‌رسونه. در پروژه، دو قیمت صد و دویست با ده درصد تخفیف، دویست‌وهفتاد می‌شن. خطای رایج کم‌کردن خود درصد یا درصد تقسیم بر صد از مبلغه؛ باید سهم تخفیف از جمع محاسبه بشه. نسخه دیگری هم فقط اولین قیمت رو می‌خونه که با تست تک‌قیمت پنهان می‌مونه. تست تو باید از همین حالا این دو رفتار خراب رو رد کنه. فعلاً ورودی درصد معتبره؛ رسیدگی به مرزها و خطاها در گام‌های بعد پروژه اضافه می‌شه.

✍️ مثال حل‌شده:

def discounted(prices, percent):
    return sum(prices) * (1 - percent / 100)

assert discounted([30, 50], 25) == 60

حالا نوبت توئه: test_candidate(candidate) را برای بازتولید کامل کن: candidate([100,200],10) باید 270 و candidate([],10) باید 0 باشد. درصدهای این گام معتبرند. run_tests("correct") باید True و wrong_formula و first_price_only باید False شوند. نام نسخه‌ها فقط ورودی wrapper هستند؛ داخل تست باید candidate واقعی اجرا شود و انتظارها مستقل باشند. مبلغ تخفیف در این پروژه همان حاصل عددی فرمول است و گردکردن مالی انجام نمی‌شود؛ مثال‌های آزمون عمداً نتیجه عددی دقیق دارند.

فعالیت شما

test_candidate(candidate) را برای بازتولید کامل کن: candidate([100,200],10) باید 270 و candidate([],10) باید 0 باشد. درصدهای این گام معتبرند. run_tests("correct") باید True و wrong_formula و first_price_only باید False شوند. نام نسخه‌ها فقط ورودی wrapper هستند؛ داخل تست باید candidate واقعی اجرا شود و انتظارها مستقل باشند. مبلغ تخفیف در این پروژه همان حاصل عددی فرمول است و گردکردن مالی انجام نمی‌شود؛ مثال‌های آزمون عمداً نتیجه عددی دقیق دارند.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def correct(prices, percent):
    return sum(prices) * (1 - percent / 100)

def wrong_formula(prices, percent):
    return sum(prices) - percent / 100

def first_price_only(prices, percent):
    return (prices[0] if prices else 0) * (1 - percent / 100)

CANDIDATES = {"correct": correct, "wrong_formula": wrong_formula, "first_price_only": first_price_only}

def test_candidate(candidate):
    # دو انتظار بازتولید
    pass

def run_tests(candidate_name):
    candidate = CANDIDATES[candidate_name]
    try:
        test_candidate(candidate)
        return True
    except Exception:
        return False