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

رفع تغییر فهرست هنگام پیمایش در پایتون؛ فیلتر بدون دست‌کاری ورودی

دیباگ تابع و فهرست در پایتون · 0٪

حذف عضو از همون فهرستی که رویش حلقه می‌زنیم می‌تونه باعث جاافتادن عضو بعدی بشه. اندیس‌ها بعد از حذف جابه‌جا می‌شن، اما حلقه به موقعیت بعدی می‌ره. برای ساخت یک فیلتر، راه ساده‌تر اینه که خروجی تازه بسازیم و فقط عضوهای مناسب رو داخلش بریزیم. این کار قرارداد «ورودی تغییر نکند» رو هم رعایت می‌کنه.

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

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

def nonempty_texts(values):
    result = []
    for value in values:
        if value != "":
            result.append(value)
    return result

حالا نوبت توئه: without_negatives(values) فهرست تازه‌ای از عددهای صحیح نامنفی، با ترتیب قبلی، برگرداند و values را تغییر ندهد. [-2,-1,0,3]=>[0,3] و []=>[]. کمکی inspect_filter باید {"result":[0,3],"original":[-2,-1,0,3]} بدهد. باگ remove داخل پیمایش را اصلاح کن؛ صفر باید حفظ شود.

فعالیت شما

without_negatives(values) فهرست تازه‌ای از عددهای صحیح نامنفی، با ترتیب قبلی، برگرداند و values را تغییر ندهد. [-2,-1,0,3]=>[0,3] و []=>[]. کمکی inspect_filter باید {"result":[0,3],"original":[-2,-1,0,3]} بدهد. باگ remove داخل پیمایش را اصلاح کن؛ صفر باید حفظ شود.

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

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

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

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

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

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

def without_negatives(values):
    for value in values:
        if value < 0:
            values.remove(value)
    return values

def inspect_filter(values):
    result = without_negatives(values)
    return {"result": result, "original": values}