✍️ این تمرین دو مرحله دارد: یک پیمایش برای ساختن جدول تعدادها و یک پیمایش برای انتخاب پاسخ با حفظ ترتیب. داشتن دو حلقه پشت سر هم به معنی درجه دوم نیست؛ هر حلقه حداکثر یک بار همه اعضا را میبیند، پس مجموع بازدیدها حدود دو برابر طول ورودی و رشد همچنان خطی است.
مثلاً در ['آبی', 'سبز', 'آبی', 'زرد'] جدول برای آبی دو و برای دو رنگ دیگر یک نگه میدارد. پیمایش دوم آبی را رد میکند و روی سبز متوقف میشود. اگر همه اعضا چند بار آمده باشند، یا اصلاً عضوی وجود نداشته باشد، قرارداد این تمرین None است؛ این مقدار با رشته خالی فرق دارد.
کد اولیه مرحله شمارش را دارد. بخش انتخاب جواب را کامل کن و نتیجه شکست را پس از تمام شدن حلقه بگذار. ورودی را مرتب نکن؛ همان ترتیب بخشی از مسئله است. خطای رایج، رفتن روی جدول تعدادها با ترتیب دلخواه یا پیدا کردن یک عضو با کمترین فراوانی است. ما فقط فراوانی دقیقاً یک را میخواهیم؛ اگر کمترین فراوانی دو باشد، هیچ جواب یکتایی وجود ندارد.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع first_unique(words) فهرست رشتهها را میگیرد و اولین رشتهای را که در کل ورودی دقیقاً یک بار آمده برمیگرداند. اگر چنین رشتهای نیست یا فهرست خالی است None بده. رشته خالی یک عضو معتبر است و با None فرق دارد. ورودی تغییر نکند؛ first_unique(['الف','ب','الف'])='ب'. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.