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


در آموزش قبل با نحوه ی ویرایش محتوای لیست ها در زبان برنامه نویسی Python آشنا شدیم؛ با وجود این باید بدانیم برای آن که عملیات ویرایش اقلام درون لیست را بهتر و سریع تر انجام دهیم لازم است با نحوه ی جست و جوی آن ها نیز آشنا باشیم. بنابراین در این آموزش خواهیم دید که چطور می توانیم چنین کاری را انجام دهیم. برای شروع برنامه ی زیر که در فایل SearchList.py ذخیره شده است را در نظر بگیرید:

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 را ایجاد کرده ایم تا نام رنگ مورد نظر خود را در آن ذخیره کنیم. آن گاه برنامه وارد لوپی می شود که در آن از کاربر درخواست می شود نام رنگ مورد نظر خود را وارد کند تا به متغیر colorSelect ارجاع داده شود. تا زمانی که کاربر کلمه ی Quit را وارد نکند شرط لوپ while هم چنان برقرار است و از کاربر درخواست می شود نام رنگ مورد نظر خود را وارد کند.

به شرط قرار گرفته در لوپ while در این مثال دقت کنید. متغیر colorSelect به یک استرینگ منتسب شده است و فانکشن ()upper با دستور ()colorSelect.upper روی آن اعمال شده است. خروجی این دستور همان استرینگ منتسب شده به colorSelect است با این تفاوت که تمام حروف آن به شکل بزرگ درآمده اند. بنابراین تفاوتی ندارد که کاربر هر کدام از حروف کلمه ی Quit را به شکل بزرگ وارد کند یا کوچک چون در نهایت تمام حروف کلمه ی وارد شده با استفاده از فانکشن ()upper به شکل بزرگ در می آیند و با کلمه ی QUIT مقایسه می شوند (به عبارت دیگر، تمامی نمونه های quit, Quit, qUIT, quiT و ... ابتدا به QUIT تبدیل شده سپس در برنامه مورد استفاده قرار می گیرند.) به خاطر داشته باشید که فانکشن ()lower هم می تواند با اثر کردن روی یک آبجکت از جنس استرینگ، تمام حروف آن را به حالت کوچک درآورد. برای مثال داریم:

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

حال شرط دستور if را در داخل بدنه ی لوپ while در نظر بگیرید: colors.count(colorSelect) >= 1. در این دستور شرطی، فانکشن ()count که متغیر colorSelect را به عنوان آرگومان ورودی گرفته است روی لیست colors اعمال کرده است. خروجی فانکشن ()count یک عدد صحیح است و عملکرد آن به این صورت است که درون لیست colors را برای یافتن مقدار آرگومان خود یا همان متغیر colorSelect جستجو می کند و هر بار که مقدار این متغیر را به عنوان یکی از اقلام لیست درون آن پیدا کند مقدار خروجی خود را که به صورت پیش فرض برابر با صفر است یک واحد افزایش می دهد. در نهایت زمانی که جستجو در میان تمام اقلام یک لیست به پایان رسید، تعداد تکرارهای یک آبجکت خاص درون لیست با یک عدد صحیح بزرگ تر یا مساوی صفر مشخص می شود.

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

======== RESTART: C:/SokanAcademy/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
>>>
دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
محمدهادی
محمدهادی
در این مثال اگه red رو وارد کنیم میگه وجود ندارد.
تابعی وجود نداره که کاری کنه از بزرگ و کوچک بودن حروف صرف نظر بشه؟
قبلا هم پرسیدم. چرا کسی جواب نمیده؟!:|
M.Ps
M.Ps
شما میتونی از ()upper یا ()lower استفاده کنی برای حساسیت به حروف کوچک و بزرگ

در پاسخ به

دانیال
دانیال
هیچ ربطی نداره:|
lower همرو کوچیک میکنه upper همرو بزرگ
Red همش بزرگ نیست یا کوچیک نیست.
منم واسم سواله این موضوع. کسی نمیدونه؟

در پاسخ به

nafisse
nafisse
سلام با تشکر از آموزش های خوبتون . لطفا آموزش ها را ادامه دهید.
mm914
mm914
لطفا ادامه اموزش ها را قرار دهید لطفا
ah.py
ah.py
چرا دیگر آموزش را ادامه نمیدهید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