رشته‌ها

از آن‌جایی‌که بیشتر برنامه‌ها انواعی از داده را تعریف و جمع‌آوری می‌کنند و سپس روی آن‌ها عملیّاتی انجام می‌دهند، دسته‌‌بندی انواع مختلف داده سودمند است. اوّلین نوع داده‌ای که بررسی می‌کنیم رشته‌ها هستند. رشته‌ها در نگاه اوّل ساده به نظر می‌آیند امّا می‌توانید آن‌ها را به روش‌های مختلف به کارگیرید.

رشته دنباله‌ای از حروف یا کاراکترها است. در پایتون هر آن‌چه داخل علامت نقل قول باشد رشته در نظر گرفته می‌شود و می‌توانید مانند زیر علامت نقل قول تکی یا دوتایی را دور رشته قرار دهید:

1
2
"This is a string."
'This is also a string.'

این آزادی عمل در به‌کارگیری علامت‌های نقل قول کمک می‌کند تا به راحتی از علامت‌های نقل قول و آپستروفی در رشته‌های خود استفاده کنید:

1
2
3
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."

اکنون چند روش استفاده از رشته‌ها را بررسی می‌کنیم.

تغییر بزرگ و کوچکی حروف در یک رشته به کمک متدها

یکی از ساده‌ترین کارهای انجام با با رشته‌ها تغییر دادن وضعیت بزرگ و کوچکی حروف در کلمات آن است. به کد زیر نگاه کنید و سعی کنید آن‌چه را که رخ می‌دهد شرح دهید:

1
2
name = "ada lovelace"
print(name.title())

فایل را با نام name.py ذخیره و آن را اجرا کنید. باید چنین خروجی‌ای را ببینید:

1
Ada Lovelace

در این مثال متغیّر name به رشته‌ای با حروف آغازین کوچک “ada lovelace” اشاره می‌کند. هنگام فراخوانی print، متدِ title() پس از متغیّر آمده است. متد عملی است که پایتون می‌تواند روی قطعه‌ای از داده انجام دهد. نشانه‌ی نقطه (.) پس از name در name.title() به پایتون می‌گوید که متد title() را روی متغیر name اعمال کند. پس از هر متد یک جفت پرانتز می‌آید زیرا متدها گاهی به اطّلاعات بیشتری برای انجام کار خود نیاز دارند. چنین اطّلاعاتی داخل این پرانتزها قرار داده می‌شوند. تابع title() به هیچ اطّلاعات اضافه‌ای نیاز ندارد در نتیجه پرانتزها خالی مانده‌اند.

متد title() هر کلمه را به حالت عنوان درمی‌آورد که در آن هر واژه با حروف بزرگ آغاز می‌شود. زمانی که به نام به عنوان نوعی اطّلاعات نگاه می‌کنیم، کاربرد چنین متدی آشکار می‌شود. برای مثال ممکن است از برنامه‌ی خود بخواهید تمام مقادیر ورودی مانند Ada, ADA و ada را یک نام در نظر بگیرد و همه‌ی آن‌ها را به شکل Ada نمایش دهد.

تعدادی متد سودمند دیگر هم برای تغییر وضعیّت بزرگی و کوچکی حروف وجود دارد. مثلاً می‌توانید تمام حروف یک رشته را به حروف بزرگ یا کوچک تبدیل کنید:

1
2
3
name = "Ada Lovelace"
print(name.upper())
print(name.lower())

خروجی زیر مشاهده خواهد شد:

1
2
ADA LOVELACE
ada lovelace

متد lower() به ویژه هنگام ذخیره‌سازی اطّلاعات سودمند است. در بسیاری از موارد شما نمی‌خواهید به حروف بزرگ و کوچکی که کاربر وارد کرده اعتماد کنید، پس پیش از ذخیره کردن تمام حروف اطّلاعات ورودی را به حروف کوچک تبدیل می‌کنید. پس از آن هر زمان که خواستید اطّلاعات را نمایش دهید از حالتی استفاده می‌کنید که بیشتری معنا را برای هر رشته دارد.

به‌کارگیری متغیّرها در رشته‌ها

مواردی پیش می‌آید که می‌خواهید از مقدار یک متغیّر در داخل یک رشته استفاده کنید. برای مثال دو متغیّر دارید که یکی نام کوچک و دیگر نام خانوادگی را نمایش می‌دهند و می‌خواهید این دو مقدار را با هم ترکیب کنید تا نام و نام خانوادگی یک نفر را بیان کنید:

