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

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

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

جست‌وجوی ساده یعنی نگه‌داشتن عضوهایی که یک شرط دارند. عملگر in روی رشته بررسی می‌کند آیا یک زیررشته داخل آن وجود دارد یا نه. این با جست‌وجوی واژهٔ کامل فرق دارد؛ جست‌وجوی «data» می‌تواند داخل «database» هم نتیجه بدهد. پیش از نوشتن کد، همین تعریف را برای کاربر روشن کنید.

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

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

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

def solve(data):
    query = data['query'].strip().casefold()
    matches = [title for title in data['titles'] if query and query in title.casefold()]
    return {'matches': matches}

print(solve({'titles': ['Python Basics', 'SQL', 'python Data'], 'query': ' PYTHON '}))

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

{
  "matches": [
    "Python Basics",
    "python Data"
  ]
}

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

عبارت جست‌وجو را strip و casefold می‌کنیم. هر عنوان را فقط برای مقایسه casefold می‌کنیم، اما خود عنوان اصلی را در خروجی نگه می‌داریم. بنابراین ظاهر حروف از بین نمی‌رود. اگر عبارت خالی باشد، لیست خالی برمی‌گردانیم تا معنی مشخصی داشته باشد. ترتیب نتیجه‌ها همان ترتیب کتاب‌های ورودی است و مرتب‌سازی جدیدی انجام نمی‌شود.

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

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

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

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

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

عبارت PYTHON را در دو عنوان با حروف مختلف جست‌وجو کنید. سپس عبارت ناموجود، عبارت خالی و لیست بدون کتاب را امتحان کنید و نتیجهٔ مورد انتظار را توضیح دهید.

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

گام بعدی

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

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

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