در بخشهای قبلی از آموزش پایتون، با انواع داده و دادههای عددی در پایتون آشنا شدید. یکی دیگر از انواع دادههای تعبیه شده در پایتون، رشته یا string (مخفف: str) است. در این بخش مباحثی چون ساخت، برشزنی، بروزرسانی، پیکربندی و برخی عملیات مجاز بر روی رشته در پایتون را خواهید آموخت.
رشته چیست؟
رشته به آرایهای از بایتها گفته میشود که هر کدام بیانگر یک کاراکتر یونیکد (Unicode) هستند.
کمی پیچیده شد، نه؟ بگذارید تعریف کمی سادهتری را امتحان کنیم: هر کدام از دکمههای روی کیبورد شما، بیانگر یک «کاراکتر» است. چند مثال از کاراکترها ‘a’, ‘9’ یا ‘+’ هستند. برخی کاراکترهای دیگر نیز وجود دارند که نمایش آنها در کامپیوتر شکل ویژهای دارد؛ مانند کاراکترهای «سرخط» و «tab» که به ترتیب با n\ و t\ نمایش داده میشوند.
به مجموعهای از یک یا تعداد بیشتری کاراکتر که میان «نقل قول (‘ ‘)» یا «نقل قول مضاعف (” “)» قرار گرفته باشند، رشته میگویند.
ساخت یک رشته در پایتون
همانطور که در تعریف رشته اشاره کردیم، برای ساختن آن کافیست که یک یا چند کاراکتر را در میان علامتهای نقل قول یا نقلقول مضاعف قرار دهیم:
مثال #۱:
1 2 3 4 |
course = 'python' author = "fanology content dev" print(course) print(author) |
خروجی #۱:
1 2 |
python fanology content dev |
دسترسی به کاراکترهای درون یک رشته در پایتون
در پایتون این امکان وجود دارد که هرگاه مایل بودید، به عناصر مجزای رشته (کاراکترها) دسترسی پیدا کنید. میپرسید چگونه؟ به کمک شاخصها! همانند لیست در پایتون، به هر کدام از عناصر یک رشته، عدد خاصی نسبت داده میشود که به آن «شاخص» یا «index» میگویند. این عدد برای اولین کاراکتر هر رشته، از سمت چپ برابر با صفر بوده و با هر بار پیشروی به کاراکتر بعدی، یک واحد افزایش پیدا میکند.
مثال #۲:
1 2 3 4 |
countries = 'Iceland & Uruguay' print(countries[0]) print(countries[1]) print(countries[10]) |
خروجی #۲:
1 2 3 |
I c U |
میتوانید از انتهای رشته هم شروع به شمارش کنید! به این صورت که شاخص آخرین کاراکتر هر رشته برابر با -۱ است و با هر بار پیشروی به کاراکتر قبل (سمت چپ)، این عدد نیز یک واحد در جهت منفی کاهش پیدا میکند. جدول زیر به درک بهتر شاخصگذاری کاراکترهای رشتهی ‘fanology’ کمک خواهد کرد:
f | a | n | o | l | o | g | y |
۰ | ۱ | ۲ | ۳ | ۴ | ۵ | ۶ | ۷ |
-۸ | -۷ | -۶ | -۵ | -۴ | -۳ | -۲ | -۱ |
مثال #۳:
1 2 3 |
alphabet = 'abcdefg' print(alphabet[-1]) print(alphabet[-7]) |
خروجی #۳:
1 2 |
g a |
اگر خیلی دلتان میخواهد که چند کاراکتر را به صورت همزمان انتخاب نمایید، پایتون بازهم هوایتان را دارد! با استفاده از قالب «پایان:شروع» میتوانید قسمتی از رشته را برش دهید:
مثال #۴:
1 2 3 4 |
belief = 'w3schools < fanology tutorials' print(belief[:9]) print(belief[12:]) print(belief[-8], belief[10] + belief[1], belief[12:20]) |
خروجی #۴:
1 2 3 |
w3schools fanology tutorials u <3 fanology |
دو نکتهی قابل توجه در مثال بالا:
- کاراکتر متعلق به عدد پایانی برش، در برش انتخابی حضور نخواهد داشت.
- در صورت خالی گذاشتن عدد شروع، پایتون از ابتدای رشته شروع به خواندن میکند و در صورت خالی گذاشتن عدد پایان، تا انتهای رشته به خواندن ادامه میدهد.
دستکاری یا بروزرسانی رشته
رشته در پایتون از انواع دادههای تغییرناپذیر (immutable) میباشد؛ به این معنا که پس از تولید، امکان دستکاری آنها وجود ندارد. مثال زیر با خطای TypeError مواجه خواهد شد:
مثال #۵:
1 2 |
animal = 'cat' animal[0] = 'b' |
با این حال، این امکان وجود دارد که رشتهای را به انتهای رشتهای دیگر چسبانده و مقدار جدید را در متغیر پیشین ذخیره نمایید:
مثال #۶:
1 2 3 |
car = 'Mustang' car = car + ' GT' print(car) |
خروجی #۶:
1 |
Mustang GT |
عملیات مجاز بر روی رشتهها
جمع دو رشته در پایتون
میتوان با استفاده از عملگر جمع، دو رشته را به یکدیگر متصل نمود.
مثال #۷:
1 2 |
distro = 'Arch' print('I use ' + distro + ' btw!') |
خروجی #۷:
1 |
I use Arch btw! |
ضرب عدد طبیعی در رشته
ضرب عدد طبیعی n در یک رشته باعث اتصال n عدد از آن رشته به یکدیگر میگردد:
مثال #۸:
1 |
print('Congratulations!!!' * 3) |
خروجی #۸:
1 |
Congratulations!!!Congratulations!!!Congratulations!!! |
کاراکترهای ویژه
گاهی در نوشتههای ما، کاراکترهایی وجود دارند که نمایش آنها درون رشته با ابهاماتی همراه است. برای مثال هنگامی که قصد دارید به خط بعد بروید یا از کاراکتر tab استفاده کنید. گاهی نیز قصد استفاده از کارکترهایی را داریم که معنای ویژهای دارند، ولی معنای ویژهی آنها مورد نظر ما نیست. در هر دوی این حالات، از کاراکتر ویژهی «\» استفاده مینماییم.
در زیر جدولی از کاراکترهای ویژهی مفید (اما نه تمام آنان) را مشاهده میکنید:
نحوه نمایش در رشته | معادل |
\\\ | \ |
\’ | ‘ |
\” | “ |
\b | Backscape |
\n | Newline |
\t | Tab |
مثال #۹:
1 2 3 |
print('Here\'s JOHNNY!\nAHHHHH!') print("Knock!\tKnock!\tKnock!") print("\\\_(o-O)_/") |
خروجی #۹:
1 2 3 4 |
Here's JOHNNY! AHHHHH! Knock! Knock! Knock! \_(o-O)_/ |
پیکربندی رشتهها برای چاپ با استفاده از متد format
تا به اینجای کار، نوشتن رشتههای ساده، چسباندن آنان به یکدیگر و استفاده از علامتهای خاص به هنگام چاپ رشته بر روی صفحهی نمایش را یاد گرفتهایم؛ اما اگر بخواهیم در داخل رشتهی خود، از مقدار یک متغیر استفاده نماییم چه؟ معرفی میکنیم: رشتههای پیکربندی شده!
جهت مطلوب نمودن پیکربندی رشته مورد نظرتان برای چاپ بر روی صفحهی نمایش، از «متد format» استفاده نمایید.
متد فرمت، با استفاده از آکولاد { }، مکانی برای پیکربندی رشته مورد نظرتان فراهم میآورد.
برای شروع، از آکولادهای خالی استفاده مینماییم:
مثال #۱۰:
1 2 3 |
name = 'Kermit the Frog' alias = 'Darth Vader' print("The real name of {} is actually {}!".format(alias, name)) |
خروجی #۱۰:
1 |
The real name of Darth Vader is actually Kermit the Frog! |
متغیرهای مشخص شده به ترتیبِ نوشته شدن داخل متد ()format در رشته حضور مییابند.
میتوانیم با عددگذاری اولویت حضور در رشته را تغییر دهیم:
مثال #۱۱:
1 2 3 |
os = 'Windows' version = 10 print("The latest version of {1} is {1} {0}".format(version, os)) |
خروجی #۱۱:
1 |
The latest version of Windows is Windows 10 |
حتی اگر حال و هوای ماجراجویی به سرتان زده بود میتوانید در آکولادها نام متغیری را مشخص کنید و درون format به آن مقداری بدهید!
مثال #۱۲:
1 |
print("Look at me {grandson}! I'm {grandpa}!!!".format(grandpa='Pickle Riiiick', grandson='Morty')) |
خروجی #۱۲:
1 |
Look at me Morty! I'm Pickle Riiiick!!! |
همچنین میتوانیم با گذاشتن علامت «:» داخل آکولاد، فرمتی به خصوص برای چاپ تعیین نماییم که البته تدریس این فرمتها از حوصلهی این متن خارج است. در زیر چند نمونه مثال جهت آشنایی بیشتر آمده است:
مثال #۱۳:
1 2 |
print("I am {:.2f} meters tall!".format(1.7988)) print("UY Scuti has a radius of {radius:e}".format(radius=1.18 * 10 ** 12)) |
خروجی #۱۳:
1 2 |
I am 1.80 meters tall! UY Scuti has a radius of 1.180000e+12 |
میتوانید در این لینک، لیستی از تمام فرمتهای قابل پذیرش را مشاهده نمایید.
برخی متدهای دیگر برای کار با رشته در پایتون
در زیر، لیستی از چند متد کاربردی به همراه توضیحاتشان جهت کار با رشتهها آمده است. str نماد رشته و عبارتهای arg1 و arg2 نوشته شده داخل پرانتز متدها، نماد رشتههای ورودی به تابع هستند.
نام | توضیح |
str.lower() | تمام حروف رشته را lower case مینماید |
str.upper() | تمام حروف رشته را UPPER CASE مینماید |
str.split(arg1) | رشته را در نقاطی که کاراکتر arg1 دیده شود تجزیه مینماید و لیستی از رشتهی مقطع تحویل میدهد |
str.replace(arg1, arg2) | رشته را خوانده و تمامی زیر رشتههای arg1 را با arg2 جایگزین مینماید |
str.find(arg1) | رشته را خوانده و شاخص اولین جایی که زیررشتهی arg1 را بیابد بازمیگرداند |