1
2
3
4
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(full_name)

برای وارد کردن مقدار یک متغیّر داخل یک رشته، حرف f را مانند ۳ درست پیش از علامت نقل قول آغازین قرار دهید. دور نام یا نام‌های هر متغیّری که داخل رشته وارد می‌شود یک آکُلاد قرار دهید. پایتون هنگام نمایش رشته هر متغیّر را با مقدار آن جایگزین می‌کند.

به این رشته‌ها f-string می‌گویند. f سرواژه‌ی format است، زیرا پایتون این رشته‌ها را با جایگزینیِ نامِ متغیّرهای داخلِ هر آکُلاد با مقدارِ آن، قالب‌بندی می‌کند. خروجی کد قبلی به شکل زیر است:

1
ada lovelace

با f-stringها کارهای زیادی می‌توانید انجام دهید.مثلاً می‌توانید با اطَلاعاتِ یک متغیّر پیام‌های کاملی بسازید، مانند زیر:

1
2
3
4
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(f"Hello, {full_name.title()}!")

در پیامی که برای تبریک گفتن به شخص ساخته می‌شود نام کامل او آورده می‌شود ۴. متد title() حروف اوّل نام کامل را بزرگ می‌کند. این کد پیامی ساده امّا با قالبی زیبا تولید می‌کند:

1
Hello, Ada Lovelace!

به جز این می‌توانید از f-stringها برای تولید یک پیام و انتساب کلّ آن به یک متغیّر استفاده کنید:

1
2
3
4
5
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
message = f"Hello, {full_name.title()}!"
print(message)

همانند کد قبلی این کد هم پیام Hello, Ada Lovelace! را نمایش می‌دهد امّا این بار با قرار دادن پیام در یک متغیّر خط ۱ فراخوانی تابع نهاییprint() را بسیار ساده‌تر کردیم. خط ۲

نکته

f-stringها اوّلین بار در نسخه‌ی ۳.۶ معرّفی شدند. اگر از نسخه‌ی ۳.۵ یا قبل از آن استفاده می‌کنید باید به جای آن از متد format() استفاده کنید. برای این کار متغیّرهای مورد نظر خود را در پرانتزهایی که پس از format می‌آیند فهرست کنید. ارجاع به هر متغیّر با یک جفت آکُلاد صورت می‌پذیرد؛ آکُلادها با مقدارهایی که در پرانتزها قرار داده‌ شده‌اند، با همان ترتیب، پر خواهند شد:

1
full_name = "{} {}".format(first_name, last_name)

افزودن فضای خالی به رشته‌ها به کمک تب و خطوط جدید

در برنامه‌نویسی به هر حرف چاپ‌نشدنی مانند علامت‌های فاصله، تب و پایانِ خط فضای خالی گفته می‌شود. می‌توانید به کمک این فضاهای خالی به خروجی خود شکل دهید تا خواندنِ آن برای کاربر ساده‌تر باشد.

برای اضافه کردن تب به متن خود از ترکیب حروف \t مانند آن‌چه در خط ۱ نمایش داده شده استفاده کنید:

1
2
3
4
>>> print("Python")
Python
>>> print("\tPython")
Python

برای افزودن خط جدید به رشته‌ی خود از ترکیب حروف \n استفاده کنید:

1
2
3
4
5
>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript

همچنین می‌توانید تب‌ها و خط‌های جدید را در یک رشته ترکیب کنید. رشته‌ی “\n\t” به پایتون می‌گوید که به خطّ جدید برو و خطّ بعدی را با یک تب شروع کن.

مثال زیر نشان می‌دهد که چگونه می‌توانید با یک رشته‌ی یک‌خطّی خروجی‌ای در چهار خط تولید کنید:

1
2
3
4
5
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript

در دو فصل آینده هنگامی که می‌خواهید با چند خط کد خطوط زیادی در خروجی تولید کنید، تب‌ها و خط‌های جدید بسیار کاربردی خواهند بود.

حذف کردن فاصله‌های خالی

