عملگر in
کلمهی in یک عملگر بولی است که دو رشته را میگیرد و True را اگر رشتهی اول به عنوان قسمتی از رشتهی دوم باشد، برمیگرداند.
1 2 3 4 |
>>> 'a' in 'banana' True >>> 'seed' in 'banana' False |
مقایسه رشته
عملگرهای مقایسه بر روی رشتهها نیز عمل میکنند. اگر میخواهید ببینید که دو رشته با هم برابرند:
1 2 |
if word == 'banana': print('All right, bananas.') |
بقیهی عملگرهای مقایسه برای مرتب کردن کلمات بر اساس الفبا میتوانند کمک بزرگی به شما باشند:
1 2 3 4 5 6 |
if word < 'banana': print('Your word,' + word + ', comes before banana.') elif word > 'banana': print('Your word,' + word + ', comes after banana.') else: print('All right, bananas.') |
رفتار مردم در مقایسه با پایتون در خصوص حروف بزرگ و کوچک متفاوت است. در پایتون تمام حروف بزرگ پیش از تمام حروف کوچک میآید:
1 |
Your word, Pineapple, comes before banana. |
یک راهحل رایج برای این مساله استفاده از قالب استاندارد است. مثلا میتوانید تمام حروف را به حروف کوچک تبدیل کنید و سپس عملیات را بر روی آن انجام دهید.
متدهای رشته (string)
رشتهها یک مثال از آبجکتهای پایتون به شمار میروند. یک آبجکت (شئ) شامل داده و متدها میشود. متد، توابعی است که در آبجکت به صورت توکاریشده قرار داده شدهاند و برای تمام نمونههای آن آبجکت در دسترسند.
پایتون یک تابعی با نام dir دارد که لیست متدهای موجود در یک آبجکت را به نمایش میگذارد. تابع type نوع یک آبجکت را نشان میدهد و تابع dir متدهای موجود در آن آبجکت را.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
>>> stuff = 'Hello world' >>> type(stuff) <class 'str'> >>> dir(stuff) ['capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] >>> help(str.capitalize) Help on method_descriptor: capitalize(...) S.capitalize() -> str Return a capitalized version of S, i.e. make the first character have upper case and the rest lower case. >>> |
تابع dir لیست متدها را نشان میدهد و در کنارش تابع help اطلاعات و اسناد سادهای از یک متد را به نمایش میگذارد. اطلاعات بهتر از متدهای رشته را میتوانید از اینجا بخونید:
فراخوانی یک متد، به مانند فراخوانی یک تابع است، یعنی متد هم آرگیومنت را میگیرد و مقداری را برمیگرداند؛ ولی متنِ این فراخوانی متفاوت است. برای فراخوانی متد، نامِ آن را به نام متغیر با یک نقطه بینشان میچسبانیم.
به عنوان مثال متد upper یک رشته را میگیرد و رشتهای جدید که تمام حروفش بزرگ است را برمیگرداند.
به جای استفاده از متن تابع که به صورت upper(word) است، ما از متن مخصوص متد یعنی word.upper() استفاده میکنیم.
1 2 3 4 |
>>> word = 'banana' >>> new_word = word.upper() >>> print(new_word) BANANA |
این قالب که به آن «نمادِ نقطه» میگوییم، نام متد، upper، و نام رشته را مشخص کرده و متد را بر روی آن (در مثال ما متغیر word) اعمال میکند. پرانتزهای خالی به این معنیست که این متد هیچ آرگیومنتی را دریافت نمیکند.
فراخوانی یک متد، invocation یا «احضار» خوانده میشود. در این مثال، ما میگوییم که upper را بر روی word احضار کردیم.
برای مثال، یک متد رشته به اسم find وجود دارد که جایگاه یک رشته را در یک رشتهی دیگر جستجو میکند:
1 2 3 4 |
>>> word = 'banana' >>> index = word.find('a') >>> print(index) 1 |
در این نمونه، ما find را بر روی word احضار کرده و حرفی که در پی آن بودیم را به صورت پارامتر برایش فرستادیم.
متد find قادر به پیدا کردنِ زیررشتهها به مانند کاراکترهاست:
1 2 |
>>> word.find('na') 2 |
این متد میتواند آرگیومنت دوم را نیز دریافت کرده تا بداند که جستجو را از چه مکانی شروع کند:
1 2 |
>>> word.find('na', 3) 4 |
یک کار شایع و رایج از بین بردن فاصلههای خالی (فاصله یا tab یا خطوط جدید) از ابتدا و انتهای یک رشته با استفاده از متد strip است:
1 2 3 |
>>> line = ' Here we go ' >>> line.strip() 'Here we go' |
برخی متدها مثل startswith مقدارهای بولی را برمیگردانند:
1 2 3 4 5 |
>>> line = 'Have a nice day' >>> line.startswith('Have') True >>> line.startswith('h') False |
خواهید فهمید که متد startswith به بزرگی و کوچکی حروف حساس است، به همین خاطر شاید بد نباشد که کل یک خط را گرفته و حروفش را به حروف کوچک تبدیل کرده و سپس بررسی را بر روی آن انجام دهید:
1 2 3 4 5 6 7 |
>>> line = 'Have a nice day' >>> line.startswith('h') False >>> line.lower() 'have a nice day' >>> line.lower().startswith('h') True |
در مثال آخر، متد lower احضار شده و سپس از متد startswith استفاده کردهایم. به این صورت متد startswith بر روی رشتهی جدید که تمام حروفش کوچک است عملیات را انجام میدهد. اگر مراقب ترتیبِ متدها باشید، حتی میتوانید چند متد را به صورت ترکیبی در تنها یک عبارت احضار کنید:
1 2 3 4 5 6 |
>>> line = 'Have a nice day' >>> line.startswith('h') False >>> line.lower().startswith('h') True >>> |
تمرین ۴: یک متد رشته به نام count وجود دارد که شبیه به تابعی که در مثال قبل نوشتیم عمل میکند. اسناد مرتبط با این متد را از لینک زیر بخوانید و سپس یک احضاریه بنویسد که تعداد تکرارِ حرف a در banana را برگرداند.
این نوشته تحت مجوز کرییتیو کامنز BY – NC و حمایت موسسه تحقیقاتی رامونا ارائه میشود. شما میتوانید با توجه به مفاد این گواهی از آن استفاده کنید.