رشته در زبانهای برنامهنویسی یکی از پرکاربردترین ساختمانهای دادهای هستند که تقریباً در تمام پروژهها با آنها سر و کار داریم. رشته در پایتون هم از این موضوع مستثنا نیست! در پایتون یک ساختمان داده پیشفرض به نام str وجود دارد که به کمک آن میتوان رشتههای فارسی، انگلیسی یا دارای کاراکترهای خاص ایجاد کرده و با آنها کارهای جذابی انجام دهیم.
رشته در پایتون یک نوع تغییرناپذیر (immutable) است. به این معنا که پس از تعریف یک رشته، نمیتوانیم آن را تغییر دهیم. برای مثال اگر یک رشته به صورت test
داشته باشیم، نمیتوانیم آن را به te3t
تبدیل کنیم!
برای اعمال تغییرات روی یک رشته، میبایست رشتهی جدیدی ایجاد کرد. در نتیجه با اعمال تغییرات روی یک رشته، رشتهای جدید خواهیم داشت.
در این مقاله به طور جامع مبحث رشتهها در پایتون را بررسی کرده و با متدها، توابع و ترفندها آن آشنا میشویم.
تعریف رشته در پایتون
در زبان برنامه نویسی پایتون، مانند بسیاری دیگر از زبانها، یک رشتهی متنی با علامت نقل قول انگلیسی (کوتیشن) دوتایی یا تکی مشخص میشود.
"This is a String in Python!"
'This is another String in this code!'
"این یک رشته متنی در پایتون است"
"What is the result of 2 + 2 ?"
تقریباً میتوان گفت که این دو نوع تعریف تفاوت خاصی با هم ندارند. اما در جایی که میخواهید درون متن خود از یکی از این علامتها استفاده کنید، بهتر است که علامت مشخصکنندهی رشته، از آن نوع دیگر باشد. (یکی "
و دیگری '
)
رشتهها مانند لیست در پایتون، دارای اندیس است. اندیسهای رشته نیز دقیقاً مشابه لیستها، از ابتدا با صفر شروع شده و از انتهای آن با عدد -1 مشخص میشود.
معمولاً برای چاپ رشته در پایتون از دستور print()
استفاده میشود. این دستور در سادهترین حالت یک ورودی گرفته و آن را در کنسول برنامه چاپ میکند.
print( "Hello World!" )
در قطعه کد زیر یک رشتهی متنی در پایتون تعریف کرده، آن را به متغیری به نام name
منسوب کردیم. سپس این مقدار را در خروجی نمایش دادهایم.
name = "omid"
print( name )
تعریف رشته چند خطی
برای تعریف یک رشتهی متنی چند خطی در پایتون، در ابتدا و انتهای رشته از علامت "
یا '
سه بار استفاده میکنیم.
مشابه کد زیر که یک پیام چهار خطی را با سه بار دابل کوتیشن تعریف کرده و درون متغیر txt ریختهایم.
txt = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua."""
برش دادن رشته در پایتون
پیشتر گفتم که میتوان به رشته مانند یک لیست دسترسی پیدا کرد. تمام ویژگیها و ترفندهایی که برای دسترسی به لیستها وجود دارد، برای رشتهها نیز صدق میکند.
به کمک علامت []
در جلوی نام متغیر رشتهای، میتوان کاراکتری که در خانهی مورد نظر وجود دارد را فراخوانی کرد.
اگر متغیر ما (متغیر s) حاوی رشته 'omid'
باشد، s[2]
مقدار i را برگردانده و s[-1]
کاراکتر d را برمیگرداند.
برای برش دادن بخشی از یک رشته در پایتون، نیز از ترفندهای کار با لیست پایتون استفاده میکنیم. در قطعه کد زیر، عبارتی را در متغیر txt ذخیره کرده ولی صرفاً کاراکترهای خانهی 4، 5 و 6 را چاپ کردهایم.
txt = "sabzdanesh.com"
print( txt[ 4:7 ] )
اگر مقدار ایندکس وارد شده خارج از محدودهی رشته باشد، با خطای IndexError: string index out of range مواجه خواهیم شد.
عملگرها و توابع پرکاربرد رشته پایتون
در ادامه توابع مختلفی برای کار با رشتهها در پایتون معرفی خواهیم کرد؛ اما چهار مورد از پر کاربردترین آنها عبارتاند از:
تابع/عملگر | شرح عملیات |
---|---|
len() |
رشته را به عنوان ورودی گرفته و اندازهی آن را به ما میدهد. |
str() |
ورودی خود را تبدیل به رشته کرده و خروجی میدهد. |
+ | برای اتصال دو رشته در پایتون به یکدیگر استفاده میشود. |
== | برای بررسی برابر بودن دو رشته با هم کاربرد دارد. (مقایسه رشته) |
کار با رشته در پایتون
ما برنامهنویسها از رشته در برنامههایمان به وفور استفاده میکنیم. از گرفتن ورودی در پایتون از کاربر گرفته تا پردازش دادههای متنی و کارهایی سنگینتر و بزرگتر!
در ادامه با چهار ترفند کار با رشته در پایتون آشنا خواهید شد. پس از آن نیز توابع کاربردی رشته را بررسی میکنیم.
جداسازی رشته با کاراکتر خاص
فرض کنید اطلاعاتی را از کاربر گرفته و میخواهید عملیات تبدیل رشته به لیست در پایتون را انجام دهید. این کار شاید در نظر اول بسیار سخت و مشکل به نظر برسد!
اگر این دادهها را بهوسیلهی یک کاراکتر خاص از هم جدا کرده باشیم، کارمان بسیار ساده است. فقط کافی است متد split()
را روی رشته صدا بزنیم…
فرض کنید نمرات یک دانشجو را در قالب یک رشته و به صورت زیر در اختیار داریم.
grades_str = "18,17.5,20,14,16"
متد split()
یک ورودی میگیرد که به نام جداکننده (delimeter) شناخته میشود. جداکننده همان کاراکتر یا رشتهای است که دادههای ما را از یکدیگر تفکیک کرده است. در رشتهی ما، ویرگول (یا ,
) جداکننده نمرات خواهد بود.
grades_str = "18,17.5,20,14,16"
grades_list = grades_str.split(',')
print( grades_list )
خروجی این قطعه کد، یک لیست شامل تمام نمرات خواهد بود.
['18', '17.5', '20', '14', '16']
جداکننده میتواند هر چیزی باشد، یک حرف انگلیسی، یک علامت، یک عدد یا حتی یک رشتهی دیگر! مثلاً در قطعه کد زیر رشتهی مورد نظر را با رشته "step"
جدا شده است.
string = "step 1: hello step 2: world step 3: run step 4: python"
print( string.split("step") )
# ['', ' 1: hello ', ' 2: world ', ' 3: run ', ' 4: python']
دلیل ایجاد شدن یک رشتهی خالی در ابتدای لیست این است که کلمهی جداکننده در ابتدای رشته قرار گرفته است.
جستجو در رشته در پایتون
گاهی میخواهیم یک کاراکتر، کلمه یا رشته را درون رشتهای دیگر جستجو کنیم. برای جستجو در رشته از متد find()
استفاده میکنیم.
این تابع سه ورودی میگیرد که اولی اجباری و دو مورد دیگر اختیاری است.
- ورودی اول، کاراکتر یا رشتهی مورد جستجوی ماست.
- ورودی دوم، اندیس شروع عملیات جستجو را مشخص میکند.
- ورودی سوم هم اندیس پایان قسمت جستجو را مشخص میکند.
خروجی این تابع یک عدد است. اگر کاراکتر تعریف شده در رشته وجود داشت، اندیس اولین اتفاق (اولین جایی که کاراکتر در رشته دیده شده) به ما بازگردانده میشود. در غیر این صورت عدد -1 را به عنوان خروجی خواهیم داشت.
string = "Hello and Welcome to SabzDanesh WebSite!"
print( string.find("e") ) # 1
print( string.find("c") ) # 13
print( string.find("Sabz") ) # 21
اگر میخواهید جستجوی خود را محدود به بخشی از رشتهی مورد نظر کنید، میتوانید آرگومان دوم و سوم را نیز تعریف کنید؛ در غیر این صورت، جستجو در تمام رشته انجام میشود. همچنین اگر در حال جستجوی بیش از یک کاراکتر در متن باشید، مقدار خروجی تابع، مشخص کنندهی شروع نقطهی تطابق در متن است.
ساخت رشته ساختارمند (فرمت دهی رشتهها)
گاهی لازم داریم عملیات قالبدهی به رشتهها در پایتون یا فرمت دهی آنها را انجام دهیم. فرض کنید میخواهیم یک رشته و یک عدد را در کنار هم نمایش دهیم. مثلاً، نمرهی دانشجو را در خروجی چاپ کنیم، چیزی شبیه متن زیر:
Your Grade is: 17.5
اولین کاری به ذهنمان میرسد استفاده از عملگرد + برای افزودن نمره به رشتهی پیغام و در نهایت چاپ آن است. برای این کار، کد زیر را نوشته و اجرا میکنیم.
grade = 17.5
print( "Your Grade is: " + grade )
با اجرای کد بالا، خطای زیر حاصل میشود!
متن خطا واضح است! امکان الصاق رشته و یک مقدار عددی وجود ندارد! دو راهحل داریم:
راهحل اول: استفاده از تابع str برای تبدیل عدد به رشته در پایتون
اولین راهحل تبدیل نمره (عدد) به رشته به کمک تابع str()
است. این تابع یک ورودی گرفته و به عنوان خروجی یک رشته از آن تحویل میدهد.
grade = 17.5
print( "Your Grade is: " + str(grade) )
راهحل دوم: فرمتدهی رشته با متد format
اما راهحل دوم استانداردتر و حرفهایتر خواهد بود. برای این کار به جای مقادیر متغیری که قرار است در رشته قرار بگیرد علامت {}
را قرار میدهیم.
سپس به کمک صدا زدن متد format()
روی رشتهی مورد نظر، مقادیر متغیر خود را به آن داده و رشتهی نهایی را ایجاد میکنیم.
برای درک بهتر روند به قطعه کد زیر توجه کنید.
grade = 17.5
msg = "Your Grade is: {}"
print( msg.format(grade) )
# Result: Your Grade is: 17.5
تابع format()
به هر تعداد دلخواهی میتواند ورودی بگیرد. در حقیقت شما میتوانید به هر تعداد که نیاز دارید، درون یک رشته متغیر تعریف کنید. برای یادگیری دقیق این تابع، به آموزش زیر مراجعه کنید:
با استفاده از حلقهها در پایتون میتوان در یک رشته پیمایش کرد. اولین ایده که احتمالاً به ذهن خودتان هم رسیده، استفاده از اندیسها برای دسترسی به تک تک کاراکترهای رشته است.
txt = "A test text from SabzDanesh"
for i in range( len(txt) ): print( txt[i] )
در این قطعه کد یک متن را با استفاده از حلقهی for پیمایش کرده و تک تک کاراکترهای آن را چاپ میکنیم. همین کد با حلقهی while به صورت زیر خواهد شد.
txt = "A test text from SabzDanesh"
i = 0
while i < len( txt ): print( txt[i] ) i += 1
یک ترفند جذاب و ساده برای پیمایش تک به تکِ کاراکترهای رشته، استفاده از in در حلقهی for است. ساختار این پیمایش به صورت زیر است.
for char in string: # Do something with char
این نوع پیمایش بسیار ساده بوده و از نظر مفهوم کدنویسی نیز بسیار مناسب است. (به هر کاراکتر در رشتهی …)
قطعه کد پیمایش درون رشته در پایتون به این روش به صورت زیر خواهد شد.
txt = "A test text from SabzDanesh"
for char in txt: print( char )
توابع مهم رشته پایتون
از آن جایی که رشتهها کاربردهای بسیاری در برنامه نویسی دارند، توابع مختلف و نسبتاً زیادی برای آنها وجود دارد. در این قسمت 8 مورد از مهمترین توابعی که ممکن است با آنها بیشتر سر و کار داشته باشید را معرفی میکنیم.
تمام این توابع به صورت متد و بر روی رشته صدا زده میشوند. یعنی اگر اسم تابع func()
بوده و متغیر رشتهی ما s باشد، فراخوانی آن به صورت s.func()
خواهد بود.
-
lower()
: تبدیل حروف موجود در رشته به حروف کوچک (در زبان انگلیسی) -
upper()
: تبدیل حروفِ رشته به حروف بزرگ -
strip()
: حذف فضای خالی (spaceهای اضافی) ابتدا و انتهای رشته -
count()
: تعداد تکرار کلمه یا کاراکتری که به عنوان ورودی گرفته را در رشته محاسبه میکند. -
isdigit()
: در صورتی که تمام کاراکترهای موجود در رشته عدد باشند، True و در غیر این صورت False میدهد. -
index()
: اندیس شروع کلمه یا کاراکتری که به عنوان ورودی گرفته را در رشته مشخص میکند. تفاوت آن با متد find این است که اگر مقدار مورد نظر را پیدا نکند، برنامه با خطا مواجه خواهد شد.
اگر میخواهید با تمام توابع کار با رشته در پایتون آشنا شوید، به جدول انتهای این منبع انگلیسی مراجعه کنید.
جایگزینی کلمات در رشته پایتون
اگر بخواهیم یک کلمه یا کاراکتر را با کلمه یا کاراکتر دیگری در رشته جایگزین کنیم، از متد replace()
استفاده میکنیم.
این تابع روی رشتهی مورد نظر صدا زده شده و دو ورودی میگیرد:
- ورودی اول: مقدار قدیمی
- ورودی دوم: مقدار جدید و جایگزین
در قطعه کد زیر تمام حروف e را به o تبدیل کردهایم.
txt = "Hello Dear SabzDanesh.com Users!"
print( txt.replace('e', 'o') )
# Hollo Doar SabzDanosh.com Usors!
اگر به جای کاراکترها یک کلمه یا عبارت هم جایگزین کنیم، عملیات جایگزینی بدون هیچ مشکلی اجرا خواهد شد.
txt = "Hello Dear SabzDanesh.com Users!"
print( txt.replace('Users', 'Admins') )
# Hello Dear SabzDanesh.com Admins!
تبدیل لیست به رشته در پایتون
اگر یک لیست از رشتهها یا کلمات دارید که میخواهید با اتصال آنها یک رشته ایجاد کنید، میبایست از متد join()
استفاده کرد.
تابع join()
یک ورودی میگیرد که میبایست از نوع تکرارگر در پایتون باشد. لیستها و تاپلها نیز نوعی تکرارگر (iterable) هستند.
این تابع تک تک اعضای تکرارگری که به عنوان ورودی گرفته شده را با رشته یا کاراکتری که روی آن صدا زده شده به هم وصل میکند.
بگذارید با یک مثال درک موضوع را راحتتر کنم. فرض کنید لیستی از اسامی افراد داریم که میخواهیم تمام آنها را درون یک رشته قرار داده و آنها را به کمک ,
از یکدیگر جدا کنیم. برای این کار خط دوم کد زیر را اجرا میکنیم.
lst = ["omid", "negar", "sara", "arian"]
string = ','.join( lst )
print(string)
# omid,negar,sara,arian
جمعبندی: رشته در پایتون
در این مقاله به آموزش جامع رشته در پایتون پرداختیم. با نحوه تعریف رشته آشنا شده و کار با رشتهها در پایتون را دیدیم. حداقل 13 تابع پرکاربرد را شناخته و نحوه استفاده از آنها را آموختیم.
دانستیم که با استفاده از عملگر + بین دو رشته، میتوان آنها را به یکدیگر متصل کرد. با تابع split()
عملیات تبدیل رشته به لیست در پایتون را انجام داده و برای تبدیل لیست به رشته در پایتون از متد join()
استفاده کردیم.
به نظر شما چه تابع دیگری در کار با رشتههای پایتون پرکاربرد است که ما معرفی نکردهایم ؟ لطفاً آن را از قسمت دیدگاهها با همه به اشتراک بگذارید.