در برنامه‌های شما وجود فاصله‌ی اضافی در یک رشته می‌تواند گیج‌کننده باشد. برای برنامه‌نویسان دو رشته‌ی ‘python’ و ‘python ’ تقریباً یکی هستند. امّا برای یک برنامه‌ی رایانه‌ای این‌ها دو رشته‌ی متفاوت‌اند. پایتون فاصله‌ی اضافی را در ‘python ’ تشخیص داده و تمایز آن را در نظر می‌گیرد مگر آن‌که شما جور دیگری بخواهید.

اهمّیّت فاصله‌های خالی آن‌جا معلوم می‌شود که گاهی می‌خواهید دو رشته را برای بررسی یکی بودن مقایسه ‌کنید. یک مورد مهم، برای مثال، مقایسه‌ی نام کاربری کاربران هنگام ورود آن‌ها به یک وب‌سایت است. فاصله‌ی اضافی در موارد خیلی ساده‌تر هم ممکن است گیج‌کننده باشد. خوشبختانه پایتون حذف کردن فاصله‌ی خالی را از داده‌هایی که کاربران وارد می‌کنند ساده کرده است.

پایتون می‌تواند فاصله‌های خالی را در سمتِ چپ یا راستِ یک رشته تشخیص دهد. برای اطمینان یافتن از عدم وجود فاصله‌ی خالی در سمت راست یک رشته از متد rstrip() استفاده می‌کنیم:

1
2
3
4
5
6
7
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '

در پایان رشته‌ای که در خط ۱ به عنوان مقدار به favorite_language نسبت داده‌ایم یک فاصله‌ی خالی اضافی وجود دارد. وقتی در خط ۲ از پایتون می‌خواهید که این مقدار را در نشست ترمینال نمایش دهد، فاصله را در انتهای آن می‌بینید. هنگامی که در خط ۴ متد rstrip() روی متغیّر favorite_language عمل می‌کند، فاصله‌ی اضافی حذف می‌شود. با این حال این حذف شدن موقّتی است. اگر بار دیگر مقدار متغیّر favorite_language را نمایش دهید، خواهید دید که مقدار رشته همانند قبل است و فاصله‌ی اضافی همچنان وجود دارد. ۶

برای حذف دائمی فاصله از رشته باید مقدار رشته‌ی اصلاح‌شده را دوباره به نام همان متغیّر نسبت دهید:

1
2
3
4
>>> favorite_language = 'python '
>>> favorite_language = favorite_language.rstrip()
>>> favorite_language
'python'

همانطور که در خط ۲ نشان داده شده است، برای حذف فاصله‌ی اضافی از رشته، آن را از سمت راست رشته حذف می‌کنید و مقدار جدید را به متغیّر اولیّه نسبت می‌دهید. تغییر مقدار یک متغیّر در برنامه‌نویسی بسیار متداول است. این‌گونه است که مقدار یک متغیّر می‌تواند حین اجرای برنامه یا در پاسخ به ورودیِ کاربر تغییر کند.

همچنین می‌توانید با متد lstrip() فاصله‌های خالی یک رشته را از سمت چپ یا با متد strip() فاصله‌ها را از هر دو طرف حذف کنید:

1
2
3
4
5
6
7
>>> favorite_language = ' python '
>>> favorite_language.rstrip()
' python'
>>> favorite_language.lstrip()
'python '
>>> favorite_language.strip()
'python'

در خط ۱ از متغیّری شروع می‌کنیم که در ابتدا و انتهای آن فاصله وجود دارد. سپس در ۲ فاصله‌ی اضافه را سمت راست، در ۴ از سمت چپ و در۶ از هر دو طرف پاک می‌کنیم. تجربه‌ی کار با این متدها شما را نحوه‌ی دست‌کاری کردن رشته‌ها آشنا می‌کند. در دنیای واقعی از این متدها معمولاً برای تمیز کردن اطّلاعات ورودی کاربر پیش از ذخیره کردن آن‌ها استفاده می‌شود.

پرهیز از خطاهای نحوی هنگام کار با رشته‌ها

خطای نحوی از جمله ایراداتی است که معمولاً با آن برخورد می‌کنید. خطای نحوی هنگامی رخ می‌دهد که پایتون بخشی از برنامه‌ی شما را به عنوان کد معتبر پایتون تشخیص ندهد. برای مثال اگر از آپستروفی داخل علامت نقل تکّی استفاده کنید به خطا خواهید خورد. این اتّفاق به این دلیل می‌افتد که پایتون هر آن‌چه بین اوّلین علامت نقل قول و آپستروفی می‌بیند به عنوان یک رشته تعبیر می‌کند و پس از آن سعی می‌کند بقیه‌ی متن را به عنوان پایتون کد تفسیر کند و به مشکل می‌خورد.

