پیش‌نیاز و هدف یادگیری

این بخش، گام 5 از مسیر «پایتون از صفر» است. هدف این درس پیمایش لیست و ساخت خروجی بدون تغییر ورودی است. پیش‌نیاز: شرط‌ها در پایتون؛ if و مرزهای تصمیم. کتابخانهٔ خارجی لازم نیست؛ ماژول‌های استاندارد همراه Python 3 هستند. اگر مفهوم قبلی برایتان ناآشناست، ابتدا مقالهٔ پیش‌نیاز را بخوانید و مثالش را اجرا کنید؛ حفظ‌کردن کد جای فهم ورودی و خروجی را نمی‌گیرد.

مفهوم اصلی به زبان ساده

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

مسئلهٔ این درس

در پروژهٔ «جداسازی و جمع اعداد زوج» باید یک تابع مستقل بنویسید. میزکار ورودی نمونه را در request.json قرار می‌دهد؛ تابع solve دیکشنری داده را می‌گیرد و نتیجهٔ خود را برمی‌گرداند. در این قرارداد input لازم نیست و خواندن تعاملی از ترمینال ممکن است اجرای ارزیابی را متوقف کند. از مثال زیر شروع کنید و پیش از اجرای آن، شکل نتیجه را حدس بزنید.

نمونه‌کد قابل اجرا

def solve(data):
    evens = []
    for number in data['numbers']:
        if number % 2 == 0:
            evens.append(number)
    return {'evens': evens, 'total': sum(evens)}

print(solve({'numbers': [1, 2, 3, 4]}))

نتیجهٔ مورد انتظار

{
  "evens": [
    2,
    4
  ],
  "total": 6
}

توضیح مرحله‌به‌مرحله

ابتدا لیست خالی evens می‌سازیم. در هر دور، اگر عدد زوج باشد آن را با append به انتهای لیست می‌افزاییم. در پایان sum جمع همین لیست را حساب می‌کند. ترتیب و تکرار عددها باید حفظ شود؛ اگر ۲ دوبار در ورودی باشد، در خروجی هم دو بار می‌آید. ورودی خالی به لیست خالی و جمع صفر منجر می‌شود.

قرارداد ورودی و خروجی

مثال فقط یک ورودی است، نه همهٔ مسئله. مقدارها را از data بخوانید و جواب نمونه را ثابت در برنامه ننویسید. نام کلیدها، نوع عدد و رشته و ترتیب فهرست‌ها بخشی از قراردادند. در پروژه، بخش پایانی main.py نتیجهٔ تابع را در result.json ذخیره می‌کند؛ آن بخش را نگه دارید. موفقیت اجرای برنامه با درست‌بودن پاسخ و قبولی ارزیابی یکسان نیست.

خطای رایج و راه تشخیص

حذف عضو از همان لیستی که روی آن حلقه می‌زنید ممکن است باعث ردشدن بعضی عضوها شود. خروجی جدا بسازید. return نباید داخل حلقه باشد، چون برنامه پس از اولین عدد تمام می‌شود. برای مقایسه از == و نه = استفاده کنید.

تمرین مستقل و خودآزمایی

ورودی [۲، ۲، ۳، منفی۴، ۰] را دستی دنبال کنید و مقدار evens را بعد از هر دور بنویسید. سپس نسخه‌ای برای جداکردن اعداد فرد بسازید.

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

گام بعدی

موضوع‌های این درس: for · modulo · append. اگر می‌توانید دلیل هر خط را توضیح دهید و ورودی تازه‌ای را بدون دست‌کاری منطق اصلی حل کنید، به مقالهٔ بعدی بروید. هدف مسیر مقدماتی، تسلط بر همین رفتارهای کوچک و قابل آزمایش است؛ برای شروع پروژه‌های یادگیری ماشین عجله نکنید.

منابع و مطالعهٔ بیشتر

برای بررسی جزئیات و ادامهٔ مطالعه؛ متن این راهنما مستقلاً برای نوونتیکس نوشته شده است.