تغییر در بزرگی و کوچکی حروف
یکی از سادهترین کارهایی که میتوانیم روی مقادیر رشتهای انجام دهیم، ایجاد تغییر در بزرگی
و کوچکی کلمات است. به کد زیر نگاه کنید و سعی کنید خروجی آن را حدس بزنید.
python_strings.py
name = "harry potter"
print(name.title())
اگر این کدها را اجرا کنید، نتیجهی زیر را مشاهده خواهید کرد.
در مثال بالا از یک متد با نام title() استفاده شده است. یک متد (method) عمل یا
اعمال مشخصی را روی بخشی از دادهها انجام میدهد. کاراکتر نقطه (dot) بعد از نام name برای
مفسر به این معناست که متد title() باید روی متغیر name اعمال شود.
هر
متد با یک
جفت پرانتز به پایان میرسد که میتواند اطلاعات اضافی را در قالب پارامترها برای متد فراهم
کند. کار متد title() این است که حرف اول هر کلمه را به صورت بزرگ (Capital) نمایش
میدهد. این متد به هیچ اطلاعات اضافی نیاز ندارد و بنابراین، پرانتزهای این متد خالی است.
متدهای دیگری هم داریم که به تغییر بزرگی و کوچکی حروف مربوط هستند. برای مثال، با استفاده
از متدهای upper() و lower() میتوانیم ترتیبی دهیم که همهی
حروف یک
رشته به صورت بزرگ (uppercase) یا کوچک (lowercase) نمایش داده شوند.
python_strings.py
name = "Harry Potter"
print(name.upper())
print(name.lower())
خروجی این کدها به صورت زیر خواهد بود.
HARRY POTTER
harry potter
استفاده از متغیرها در رشتهها
گاهی اوقات میخواهیم از مقدار یک متغیر در یک رشته استفاده کنیم. مثلاً فرض کنید دو متغیر
داریم که یکی نام و دیگری فامیل را ذخیره کردهاند و میخواهیم با ترکیب آنها در یک رشته،
نام کامل را نمایش دهیم.
python_strings.py
first_name = "harry"
last_name = "potter"
full_name = f"{first_name} {last_name}"
print(full_name)
همانطور که در مثال بالا میبینید، برای اینکه مقدار یک متغیر را در یک رشته قرار دهیم، باید
حرف f را قبل از کوتیشن قرار دهیم و نام متغیر مورد نظر را درون یک جفت آکلاد وارد کنیم. با
این کار، پایتون در زمان نمایش مقدار رشته، مقدار متغیر را به جای نام آن متغیر نمایش
میدهد. این رشتهها را f-string مینامند که f نشانگر format است؛ چون پایتون رشته را با
جایگزینی نام متغیر با مقدار آن، فرمت میکند. خروجی کد قبل به این صورت خواهد بود.
کارهای زیادی را میتوانیم با استفاده از f-strings انجام دهیم. مثال زیر را ببینید.
python_strings.py
first_name = "harry"
last_name = "potter"
full_name = f"{first_name} {last_name}"
print(f"Hello, {full_name.title()}!")
خروجی این کدها به صورت زیر است.
یا به عنوان یک مثال دیگر، میتوانیم از f-string برای تولید یک پیام استفاده کنیم و سپس، آن
را به یک متغیر تخصیص دهیم.
python_strings.py
first_name = "harry"
last_name = "potter"
full_name = f"{first_name} {last_name}"
message = f"Hello, {full_name.title()}!"
print(message)
خروجی این کد هم شبیه کد قبلی است اما با تخصیص پیام به یک متغیر، ترتیبی دادهایم که
متد print() پایانی خلاصهتر باشد.
کنترل کاراکترهای Whitespace در رشتهها
در برنامهنویسی، از واژهی whitespace برای ارجاع به هر کاراکتر غیر چاپی (nonprinting)
مانند space، tab و end-of-line استفاده میشود. از این کاراکترها میتوانیم برای افزایش
خوانایی کدهای خود استفاده کنیم.
برای اضافه کردن یک tab به متن خود، از \t استفاده میکنیم.
>>> print("Python")
Python
>>> print("\tPython")
Python
برای اضفه کردن newline به متن از \n استفاده میکنیم.
>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript
این کاراکترها را میتوان به صورت ترکیبی هم استفاده کرد. برای مثال، \n\t از مفسر
پایتون میخواهد که به خط بعدی منتقل شود و آن را با یک tab شروع کند. مثال زیر را ببینید.
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript
از کاراکترهای whitespace در آینده بهدفعات استفاده میکنیم.
حذف کاراکترهای Whitespace اضافی
برای ما 'python' و 'python ' یکسان هستند
اما از نظر مفسر پایتون اینها دو
رشتهی متفاوت هستند. در واقع، مفسر پایتون متوجه کاراکتر space در انتهای
رشتهی 'python ' میشود و آن را بخشی از رشته تلقی میکند، مگر اینکه ما چیز
دیگری به مفسر اعلام کنیم.
توجه به این نوع کاراکترهای whitespace که میتوانند در ابتدا و انتهای رشتهها باشند، موضوع
مهی است؛ چون خیلی وقتها میخواهیم دو رشته را با هم مقایسه کنیم و بر اساس نتیجهی
مقایسه، کارهای متفاوتی انجام دهیم. یک مثال مهم از این دست موارد، زمانی است که بخواهیم
نام کاربری افراد را هنگام لاگین به یک وبسایت، بررسی کنیم. خوشبختانه، حذف این کاراکترهای
اضافی از رشتهها در پایتون بسیار ساده است.
برای اطمینان از اینکه هیچ کاراکتر اضافی در سمت راست یک رشته وجود نداشته باشد، میتوانیم
از متد rstrip() استفاده کنیم.
1 >>> favorite_language = 'python '
>>> favorite_language
2 'python '
3 >>> favorite_language.rstrip()
'python'
>>> favorite_language
4 'python '
مقدار مربوط به متغیر favorite_language شامل یک کاراکتر space در سمت راست است (1).
بنابراین، وقتی نام این متغیر را در ترمینال وارد میکنیم، مقدار 'python ' نمایش
داده
میشود (2). وقتی متد rstrip() روی متغیر favorite_language اعمال
میشود
(3)، این کاراکتر
space حذف میشود؛ اما فقط به طور موقت. اگر بعد از اعمال این متد، مجدداً نام متغیر
favorite_language را برای مشاهدهی مقدار آن وارد کنیم، مجدداً کاراکتر space در سمت راست
رشته دیده میشود (4).
برای حذف دائم کاراکتر space از رشته، باید همانند زیر ترتیبی دهیم که متغیر
favorite_language مقدار جدید را دریافت کند.
>>> favorite_language = 'python '
>>> favorite_language = favorite_language.rstrip()
>>> favorite_language
'python'
در اینجا تخصیص مجدد مقدار فاقد space به متغیر favorite_language باعث میشود این مقدار
جدید در این متغیر ذخیره شده و جایگزین مقدار قبلی شود.
همانطور که احتمالاً میتوانید حدس بزنید، حذف کاراکترهای whitespace از سمت چپ یک رشته با
استفاده از متدی با نام lstrip() ممکن است و برای حذف کاراکترهای whitespace در هر
دو سمت رشته از متد strip() استفاده میشود.
>>> favorite_language = ' python '
>>> favorite_language.rstrip()
' python'
>>> favorite_language.lstrip()
'python '
>>> favorite_language.strip()
'python'
حذف پیشوند از رشتهها
یک کار رایج دیگر در ارتباط با رشتهها، حذف پیشوندها (prefixes) است. برای نمونه، یک URL را
در نظر بگیرید که معمولاً دارای پیشوند https:// است؛ ممکن است بخواهیم این پیشوند
را از یک آدرس URL حذف کنیم. این کار را میتوانیم به شکل زیر انجام دهیم.
>>> learnclasico_url = 'https://learnclasico.com'
>>> learnclasico_url.removeprefix('https://')
learnclasico.com
همانطور که میبینید، متد removeprefix() رشتهای را که به عنوان آرگومان دریافت
میکند، به عنوان پیشوند در نظر گرفته و آن را از ابتدای رشتهای که این متد روی آن
فراخوانی شده حذف میکند.
همانند آنچه در مورد متدهای مربوط به حذف whitespace دیدیم، متد removeprefix() هم
رشتهی اصلی را تغییر نمیدهد و اگر بخواهیم مقدار جدید را (که فاقد پیشوند است) حفظ کنیم،
یا باید آن را به متغیر اصلی تخصیص مجدد بدهیم یا اینکه آن را به یک متغیر جدید تخصیص دهیم.
>>> simple_url = learnclasico_url.removeprefix('https://')
کار با زیررشتهها
نوع str متدهایی را برای کار روی زیررشتهها ارائه میدهد. در اینجا چند مورد از مهمترین و
پرکاربردترین این متدها را
معرفی میکینم که برای اعمالی مانند جستجوی یک عبارت در رشته و جایگزینی بخشی از یک رشته کاربرد دارند.
جستجوی متن در رشتهها
برای پیدا کردن یک زیررشته در رشتهها می توانیم از یکی از متدهای find() و index() استفاده کنیم.
هر دوی این متدها اندیسی را که زیررشتهی مورد نظر شروع میشود، برمیگردانند. اما تفاوت این دو متد در
رفتارشان هنگام موجود نبودن عبارت مورد نظر در رشته است. متد find() در صورت نبودن متن
مورد جستجو در رشته، مقدار -1
را برمیگرداند اما متد index() خطا تولید میکند.
>>> message = "Hello World!"
>>> message.find("World")
6
>>> message.find("world")
-1
>>> message.index("World")
6
>>> message.index("world")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
همانطور که در مثال بالا میبینید، این متدها نسبت به بزرگی و کوچکی حروف حساس هستند.
جایگزینی متن رشتهها
با استفاده از یکی دیگر از متدهای نوع str به نام replace()
میتوانیم
بخشی از رشته را با یک مقدار دیگر جایگزین کنیم. البته فراموش نکنید که
رشتهها تغییرناپذیرند و برای اِعمال تغییر، باید مقدار جدید را به یک متغیر اختصاص داد.
>>> message = "Hello World"
>>> message = message.replace("World", "Python")
>>> message
'Hello Python'