پیشنیاز و هدف یادگیری
این بخش، گام 6 از مسیر «پایتون از صفر» است. هدف این درس استفاده از توابع داخلی با مدیریت لیست خالی است. پیشنیاز: حلقهٔ for و باقیمانده؛ پردازش چند عدد. کتابخانهٔ خارجی لازم نیست؛ ماژولهای استاندارد همراه Python 3 هستند. اگر مفهوم قبلی برایتان ناآشناست، ابتدا مقالهٔ پیشنیاز را بخوانید و مثالش را اجرا کنید؛ حفظکردن کد جای فهم ورودی و خروجی را نمیگیرد.
مفهوم اصلی به زبان ساده
لیست مجموعهای مرتب از مقدارهاست و با براکت نوشته میشود. برای خواندن عضو اول از اندیس صفر استفاده میکنیم. طول لیست با len به دست میآید و با آخرین اندیس یکی نیست. در این تمرین به جای نوشتن الگوریتم مرتبسازی، از توابع داخلی min و max استفاده میکنیم؛ هدف شناخت ابزار مناسب و قرارداد خروجی است.
مسئلهٔ این درس
در پروژهٔ «خلاصهساز فهرست اندازهگیریها» باید یک تابع مستقل بنویسید. میزکار ورودی نمونه را در request.json قرار میدهد؛ تابع solve دیکشنری داده را میگیرد و نتیجهٔ خود را برمیگرداند. در این قرارداد input لازم نیست و خواندن تعاملی از ترمینال ممکن است اجرای ارزیابی را متوقف کند. از مثال زیر شروع کنید و پیش از اجرای آن، شکل نتیجه را حدس بزنید.
نمونهکد قابل اجرا
def solve(data):
values = data['values']
if not values:
return {'count': 0, 'min': None, 'max': None, 'mean': None}
return {'count': len(values), 'min': min(values), 'max': max(values), 'mean': sum(values) / len(values)}
print(solve({'values': [2, 4, 9]}))نتیجهٔ مورد انتظار
{
"count": 3,
"min": 2,
"max": 9,
"mean": 5
}توضیح مرحلهبهمرحله
میانگین برابر جمع عددها تقسیم بر تعداد آنهاست. پیش از این تقسیم، خالیبودن لیست را بررسی میکنیم. برای دادهٔ خالی، count صفر و سه شاخص دیگر None هستند؛ این مقدار در JSON به null تبدیل میشود. صفر جایگزین مناسبی برای میانگین ناموجود نیست، چون ممکن است واقعاً میانگین اندازهگیریها صفر باشد.
قرارداد ورودی و خروجی
مثال فقط یک ورودی است، نه همهٔ مسئله. مقدارها را از data بخوانید و جواب نمونه را ثابت در برنامه ننویسید. نام کلیدها، نوع عدد و رشته و ترتیب فهرستها بخشی از قراردادند. در پروژه، بخش پایانی main.py نتیجهٔ تابع را در result.json ذخیره میکند؛ آن بخش را نگه دارید. موفقیت اجرای برنامه با درستبودن پاسخ و قبولی ارزیابی یکسان نیست.
خطای رایج و راه تشخیص
اجرای min روی لیست خالی ValueError میدهد و تقسیم بر طول صفر ZeroDivisionError میسازد. بررسی if not values هر دو مشکل را قبل از محاسبه حل میکند. تابع sort لیست را درجا تغییر میدهد و None برمیگرداند؛ برای این پروژه اصلاً به آن نیاز نداریم.
تمرین مستقل و خودآزمایی
ورودی تکعضوی را بررسی کنید؛ هر سه شاخص باید همان عدد باشند. سپس دو عدد با علامت مخالف وارد کنید تا تفاوت میانگین صفر و میانگین ناموجود روشن شود.
برای هر آزمایش، ورودی، خروجی مورد انتظار و خروجی واقعی را جدا بنویسید. اگر تفاوتی دیدید، یک نمونهٔ کوچکتر بسازید و تغییر را دوباره امتحان کنید. به جای اجرای چند تغییر همزمان، هر بار یک فرض را بررسی کنید. پس از فهم نمونه، پروژهٔ مرتبط را در میزکار حل کنید؛ ارزیابی با چند ورودی متفاوت انجام میشود و پاسخ ثابت نمونه پذیرفته نخواهد شد.
گام بعدی
موضوعهای این درس: list · len · min · max · sum. اگر میتوانید دلیل هر خط را توضیح دهید و ورودی تازهای را بدون دستکاری منطق اصلی حل کنید، به مقالهٔ بعدی بروید. هدف مسیر مقدماتی، تسلط بر همین رفتارهای کوچک و قابل آزمایش است؛ برای شروع پروژههای یادگیری ماشین عجله نکنید.
منابع و مطالعهٔ بیشتر
برای بررسی جزئیات و ادامهٔ مطالعه؛ متن این راهنما مستقلاً برای نوونتیکس نوشته شده است.
