حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

پیدا کردن اولین رشته یکتا با دیکشنری پایتون

دیکشنری پایتون برای حل مسئله؛ فراوانی و مجموع دو عدد · 0٪

✍️ این تمرین دو مرحله دارد: یک پیمایش برای ساختن جدول تعدادها و یک پیمایش برای انتخاب پاسخ با حفظ ترتیب. داشتن دو حلقه پشت سر هم به معنی درجه دوم نیست؛ هر حلقه حداکثر یک بار همه اعضا را می‌بیند، پس مجموع بازدیدها حدود دو برابر طول ورودی و رشد همچنان خطی است.

مثلاً در ['آبی', 'سبز', 'آبی', 'زرد'] جدول برای آبی دو و برای دو رنگ دیگر یک نگه می‌دارد. پیمایش دوم آبی را رد می‌کند و روی سبز متوقف می‌شود. اگر همه اعضا چند بار آمده باشند، یا اصلاً عضوی وجود نداشته باشد، قرارداد این تمرین None است؛ این مقدار با رشته خالی فرق دارد.

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

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

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

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

def first_unique(words):
    counts = {}
    for word in words:
        counts[word] = counts.get(word, 0) + 1
    # TODO: examine the original order
    return None

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = first_unique(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result