قسمت پنجم برنامه نویسی مقدماتی با پایتون - رشته ها
نوشته شده توسط دیما
نویسنده سایت
در این قسمت از آموزش با رشتهها و عملیات مختلفی که میتوان بر روی رشتهها در زبان برنامه نویسی پایتون انجام داد، آشنا می شویم.
رشتهها در پایتون
رشتهها در زبانهای برنامه نویسی به صورت ترکیبی از حروف مختلف تشکیل شده اند. این حروف میتوانند شامل اعداد یا کاراکتر های دیگر باشند. رشتهها عموما در زبانهای برنامه نویسی بین دو علامت نقل قول تکی 'my text' و یا بین دو علامت نقل قول دوتایی "my text2" قرار میگیرند.
به مثال زیر توجه کنید. در این مثال ابتدا دو متغیر رشته ای ایجاد شده و سپس با استفاده از تابع print مقادیر این دو متغیر در نمایشگر چاپ می شوند.
myStr = """Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.""" print(myStr)
یا به صورت زیر:
myStr = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.''' print(myStr)
برای اینکه بخواهیم از علامت نقل قولها در رشتهها استفاده کنیم، باید به صورت زیر عمل کرد:
str1 = 'sample text with quote mark " in string' str2 = "sample text with single quote mark ' in string"
همانطور که در مثال بالا می بینید، هنگامی که از ' برای تعریف رشته استفاده شده است دیگر نمیتوان در رشته از علامت ' استفاده کرد و یا هنگامی که از " برای تعریف رشته استفاده شده است دیگر نمیتوان در رشته از علامت " استفاده کرد. به همین دلیل زمانی که بخواهیم در رشته از علامت های ' یا " استفاده کنیم، باید برای تعریف رشته از علامت دیگر استفاده کنیم.
روشی دیگر نیز برای استفاده از علامت های یکسان درون رشته وجود دارد که از escape character ها استفاده میکند. برای اینکار کافی است قبل از علامت مورد نظر از علامت \(بک اسلش) استفاده کنیم.
str1 = "sample text with ' and \" in string"
در اینجا چون رشته در بین دو علامت " قرارگرفته، باید برای استفاده از علامت " درون رشته از \" استفاده کنیم.
دستیابی به محتویات درون رشتهها در پایتون
در زبان پایتون مانند سایر زبانها، رشتهها به صورت آرایه ای از بایت ها برای نمایش کاراکترها استفاده می شوند. این بدین معناست که ما همانطور که عناصر مشخص از یک آرایه را میتوانیم دسترسی یابیم، میتوانیم به کاراکترهای مدنظر خود در رشته ها نیز دسترسی پیدا کنیم.
برای دستیابی به کاراکتر های مدنظر خود در رشته باید پس از نام متغیر از علامت [i] استفاده کنیم. در بین این دو علامت به جای i از ترتیب مدنظر کاراکتر خود استفاده می کنیم. باید این را در نظر داشته باشیم که در پایتون مانند اکثر زبانهای برنامه نویسی دیگر، شروع ترتیب از صفر آغاز میشود و تا طول رشته یا تعداد حروف رشته منهای یک مجاز می باشد. به تصویر زیر دقت نمایید.
myStr = "Hello World!" print(myStr[1]) # output => e
دسترسی به حروف های مدنظر تنها از ابتدا آغاز نمیشود و حتی میتوان از آخر رشته نیز به حروف رشته دسترسی داشت. برای اینکار کافیست که از علامت منفی قبل شماره حرف مدنظر خود استفاده کرد.
myStr = "Hello World!" print(myStr[-1]) # output => !
نکته: در مثال بالا زمانی که بخواهیم آخرین حرف را و یا حرف اول از آخر رشته را بدست آوریم، باید از شماره ۱ منفی شروع کرده و تا ۱۲ منفی که ابتدای رشته میباشد، استفاده کنیم.
هر زمانی که از شماره ای غیر مجاز که در بازه ی تعریف شده آرایه ی رشته نباشد، استفاده کنیم، با خطای زیر مواجه میشویم و باید در هنگام استفاده از شماره ایندکس مورد نظر به بازه ی رشته ی مورد نظر نیز توجه کنیم.
IndexError: string index out of range
در زبان برنامه نویسی پایتون امکان دستیابی به چندین حرف از رشته نیز فراهم شده است. برای اینکار باید از الگوی
variable[مقدار پرش:بازه پایان:بازه شروع]
استفاده کرد. در این الگو از شماره ترتیب «بازه شروع» آغاز کرده و تا قبل از حرفی که شماره ایندکس یا ترتیب آن توسط «بازه پایان» مشخص شده، انتخاب می شود. اندازه ی گام زمانی که مشخص شود، بدین معناست که هنگام پیمایش حروف رشته چند تا چند تا از حروف را رد کند. برای درک بهتر به مثالهای زیر توجه کنید.
myStr[0:5]
در مثال بالا مقدار «بازه شروع» برابر صفر میباشد و این بدین معنی میباشد که از اولین حرف رشته که در اینجا H میباشد شروع کند. مقدار «بازه پایان» برابر با پنج میباشد و این مقدار بدین معناست که تا پنجمین حرف از رشته و یا حرفی که ایندکس شماره چهار را دارد را انتخاب کند.
نکته: همانطور که در مثال بالا مشاهده میکنید، مقدار اندازه ی گام مشخص نشده است و این بدین معناست که اندازه ی گام یک است. میتوان قسمتهایی را که نیاز نداریم را مشخص نکنیم و یا خالی بگذاریم. در صورتی که «بازه شروع» را خالی بگذاریم این بدین معناست که از ابتدای رشته آغاز کند و در صورتی که «بازه پایان» را خای بگذاریم، این بدین معناست که انتهای بازه ی ما آخر رشته می باشد.
myStr[2:6]
myStr[-6:-1]
myStr[1::2]
myStr[::2]
رشتهها را حتی میتوان با استفاده از حلقه های تکرار نیز پیمایش کرد. به مثال زیر توجه کنید. در قسمتهای آینده با مفهوم حلقه های تکرار بیشتر آشنا خواهیم شد.
for letter in myStr: print(letter)
در این مثال ما با استفاده از حلقه ی تکرار تمامی حروف متغیر رشته ای myStr را پیمایش کرده و هر کاراکتر یا حرف را در یک سطر مجزا چاپ می کنیم.
H e l l o W o r l d !
مقایسه رشتهها در پایتون
در زبان پایتون باید توجه داشته باشیم که الفبای بزرگ یک حرف با الفبای کوچک همان حرف برابر نیست. یعنی a با A برابر نمی باشد. و باید هنگام مقایسه مستقیم رشتهها به این نکته توجه کرد.
رشتهها را میتوان با استفاده از عملگر های مقایسهای <,<=,>,>=,==,!= با یکدیگر مقایسه کرد.
برای مثال خروجی مقایسه ی زیر برابر با False خواهد بود، زیر این دو رشته با یکدیگر برابر نیستند.
"a" == "A"
و یا خروجی مثال زیر برابر با True می باشد، چون کد حرف a از کد حرف A در استاندارد تعریف شده بیشتر می باشد.
"a" > "A"
البته رایج ترین روش مقایسه ی یک رشته در رشته ی دیگر استفاده از عملگر in می باشد. بدین صورت که درصورتی که رشته ی مورد نظر در رشته ی موردجستجو باشد، مقدار True را بر میگرداند. از این عملگر میتوان در بسیاری از برنامهها برای مقایسه و یا جستجوی رشتهها استفاده کرد.
if "Ali" in myStr: print( "Yes") if "Ali" not in myStr: print( "No")
در مثال بالا به دلیل اینکه عبارت "Ali" در متغیر myStr وجود ندارد، شرط دوم که حاوی not in میباشد True شده و یا اجرا شده و به همین دلیل مقدار No چاپ می شود.
چاپ رشتهها در پایتون
برای چاپ رشتهها و یا حتی مقادیر عددی میتوان از تابع print استفاده کنیم. با استفاده از این تابع و عملگر + حتی میتوانیم چندین متغیر یا رشته ی مختلف را در کنار یکدیگر و در یک خط چاپ نماییم.
مثال اول:
str1 = "Hello" str2 = "World" output = str1 + " " + str2 print(output)
مثال دوم:
age = 28 txt = "I am " + age + " years old."
در مثال دوم باید به این نکته توجه کنیم که اگر بخواهیم از دو متغیر رشته ای و عددی در کنار هم استفاده کنیم، باید متغیر عددی را به صورت رشته ای تبدیل کنیم و سپس از عملگر الحاق(+) برای چسباندن دو رشته در کنار هم استفاده کنیم.
age = 28 txt = "I am " + str(age) + " years old." print(txt)
دو مثال بالا را میتوانیم به صورت زیر نیز بازنویسی کنیم.
str1 = "Hello" str2 = "World" print(str1, str2) age = 28 print( "I am", age,"years old.")
در صورتی که برای مثال دوم از روش بالا استفاده کنیم دیگر نیازی به تبدیل متغیر به هنگام چاپ خروجی نداریم ولی درصورتی که بخواهیم دو متغیر عددی و رشته ای را در کنار هم قرار دهیم و خروجی را در یک متغیر دیگر قرار بدهیم، باید حتماً متغیر عددی را به رشته ای تبدیل کرده و بعد
عملیات الحاق را انجام دهیم.
در صورتی که بخواهیم عملیات اینتر(enter) یا خط جدید را شبیه سازی کنیم به طوری که ادامه ی رشته یا متغیر مورد نظر در خط بعد چاپ شود، میتوانیم از "n\" استفاده کنیم. در مثال زیر خروجی هر دو خط یکسان می باشد.
print("My name is dmaon" + "\n" + "I am 28 years old.")
print("My name is dmaon\nI am 28 years old.")
رشتهها در پایتون همچنین دارای متدی یا تابعی به نام format هستند که میتوان از این تابع استفاده کرد و متغیرهای مختلف خود را درون رشته جاسازی کرد.
age = 28
personName = "dmaon"
output = "My name is {0}, and I am {1} years old."
print( output.format(personName, age) )
age = 28
personName = "dmaon"
output = "My name is {1}, and I am {0} years old."
print( output.format(age,personName) )
دو خروجی مثال بالا یکسان میباشد و تنها ترتیب متغیر ها(خط ۱۰) بر اساس شماره ترتیبی که تعریف شده در رشته ی output (خط ۹) متفاوت است. در مثال بالا شما همچنین میتوانید از شماره های ایندکس استفاده نکنید و تنها کافیست هنگام استفاده از ترتیب صحیح استفاده نمایید.
age = 28
personName = "dmaon"
output = "My name is {}, and I am {} years old."
print( output.format(personName, age) )
توابع پرکاربرد رشتهها در پایتون
در پایتون توابع پرکاربرد زیادی برای کار با رشتهها ایجاد شده است. در این بخش با برخی از این توابع آشنا خواهیم شد.
تابع lower برای تبدیل حروف رشته به حروف با الفبای کوچک استفاده می شود. یکی از نمونههای استفاده از این تابع بدین صورت است که ممکن است ما ورودی ای از کاربر به صورت رشته درخواست کنیم و بعد بخواهیم این ورودی را با مقدار خود مقایسه کنیم. اگر این ورودی از لحاظ املایی و متنی با رشته مورد مقایسه ی ما یکسان باشد ولی چون ورودی کاربر ممکن است با حروف بزرگ تایپ شده باشد، باعث میشود شرط اجرا نشود. به همین دلیل از این تابع در این مثال استفاده میکنند تا این اتفاق پیش نیاید. این تابع یک پارامتر از رشته مورد نظر ما را دریافت کرده و خروجی خود را به صورت رشته ای از حروف با الفبای کوچک بر میگرداند.
print(myStr.lower()) # output => hello world!
تابع upper برعکس تابع قبل عمل میکند و تمام حروف را به صورت رشته با حروف الفبای بزرگ بر میگرداند.
print(myStr.upper()) # output => HELLO WORLD!
تابع دیگر نیز به نام strip وجود دارد که فاصله ی اضافی در ابتدا و انتهای رشته که ممکن است اشتباهی در ابتدا و انتهای رشته قرار گرفته باشد را حذف می کند.
myStr = " Hello World! " print(myStr.strip()) # output => 'Hello World!'
برای آنکه بتوانیم تعداد حروف رشته را بدست آوریم باید از تابع len استفاده کنیم.
print(len(myStr)) # output => 12
با استفاده از تابع len میتوانیم کد نوشته شده برای پیمایش یک رشته با استفاده از حلقه ی تکرار را به صورت زیر بازنویسی کنیم.
for i in range( len(myStr) ): print(myStr[i])
در مثال بالا از تابع range برای ایجاد یک بازه از صفر تا یازده(مقدار تابع len(myStr) منهای یک) استفاده میکنیم. یعنی بازه ی تعریف شده در مثال بالا به صورت زیر خواهد بود.
0,1,2,3,4,5,6,7,8,9,….,len(myStr)-1
هنگامی که بخواهیم که یک قسمت از رشته را با عبارت دیگری جایگزین کنیم، میتوانیم از تابع replace استفاده کنیم. این تابع دو پارامتر را از ما دریافت میکند که اولی مقدار رشته یا عبارتی که میخواهیم آن را عوض کنیم و دومی مقدار جدیدی که میخواهیم آن مقدار جایگزین شود، می باشد. در صورتی که مقدار پارامتر اول این تابع که همان عبارت مورد نظر برای تغییر ما هستش، در رشته وجود نداشته باشد، این تابع مقدار خود متغیر را بدون هیچ تغییری بر میگرداند.
print(myStr.replace("World", "Internet")) # output => Hello Internet!
print(myStr.replace("Internet", "Universe")) # output => Hello World!
در خط اول مقدار عبارت World در متغیر رشته ای myStr یافت شده و با رشته ی Internet جایگزین می شود.
در خط دوم مقدار عبارت Internet در متغیر رشته ای myStr وجود ندارد و به همین دلیل عملیات جایگزینی انجام نمیشود و خود متغیر رشته ای myStr چاپ می شود.
در پایتون همچنین تابعی وجود دارد که میتوانیم رشته را بر اساس یک کاراکتری که مشخص میکنیم به یک لیستی از عناصر تبدیل کنیم. در مثال زیر رشته ی "Hello World!" به یک لیست با دو عنصر Hello و World! تبدیل می شود. در این مثال عبارتی که معیار شکستن رشته استفاده شده خط فاصله(" ") می باشد.
myStr.split(" ")
# output => ["Hello", "World!"]
در آینده با لیست ها و دیگر تعاریف این گروهها آشنا خواهیم شد.
Image by vectorpouch on Freepik