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

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

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

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

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

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

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

def passed_count(grades):
    return sum(grade >= 10 for grade in grades)

def solve(data):
    grades = data['grades']
    if not grades:
        return {'error': 'empty_grades'}
    if any(not 0 <= grade <= 20 for grade in grades):
        return {'error': 'invalid_grade'}
    passed = passed_count(grades)
    return {'mean': sum(grades) / len(grades), 'passed': passed, 'failed': len(grades) - passed}

print(solve({'grades': [8, 10, 18]}))

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

{
  "mean": 12,
  "passed": 2,
  "failed": 1
}

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

اگر فهرست نمره‌ها خالی باشد، error=empty_grades می‌دهیم. هر نمره باید در بازهٔ صفر تا بیست باشد؛ وجود یک نمرهٔ نامعتبر کل گزارش را invalid_grade می‌کند. بعد از این بررسی‌ها، تابع passed_count نمره‌های حداقل ده را می‌شمارد. تعداد مردودها برابر تعداد کل منهای قبول‌هاست و میانگین از همهٔ نمرات معتبر محاسبه می‌شود.

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

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

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

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

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

نمرهٔ دقیق ده، کلاس تک‌نفره و فهرستی با یک عدد بیشتر از بیست را آزمایش کنید. برای هر حالت مشخص کنید کدام مرحله باید زودتر برنامه را متوقف کند.

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

گام بعدی

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

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

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