آشنایی با نحوۀ جست‌وجوی محتوای لیست در زبان برنامه‌نویسی پایتون


در آموزش گذشته با نحوۀ ویرایش محتوای لیست‌ها در زبان برنامه‌نویسی پایتون آشنا شدیم اما این در حالی است که به منظور انجام عملیات ویرایشی روی آیتم‌های داخل یک لیست به نحوی بهتر و همچنین سریع‌تر، لازم است تا با نحوۀ جست‌وجو در محتوای آبجکت‌هایی از جنس لیست نیز آشنا شویم که در همین راستا در این آموزش نحوۀ جستجوی اعضای یک لیست را آموزش خواهیم داد که برای شروع، کد زیر را مد نظر قرار می‌دهیم:

colors = ["Red", "Green", "Orange", "Red", "Yellow", "Green", "Blue"]
colorSelect = ""
while colorSelect.upper()!= "QUIT":
    colorSelect = input("Please type a color name: ")
    if (colors.count(colorSelect) >= 1):
        print("The color exists in the list!")
    elif (colorSelect.upper() != "QUIT"):
        print("The list doesn't contain the color.")

ابتدا یک آبجکت از نوع لیست با شناسۀ color تعریف کرده و نام تعدادی رنگ را به صورت استرینگ در آن ذخیره کرده‌ایم و در ادامه متغیری دیگر به نام colorSelect با مقدار اولیۀ خالی ایجاد کرده‌ایم که قرار است تا نام رنگ مد نظر کاربر را از ورودی گرفته و در آن نگهداری کنیم سپس برنامه وارد حلقۀ while می‌شود که در آن گفته‌ایم تا زمانی که استرینگ ورودی توسط کاربر و منتسب به متغیر colorSelect برابر با استرینگ «QUIT» نبود، عملیات دریافت ورودی از کاربر و انتساب آن به متغیر colorSelect را ادامه دهد.

در ادامه، به عنوان شرط حلقۀ while با فراخوانی فانکشن ()upper روی متغیر colorSelect گفته‌ایم انواع مختلف استرینگ ورودی از سمت کاربر را به حروف بزرگ تبدیل کرده و با استرینگ «QUIT» مقایسه کند که در صورت عدم مطابقت با یکدیگر، شرط حلقه برقرار بوده و دستور سطر چهارم مجدداً اجرا شده و منتظر دریافت نام رنگ ورودی از سمت کاربر بماند.

سپس دستور if را تعریف کرده‌ایم که در آن استرینگ منتسب به متغیر colorSelect یا «نام رنگ» ورودیِ مد نظر کاربر را به عنوان آرگومان ورودی به فانکشن ()cout داده‌ایم و آن را روی آبجکت colors فراخوانی کرده‌ایم. در واقع، خروجی فانکشن ()count یک عدد صحیح است و بدین صورت عمل می‌کند که با دریافت آرگومان ورودی و فراخوانی آن روی آبجکت مد نظر، تعداد استرینگ‌های مربوط به آرگومان ورودیِ موجود در آبجکت مذکور را در خروجی ریترن می‌کند و همان‌طور که در کد فوق می‌بینید، در شرط if گفته‌ایم استرینگ منتسب به colorSelect از میان تمامی آیتم‌های آبجکت colors جستجو شود و چنانچه تعداد استرینگ‌های موجود برابر با 1 مورد یا بیش از آن بود، شرط برقرار بوده و استرینگ «!The color exists in the list» در خروجی چاپ شود.

در حقیقت، در این شرط اگر نام رنگ ورودی توسط کاربر حداقل یک بار در لیست آمده باشد، دستور if اجرا می‌شود و پیغام «!The color exists in the list»  در خروجی چاپ می‌شود و در غیر این صورت شرط elif بررسی می‌شود که اگر کاربر به جای نام رنگ استرینگ «QUIT» را برای خروج از حلقه و پایان اجرای برنامه وارد نکرده باشد، دستور بدنۀ داخلی آن اجرا شده و استرینگ «.The list doesn't contain the color» در خروجی چاپ می‌شود اما در صورتی که کاربر استرینگ «QUIT» را وارد کند، شرط حلقۀ while برقرار نبوده و برنامه از حلقۀ اجرا خارج می‌شود.

اسکریپت این برنامه را در فایلی به نام searchList.py ذخیره کرده و اجرا می‌کنیم که چند نمونه خروجی به ازای ورودی‌های مختلف آن را در ادامه آورده‌ایم:

Please type a color name: Orange
The color exists in the list!
Please type a color name: Green
The color exists in the list!
Please type a color name: Purple
The list doesn't contain the color.
Please type a color name: qUiT

با اجرای برنامه، ابتدا نام رنگ را معادل استرینگ «Orange» وارد کرده‌ایم که این مقدار به متغیر colorSelect منتسب می‌شود و در ادامه دستور while اجرا می‌شود که فانکشن ()upper در آن استرینگ منتسب به این متغیر را تماماً به حروف بزرگ تبدیل کرده و چک می‌کند که استرینگ حاصل برابر با استرینگ «QUIT» نباشد و همان‌طور که می‌دانیم، شرط برقرار بوده و بدنۀ داخلی آن تا زمانی که کاربر استرینگ «QUIT» را با هر ترکیب دلخواهی همچون «quit» و «Quit» یا «qUIT» و «quiT» وارد نکرده باشد اجرا می‌شود چرا که در هر صورت فانکشن ()upper آن‌ها را به حروف بزرگ تبدیل می‌کند.

در ادامه در شرط if چک می‌کنیم که آیا استرینگ «Orange» بیش از یک بار (حداقل یک مرتبه) در میان آیتم‌های منتسب به آبجکت colors تکرار شده است یا خیر و مجدداً حلقه تکرار شده و منتظر دریافت ورودی از سمت کاربر می‌ماند که این بار استرینگ «Purple» را به عنوان ورودی داده‌ایم که شرط if به ازای آن برقرار نبوده و شرط elif چک می‌شود بدین ترتیب که اگر استرینگ ورودی برابر با استرینگ «QUIT» نیست، استرینگ مربوط به موجود نبودن نام رنگ در خروجی چاپ شود و مجدداً نام رنگ دیگری از کاربر دریافت شود اما چنانچه استرینگ «QUIT» به عنوان ورودی دریافت شود، برنامه به طور کامل از حلقه خارج می‌شود.

در پایان لازم به یادآوری است که زبان برنامه‌نویسی پایتون فانکشن از پیش تعریف‌شدۀ دیگری تحت عنوان ()lower دارا است که به منظور تبدیل تمامی حروف یک آبجکت از جنس استرینگ به حروف کوچک متناظرش مورد استفاده قرار می‌گیرد که برای نمونه کد زیر را به منظور بررسی نحوۀ عملکرد آن آورده‌ایم:

>>> var = "LowerCase"
>>> var.lower()
'lowercase'

در ابتدا متغیری به نام var تعریف کرده و استرینگ «LowerCase» را به آن منتسب کرده‌ایم و در ادامه فانکشن ()lower را روی آبجکت var فراخوانی کرده‌ایم و همان‌طور که می‌بینید، تمامی حروف استرینگ مذکور به حروف کوچک تبدیل شده و در خروجی ریترن شده‌اند.

دانلود فایل‌های تمرین

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
محمدهادی
محمدهادی
۱۳۹۵/۰۸/۲۵
در این مثال اگه red رو وارد کنیم میگه وجود ندارد.
تابعی وجود نداره که کاری کنه از بزرگ و کوچک بودن حروف صرف نظر بشه؟
قبلا هم پرسیدم. چرا کسی جواب نمیده؟!:|