آموزش سریع خطایابی در پایتون | خطاهای منطقی (Logical Errors)

شناسایی خطاهای منطقی (Logical Errors)

خطاهای منطقی (Logical Errors) از همه خطرناک‌ترند، زیرا برنامه شما بدون هیچ پیغام خطایی اجرا می‌شود، اما خروجی اشتباه می‌دهد. کامپیوتر دقیقاً همان کاری را انجام می‌دهد که شما به آن دستور داده‌اید، نه آن چیزی که *قصد* داشتید انجام دهد. در این بخش، نحوه تشخیص این نوع خطاها را یاد می‌گیرید.

۱. مقایسه خروجی مورد انتظار با خروجی واقعی
اولین قدم برای شناسایی خطای منطقی این است که دقیقاً بدانید برنامه شما باید چه کاری انجام دهد. یک مثال ساده: برنامه‌ای که میانگین دو عدد را حساب می‌کند.

a = 10
b = 20
avg = a + b / 2  # خطای منطقی: اولویت عملگرها
print(avg)  # خروجی: 20.0  (در حالی که باید 15 می‌بود)

در اینجا برنامه اجرا شد و خطایی نداد، اما خروجی ۲۰ است (چون اول b / 2 محاسبه شده و سپس با a جمع شده). شما باید بدانید که پاسخ واقعی باید ۱۵ باشد تا متوجه شوید خطایی رخ داده است. همیشه قبل از اجرا، پیش‌بینی کنید خروجی چه باید باشد و بعد آن را با خروجی واقعی مقایسه کنید.

۲. استفاده از print برای بررسی مقادیر میانی
رایج‌ترین روش برای شناسایی خطاهای منطقی در سطح مبتدی، چاپ کردن مقادیر متغیرها در مراحل مختلف است. با این کار می‌توانید ببینید برنامه در کدام نقطه از مسیر درست پیش نمی‌رود.

مثال: برنامه‌ای که قرار است اعداد زوج ۱ تا ۱۰ را چاپ کند:

for i in range(1, 10):
    if i % 2 == 0:  # این درست است
        print(i)

فرض کنید اشتباهاً از i % 3 == 0 استفاده کرده باشید. با چاپ i قبل از شرط می‌فهمید که آیا مقدار i در حال تغییر است یا نه:

for i in range(1, 10):
    print(f"مقدار i: {i}")  # چاپ برای بررسی
    if i % 2 == 0:
        print(i)

با این کار متوجه می‌شوید که حلقه به درستی کار می‌کند و مشکل در شرط است.

۳. بررسی شرط‌ها و حلقه‌ها با مقادیر مرزی
بسیاری از خطاهای منطقی در لبه‌ها (مرزها) رخ می‌دهند. مثلاً برنامه‌ای که قرار است بین ۱ تا ۵ کار کند، با مقدار ۰ یا ۶ چه رفتاری دارد؟ فرض کنید تابعی نوشته‌اید که فقط اعداد مثبت را قبول می‌کند، اما اگر صفر وارد شود چه؟

def validate_age(age):
    if age > 0:  # این شرط صفر را قبول می‌کند! باید age >= 0 باشد
        return "معتبر"
    return "نامعتبر"

با تست کردن مقادیر مرزی (صفر، یک، اعداد منفی) می‌توانید چنین خطاهایی را پیدا کنید.

۴. ردیابی منطق برنامه با قدم زدن ذهنی (Mental Tracing)
یک تکه کاغذ بردارید و با دست، مقادیر متغیرها را در هر خط دنبال کنید. این کار به شما کمک می‌کند تا ببینید برنامه دقیقاً چه مسیری را طی می‌کند.

مثال: برنامه جمع دو عدد:

x = 5
y = 3
z = x - y  # اشتباه: باید x + y باشد
print(z)   # خروجی: 2

اگر ذهنی رد کنید: x=5، y=3، z=5-3=2، متوجه می‌شوید که عملیات اشتباه است.

نکته مهم:
خطاهای منطقی معمولاً به دلیل سه دلیل زیر رخ می‌دهند:

  • استفاده از عملگر اشتباه (مثل - به جای +)
  • ترتیب اشتباه اجرا (اولویت عملگرها)
  • شرط‌های اشتباه در if یا حلقه‌ها (مثل استفاده از > به جای >=)

در بخش بعدی (استفاده از print برای خطایابی) روش‌های عملی‌تری برای یافتن این خطاها یاد خواهید گرفت.

پرسش و پاسخ این درس

برای ثبت پرسش ابتدا در سایت وارد شوید.

  • 1
  • 2
  • 3