فصل نهم آموزش پایتون مقدماتی - رشته ها (بخش دوم)

سلام دوستانبا ادامه ی کتاب پایتون مقدماتی که به همراه دوست عزیزم جناب مهندس مهدی عباسپور شاهمرس نوشته و چاپ کردیم در خدمتتون هستیم. https://virgool.io/@mahdi.abbaspour.sh 9-8- متدهای توکار تغییر رشته[1]در پایتون برای دستکاری و کار با رشته‌‌ها، یک‌‌سری از متدهای داخلی طراحی شده‌‌است که به دلیل طولانی‌‌بودن نسبی توضیحات و کدهای آن‌‌ها، به شرح جداگانه هر یک از آن‌‌ها خواهیم‌‌پرداخت.[1]Built-in String Methods9-8-1- متد Centerاگر تعداد کاراکترهای رشته مدنظر از طول تعیین‌‌شده کمتر باشد، اطراف آن رشته را با کاراکتر مشخص‌‌شده پر می‌‌کند. تا جایی که تعداد کاراکترها برابر با مقدار تعیین‌‌شده گردد. بدیهی‌‌است که در صورت بزرگتر‌‌بودن رشته، هیچ تغییری حاصل نمی‌‌شود. همچنین اگر هیچ کاراکتری برای پرکردن تعیین‌‌نشود، این متد به صورت پیش فرض از کاراکتر فاصله استفاده می‌‌کند. نمونه استفاده از این متد را در شکل (9-21) مشاهده می‌‌کنید.شکل (9-21)خروجی این قطعه کد در شکل (9-22) قابل مشاهده است.شکل (9-22)9-8-2- متد Countبرای شمارش تعداد رخ‌‌داد یک کاراکتر خاص در رشته‌‌ی دلخواه ویا زیرمجموعه‌‌ای از آن‌‌رشته می‌‌توان مانند شکل (9-23) از این متد استفاده‌‌نمود. برای شمارش می‌‌توان به صورت اختیاری، ابتدای شمارش یعنی start و انتهای آن یعنی end را تعیین‌‌کرد.شکل (9-23)خروجی اجرای این قطعه کد را در شکل (9-24) می‌‌بینید. لازم به ذکر است که به غیر از اعداد 2 در سطر اول و 1 در سطر دوم، بقیه موارد چاپ‌‌شده، جهت نمایش توضیحات بیشتر است.شکل (9-24)9-8-3- متدهای Encode و Decodeبرای تبدیل رشته متنی دلخواه به رشته کدگذاری شده در پایتون از متد ( ) encode استفاده می‌‌شود. کدگزاری‌‌های UTF-8 برای کلیه زبان‌‌ها به ویژه فارسی، base-64 برای کدگذاری دودویی متن، shift_jis برای کاراکترهای ژاپنی و iso8859_7 برای کدگذاری نوشته‌‌های یونانی، نمونه‌‌هایی از این کدگذاری‌‌ها هستند. در این متد اگر نوع کدگذاری مشخص‌‌نشود، پایتون به صورت پیش‌‌فرض از کدگذاری فعلی رشته جاری استفاده می‌‌کند. لیست کامل این کدگذاری‌‌ها از طریق آدرس صفحه‌‌ای که در ادامه ذکر می‌‌شود، در دسترسی‌‌است. https://docs.python.org/3/library/codecs.html#standard-encodings همه‌‌ی ما انتظار‌‌ داریم‌‌ که با استفاده از متد ( ) decode بتوانیم متن کدشده را به متن اصلی تبدیل‌‌نماییم. برای برگردانی آن، کافی‌‌است که همانند شکل (9-25) هر دو کدگذاری‌‌ها را یکسان انتخاب‌‌نماییم. همچنین آرگومان دوم این متدها که در این شکل، strict تعیین شده‌‌است، نحوه‌‌ی خطایابی متد را مشخص می‌‌نماید.از دیگر انواع خطایابی‌‌ها می‌‌توان به ignore برای چشم‌‌پوشی از خطاها، replace، xmlcharrefreplace و backslashreplace جهت جایگزینی خطاها با علامت‌‌های خاص و هر نوع خطایابی ثبت‌‌شده‌‌ ( ) codecs.register_error اشاره‌‌کرد. گفتنی‌‌است که به‌‌صورت پیش‌‌فرض از strict یا سخت‌‌گیرانه استفاده می‌‌شود که هرگونه اشتباه رخ‌‌داده را خطا در نظر می‌‌گیرد.شکل (9-25)سطر اول در شکل (9-26) رشته‌‌ی کدشده و سطر دوم رشته اصلی که از حالت کدگذاری برگردانده‌‌شده را نمایش می‌‌دهد.شکل (9-26)در پایتون نسخه ۳، رشته ها آرایه های کاراکتری به سبک C نیستند (آنها آرایه های بایتی نیستند)، بلکه ساختارهای داده ای هستند که هیچ کدگذاری ذاتی ندارند. شما می توانید رشته ها را به روش های مختلف رمزگذاری یا تفسیر کنید. رایج‌ترین و پیش‌فرض در این نسخه utf-۸ است، به‌ویژه که با ASCII سازگار است اگرچه، همانطور که بیشتر کدگذاری‌های پرکاربرد هستند. نهایتا در کد گذاری رشته ها در این نسخه چنین اتفاق می افتد:پایتون رشته را در utf-۸ (رمزگذاری پیش فرض) تفسیر می کند و آرایه ای از بایت های مربوط به آن را در اختیار شما قرار می دهد.کدگذاری base۶۴ تکه های باینری ۶ بیتی را می گیرد و با استفاده از کاراکترهای A-Z، a-z، ۰-۹، '+'، '/'، و '=' آنها را رمزگذاری می کند (بعضی از کدگذاری ها به جای '+' و '/' از کاراکترهای مختلف استفاده می کنند). این یک رمزگذاری کاراکتری است که بر اساس ساختار ریاضی سیستم اعداد radix-۶۴ یا base-۶۴ است، اما آنها بسیار متفاوت هستند. Base-۶۴ در ریاضیات یک سیستم اعدادی است مانند باینری یا اعشاری، و شما این تغییر ریشه را روی کل عدد انجام می‌دهید، یا (اگر ریشه‌ای که از آن تبدیل می‌کنید توان ۲ کمتر از ۶۴ باشد) به صورت تکه‌هایی از راست به ترک کرد.در کدگذاری base۶۴، ترجمه از چپ به راست به اندازه 64 کاراکتر اول انجام می شود به همین دلیل است که به آن کدگذاری base۶۴ می گویند. شصت و پنجمین نماد '=' برای padding استفاده می شود، زیرا رمزگذاری تکه های ۶ بیتی را می کشد، اما داده هایی که معمولا برای رمزگذاری در نظر گرفته شده است ۸ بیتی هستند، بنابراین گاهی اوقات فقط دو یا ۴ بیت در آخرین قطعه وجود دارد.در نهایت برای استفاده از این متد بایستی ماژول base64 را وارد کرده و همانند شکل (9-27) عمل خواهیم کرد.شکل (9-27)سطر اول در شکل (9-28) رشته‌‌ی کدشده و سطر دوم رشته اصلی که از حالت کدگذاری برگردانده‌‌شده را نمایش می‌‌دهد.شکل (9-28)9-8-4- متد EndsWithاگر رشته‌‌ای به کاراکتر یا عبارت مدنظر ما منتهی‌‌شود، مقدار بازگشتی این متد، True و در غیر این صورت، False خواهدبود. همچنین با استفاده از آرگومان‌‌های اختیاری آن می‌‌توان اندیس‌‌های شروع و پایان جستجو را مشخص‌‌نمود. در شکل (9-29) متغیر suffix برای مشخص‌‌کردن عبارت مورد جستجو استفاده شده‌‌است. همچنین جهت تعیین آخرین اندیس رشته می‌‌توان از دستور len(str) استفاده‌‌نمود.شکل (9-29)خروجی اولین دستور چاپ این قطعه کد، True خواهدبود، چراکه انتهای رشته به عبارت مدنظر ما ختم شده‌‌است. به دلیل این که بعد از اندیس42، عبارت مدنظر به صورت کامل وجود ندارد، برای دومین دستور چاپ، خروجی False را خواهیم‌‌داشت. برای سومین و چهارمین دستور نیز به ترتیب خروجی‌‌های True و False را داریم.9-8-5- متد StartsWithاین متد بررسی می‌‌کند که آیا ابتدای یک رشته با عبارت تعیین‌‌شده، شروع شده‌‌است، یا نه؟ همانند endswith() می‌‌توانیم بازه‌‌ی بررسی را با تعیین اندیس شروع و پایان، محدود‌‌نماییم. شکل (9-30) نمونه‌‌ای از کاربرد این متد را مشخص می‌‌کند. با توجه به توضیحات ارائه‌‌شده، خروجی این سه دستور چاپ به ترتیب برابر با True، True و False خواهدبود.شکل (9-30)9-8-6- متد ExpandTabsاگر برای ایجاد فاصله‌‌ی‌‌تب در یک رشته، از عملگر ‘\t’ استفاده‌‌کنیم، با استفاده از این متد می‌‌توانیم اندازه فاصله ایجاد‌‌شده را تنظیم‌‌نماییم. خالی‌‌بودن این اندازه به معنای تنها یک فاصله خواهد‌‌بود. نمونه‌‌ی استفاده از این متد را در شکل (9-31) خواهیم‌‌دید.شکل (9-31)در شکل (9-32) می‌‌بینیم که سطر اول حاوی متن اصلی و فاصله‌‌تب در اندازه‌‌ی عادی است. در سطر دوم تنها یک فاصله و در سطر سوم، 16 فاصله جایگزین عملگر ‘\t’ شده‌‌است.شکل (9-32)9-8-7- متد Findاین متد مشخص می‌‌کند که آیا عبارت مدنظر ما در رشته‌‌ی تعیین‌‌شده موجود است؟ اگر وجود داشت، اندیس شروع آن‌‌را برمی‌‌گرداند. در غیر این صورت مقدار منفی‌‌یک برگردانده می‌‌شود. همان طوری که در شکل (9-33) می‌‌بینیم، می‌‌توان مانند ( ) endswith اندیس شروع و پایان جستجو را به صورت اختیاری برای آن مشخص‌‌نمود.شکل (9-33)خروجی این قطعه کد به ترتیب برابر 15، 15 و 1- است.9-8-8- متد RFindبرخلاف ( ) find که اندیس اولین عبارت پیداشده در رشته را برمی‌‌گرداند، خروجی این متد، اندیس آخرین عبارت پیداشده، خواهد‌‌بود. متغیر str1 در شکل (9-34) حاوی دو‌‌ عبارت is است. اگر در مثال اول، با متد find عمل جستجو را انجام‌‌دهیم، خروجی اندیس 2 خواهد‌‌بود. درحالی که با این متد اندیس 5 برگردانده می‌‌شود.شکل (9-34)همانند متد ( ) find اگر عبارت در رشته پیدا‌‌نشد، خروجی برابر منفی‌‌یک خواهدبود. بنابراین مقادیر سه دستور چاپ در این‌‌شکل به‌‌ترتیب برابر 5، 5 و 1- خواهدبود.9-8-9- متد Replaceهمان طوری که از اسم آن پیداست، از این متد برای جایگزینی عبارت پیدا شده در متن با عبارت داده‌‌شده، استفاده می‌‌شود. البته این متد دارای یک آرگومان اختیاری نیز هست که جهت تعیین بیشترین تعداد جایگزینی به کار می‌‌رود. برای نمونه در مثال دوم شکل (9-35) فقط سه مورد از عبارات یافت‌‌شده، جایگزین‌‌شدند.شکل (9-35)خروجی این قطعه کد همانند شکل (9-36) خواهدبود.شکل (9-36)9-8-10- متد Indexشبیه ( ) find عمل می‌‌کند. با این تفاوت که اگر در آن، رشته‌‌ی مورد جستجو، در متن پیدا‌‌نشود با پیغام خطا روبرو خواهیم‌‌شد. در شکل (9-37) بعداز اندیس 40، عبارت exam در متن یافت‌‌نشده و خطا خواهدداد.شکل (9-37)خروجی و خطای این قطعه کد را در شکل (9-38) می‌‌بینیم.شکل (9-38)9-8-11- متد RIndexهمان گونه که حدس‌‌زده‌‌اید، این متد شبیه ( ) index عمل می‌‌کند. تفاوت عمده‌‌ی آن‌‌ها در اندیس یافت‌‌شده است. این متد اندیس آخرین عبارت پیداشده را برمی‌‌گرداند. اگر با دقت به شکل (9-39) نگاه‌‌کنید، خواهید دید که هر دو متد برای یک عبارت خاص استفاده شده‌‌است.شکل (9-39)خروجی این قطعه کد به ترتیب برابر 5 و 2 خواهدبود.9-8-12- متد IsAlNumچندین متد وجود دارد که با عبارت is به‌‌معنای "آیا است؟"،آغاز می‌‌شود که در ادامه هر یک از آن‌‌ها را توضیح خواهیم‌‌داد. یکی از این متدها ( ) isalnum است. اگر تمامی کاراکترهای رشته، از نوع حرف یا عدد باشند، مقدار True و در غیر این صورت False برمی‌‌گرداند. گفتنی‌‌است که این متد برای رشته‌‌های خالی نیز خروجی False را تولید می‌‌کند. در شکل (9-40) نمونه‌‌ای از کاربرد این متد را می‌‌بینیم.شکل (9-40)به دلیل وجود ‌‌فاصله در دومین متغیر str این مثال، خروجی آن False خواهدبود.9-8-13- متد IsAlphaهمانند ( ) ialnum عمل می‌‌کند با این تفاوت که برای ‌متد فوق، حروف الفبا، قابل قبول خواهدبود. برای مثال‌‌های شکل (9-41) به ترتیب خروجی True و False را داریم.شکل (9-41)9-8-14- متد IsDigitبرخلاف ( ) isalpha، خروجی این متد، زمانی True خواهدبود که همه کاراکترهای موجود در متن، عدد باشند. بنابراین در شکل (9-42)، خروجی مثال اول True و دومی False است.شکل (9-42)9-8-15- متد IsNumericعملکرد آن همانند ( ) isdigit است با این تفاوت که رشته‌‌ی مدنظر بایستی از نوع یونیکد باشد. همان گونه که در مباحث قبلی اشاره‌‌شد، برای تبدیل یک رشته‌‌ی عادی به یونیکد، کافی‌‌است حرف u را به ابتدای آن اضافه‌‌نماییم. البته این مشکل در پایتون3 حل شده‌‌است. به طوری که بدون استفاده از علامت u نیز این متد‌‌ها به کار خود ادامه می‌‌دهند. شکل (9-43) نمونه‌‌ای از کاربرد این متد را نشان می‌‌دهد. خروجی مثال اول و دوم آن به‌‌ترتیب برابر False و True است.شکل (9-43)9-8-16- متد IsDecimalدر مباحث قبلی توضیح‌‌دادیم که واژه‌‌ی دسیمال به معنی ده‌‌دهی یا مبنای 10 است. بنابراین عملکرد این متد به گونه‌‌ای است که اگر تمام کاراکترهای یک رشته اعدادی در محدوده‌‌ی صفر تا 9 باشند، مقدار True در خروجی تولید خواهدشد. همان طوری که در شکل (9-44) می‌‌بینیم، این متد نیز مانند ( ) isnumeric با رشته‌‌ی یونیکد کار می‌‌کند.شکل (9-44)9-8-17- متد IsLowerاگر تمام حروف رشته‌‌ی مدنظر، کوچک‌‌باشند، خروجی این متد True می‌‌شود. وجود حداقل یک حرف بزرگ، خروجی False را درپی خواهدداشت. دقت‌‌کنید که این متد به فاصله و سایر کاراکترها، حساسیتی نشان نمی‌‌دهد. بنابراین خروجی مثال اول شکل (9-45)، برابر False و خروجی مثال دوم، برابر True می‌‌باشد.شکل (9-45)9-8-18- متد IsUpperعکس متد ( ) islower عمل می‌‌کند. به عبارت دیگر برای این که خروجی متد برابر True باشد، باید تمامی حروف موجود در رشته از نوع حروف‌‌بزرگ باشند. از این‌‌رو خروجی مثال اول شکل (9-46) برابر True و خروجی مثال دوم برابر False خواهدبود.شکل (9-46)9-8-19- متد IsTitleاگر حرف اول تمامی کلمات موجود در رشته، از نوع حروف بزرگ باشند، خروجی آن True خواهدبود. در صورتی که حرف اول یکی از کلمات، بزرگ باشد و‌‌یا علاوه بر حرف اول، حروف دیگر کلمه نیز بزرگ باشند، مقدار خروجی False می‌‌شود. نمونه‌‌ای از این متد را در شکل (9-47) مشاهده می‌‌کنید. بنابراین به غیر از مثال اول، خروجی مثال‌‌های دوم و سوم این قطعه کد برابر false خواهدبود.شکل (9-47)9-8-20- متد IsSpaceبر اساس متدهای قبلی، بدیهی‌‌است که اگر رشته‌‌ی ما فقط حاوی فضای خالی باشد، خروجی برابر True خواهدبود. این فضا می‌‌تواند شامل کاراکتر Space، عملگر ‘\t’ ویا هر فاصله‌‌ی دیگر باشد. اگر حتی یکی از کاراکترها به غیر از این‌‌ها باشد، مقدار False را تولید می‌‌کند. بنابراین خروجی مثال اول و دوم شکل (9-48) برابر True و مثال سوم برابر False خواهدبود.شکل (9-48)برای اینکه مطلب زیاد طولانی نباشه، این فصل رو در قالب چند بخش ارائه دادیم. با ما همراه باشین.