اینجا نحوه‌ی صحیح استفاده از علائم نقل قول تکّی و دوتایی را می‌بینیم. برنامه را به نام apostrophe.py ذخیره و آن را اجرا کنید:

1
2
message = "One of Python's strengths is its diverse community."
print(message)

در اینجا آپستروفی بین یک جفت علامت نقل قول دوتایی ظاهرا شده و مفسّر پایتون بدون هیچ مشکلی آن را می‌خواند:

1
One of Python's strengths is its diverse community.

با این حال اگر از علامت نقل قول تکی استفاده کنید پایتون نمی‌تواند تشخیص دهد که رشته کجا پایان می‌یابد:

1
2
message = 'One of Python's strengths is its diverse community.'
print(message)

چنین خروجی‌ای را خواهید دید:

1
2
3
4
File "apostrophe.py", line 1
message = 'One of Python's strengths is its diverse community.' 
                        ^ 
      SyntaxError: invalid syntax

چنانچه در خروجی می‌بینید خطا در ۲ درست بعد از علامت نقل قول تکّی دوم رخ داده است. این خطای نحوی نشان می‌دهد که مفسّر بخشی از کد شما را کد معتبر پایتون نمی‌داند. خطاها ممکن است منشاهای مختلفی داشته باشند و موارد متداولِ آن‌ها هنگام برخوردن معرّفی خواهد شد. هنگامی که مشغول یادگیری برنامه‌نویسی پایتون هستید به خطاهای نحوی برخواهید خورد. خطاهای نحوی ناویژه‌ترین و نامشخّص‌ترین انواع خطا هستند در نتیجه تشخیص و اصلاح آن‌ها ممکن است سخت و خسته‌کننده باشد. اگر به خطای سمجی برخوردید توصیه‌های پیوست پ را ببینید.

نکته
ویژگی برجسته‌سازی و هایلایت نحوی ویرایشگرتان می‌تواند همزمان با نوشتنِ برنامه برخی از خطاهای نحوی را آشکار کند. اگر علامت‌های نقل قول را نابه‌جا به کار ببرید برجسته‌سازیِ رشته در ویرایشگر‌ها دچار مشکل می‌شود. اگر ویرایشگر کد پایتون را مانند متن معمولی یا متنی را مانند کد پایتون برجسته کرد معلوم می‌شود در به‌کارگیری علامت نقل قول اشتباه کرده‌اید.

خودآزمایی

هر کدام از این تمرین‌ها را در فایلی جداگانه با نامی مانند name_cases.py ذخیره کنید. اگر گیر کردید، کمی تامل کنید یا توصیه‌های پیوست پ را ببینید.

پیام شخصی

متغیّری برای نمایش نام یک شخص تعریف و پیامی خطاب به او چاپ کنید. پیام باید ساده باشد، مثل: “Hello Eric! would you like to learn some Python today?”

بزرگ و کوچک کردن حروف نام

متغیّری برای نمایش نام یک شخص در نظر بگیرید سپس نام او را با حروف بزرگ، کوچک و به صورت عنوان چاپ کنید.

نقل قول مشهور

نقل قولی از شخصی مشهور بیابید که مورد احترامتان باشد. نقل و قول و نام گوینده‌ی آن را چاپ کنید. پیام شما باید شامل علامت نقل قول و چیزی شبیه به این باشد: Albert Einstein once said, “A person who never made a mistake never tried anything new.”

نقل قول معروف ۲

تمرین ۲-۵ را تکرار کنید امّا این بار نام شخص معروف را با یک متغیّر نمایش دهید. سپس پیام خود را تولید کنید، آن را در یک متغیّر جدید به نام message ذخیره کنید و آن را چاپ کنید.

زدودن فاصله از نام‌ها

متغیّری برای نمایش نام یک فرد در نظر بگیرید و تعدادی فاصله‌ی خالی به ابتدا و انتهای آن اضافه کنید. از کاراکترهای ترکیبی\t و \n حداقل یک بار استفاده کنید.

یک بار نام را با حروف اضافه‌ی سر و ته آن چاپ کنید. سپس نام را با اعمال کردن توابع lstrip()، rstrip() و strip() چاپ کنید.