برنامه نویسی 636 بازدید

در «زبان برنامه‌نویسی پایتون» (Python Programming Language)، شش نوع داده گوناگون شامل «عدد» (Number)، «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set)، «دیکشنری» (Dictionary) و «رشته» (String) وجود دارد. در این مطلب، به نوع داده رشته در پایتون پرداخته خواهد شد. در ادامه، روش ساخت رشته، فرمت، ویرایش و حذف رشته‌ها در پایتون مورد بررسی قرار خواهد گرفت. همچنین، عملیات و توابع گوناگون برای کار با رشته‌ها معرفی خواهند شد.

نوع داده رشته در پایتون

یک رشته در پایتون یک توالی از کاراکترها است. یک کاراکتر یک سمبل است. برای مثال، زبان انگلیسی ۲۶ کاراکتر دارد. کامپیوترها با کاراکترها کار نمی‌کنند، بلکه با اعداد (دودویی) کار می‌کنند. اگرچه کاربر کاراکترهای زیادی را روی صفحه نمایش می‌بینند، اما این کاراکترها در واقع به صورت ترکیبی از صفرها و یک‌ها در کامپیوتر ذخیره می‌شوند.

این تبدیل کاراکتر به عدد، «رمزنگاری» (Encoding) نام دارد و فرایند معکوس آن (از کاراکتر به عدد) «رمزگشایی» (Decoding) نام دارد. «اَسکی» (ASCII) و «یونی‌کُد» (Unicode) برخی از روش‌های محبوب رمزنگاری هستند که مورد استفاده قرار می‌گیرند. در پایتون، رشته یک توالی از کاراکترهای یونیکد است. یونیکد برای در بر گرفتن کلیه کاراکترها در همه زبان‌ها معرفی شده است و یکنواختی را به کدگذاری آورده است.

روش ساخت رشته در پایتون

رشته‌ها در پایتون را می‌توان با قرار دادن کاراکترها در میان جفت نقل قول تک انگلیسی (”) یا جفت نقل قول جفت انگلیسی (“”) ساخت. در پایتون، حتی می‌توان رشته‌ها را با قرار دادن در میان یک جفت از سه علامت نقل قول تکی (”””) نیز ساخت. اما از این حالت معمولا برای نمایش رشته‌های چندخطی و «داک‌استرینگ‌ها» (Docstrings) استفاده می‌شود.

در قطعه کد بالا، رشته Hello به سه روشی که پیش‌تر بیان شد، ساخته و چاپ شده‌اند. سپس، رشته «Hello, welcome to the world of Python» که در دو خط آمده، با استفاده از یک جفت سه علامت نقل قول تکی ساخته و سپس چاپ شده است. خروجی حاصل از اجرای کد بالا، به صورت زیر خواهد بود.

دسترسی به کاراکترهای نوع داده رشته در پایتون

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

این کار منجر به خطای TypeError می‌شود. پایتون امکان اندیس‌دهی منفی برای توالی‌ها را نیز فراهم می‌کند. اندیس ۱- به آخرین عنصر از رشته و ۲- به عنصر یکی مانده به آخر رشته اشاره دارد. می‌توان به طیفی از عناصر رشته نیز با استفاده از عملگر برش‌زنی یعنی «دو نقطه» (colon) دسترسی داشت.

در کد بالا، ابتدا رشته programiz ساخته شده و در متغیر str قرار گرفته است. سپس، با استفاده از (print(‘str = ‘, str، محتوای متغیر str به صورت زیر چاپ شده است.

 str = programiz

از دستور ([print(‘str[0] = ‘, str[0 برای بازگردانی اولین عنصر رشته (با اندیس ۰) و چاپ آن در خروجی استفاده شده است. خروجی این دستور در زیر آمده است.

str[0] = p

با استفاده از اندیس‌دهی منفی در دستور ([print(‘str[-1] = ‘, str[-1 آخرین کاراکتر، رشته چاپ خواهد شد. خروجی این دستور به صورت زیر خواهد بود.

str[-1] = z

با استفاده از دستور ([print(‘str[1:5] = ‘, str[1:5، به روش برش‌زنی، دومین کاراکتر (اندیس ۱) تا پنجمین کاراکتر (اندیس ۴) در خروجی چاپ می‌شوند.

str[1:5] = rogr

با ترکیب برش‌زنی و اندیس‌دهی معکوس، با استفاده از دستور ([print(‘str[5:-2] = ‘, str[5:-2، از کاراکتر ششم (اندیس ۵) تا کاراکتر یکی مانده به آخر یعنی هفتمین کاراکتر (اندیس ۲-) در خروجی چاپ می‌شوند. خروجی این دستور، به صورت زیر است.

str[5:-2] = am

در صورتی که برای دسترسی به اندیسی خارج از رنج موجود تلاش شود و یا از یک عدد اعشاری استفاده شود، پیغام خطا صادر می‌شود. نمونه‌های زیر در همین رابطه قابل توجه هستند.

# index must be in range
>>> my_string[15]  
...
IndexError: string index out of range

# index must be an integer
>>> my_string[1.5] 
...
TypeError: string indices must be integers

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

نوع داده رشته در پایتون -- به زبان ساده

روش تغییر یا حذف یک رشته در پایتون

رشته‌ها غیر قابل تغییر هستند. این یعنی، عناصر یک رشته را نمی‌توان پس از آنکه تخصیص پیدا کردند تغییر داد. می‌توان به سادگی رشته‌های گوناگون را به نام مشابهی تخصیص داد. نمونه‌های زیر در همین رابطه، قابل توجه هستند.

>>> my_string = 'programiz'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'

نمی‌توان کاراکترهای یک رشته را حذف کرد. اما حذف رشته به طور کامل، با استفاده از کلیدواژه del امکان‌پذیر است.

>>> del my_string[1]
...
TypeError: 'str' object doesn't support item deletion
>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined

عملیات روی نوع داده رشته در پایتون

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

الحاق دو یا تعداد بیشتری رشته

اتصال دو یا تعداد بیشتری رشته در یک رشته را الحاق گویند. عملگر «+» کار الحاق را در پایتون انجام می‌دهد. عملگر «*» نیز می‌تواند یک رشته را به تعداد دفعات مشخصی (که به برنامه داده شده) تکرار کند.

در کد بالا، دو رشته تعریف شده‌اند. متغیر str1 دارای مقدار Hello و str2 دارای مقدار ٰ!World است. دستور (print(‘str1 + str2 = ‘, str1 + str2، این دو رشته را الحاق کرده و حاصل آن را در خروجی چاپ می‌کند.

str1 + str2 = HelloWorld!

برای آنکه فاصله بین Hello و World رعایت شود، می‌توان کد را به صورت زیر اصلاح کرد.

خروجی به صورت زیر تغییر می‌کند.

str1 + str2 = Hello World!

دستور (print(‘str1 * 3 =’, str1 * 3، رشته str1 را سه بار تکرار و سپس آن را چاپ می‌کند. خروجی این دستور به صورت زیر است.

str1 * 3 = HelloHelloHello

برای الحاق رشته‌هایی که در خطوط متفاوت قرار دارند، می‌توان از پرانتز استفاده کرد. نمونه‌های زیر در همین رابطه قابل ملاحظه هستند.

>>> # two string literals together
>>> 'Hello ''World!'
'Hello World!'

>>> # using parentheses
>>> s = ('Hello '
...      'World')
>>> s
'Hello World'

حلقه زدن در رشته‌ها

با استفاده از حلقه for می‌توان در رشته‌ها حلقه زد. در ادامه، مثالی ارائه شده که در آن تعداد «l»‌های موجود در رشته شمرده می‌شود. سپس، با استفاده از دستور (‘print(count,’letters found، این تعداد در یک جمله کامل چاپ می‌شود.

خروجی کد بالا، به صورت زیر است.

3 letters found

تست عضویت رشته در پایتون

می‌توان از کلیدواژه in برای بررسی این موضوع استفاده کرد که آیا یک زیر رشته در یک رشته موجود است یا خیر. مثال‌های زیر در همین رابطه، قابل توجه هستند.

خروجی قطعه کد بالا به صورت زیر است.

True

مثال دیگری نیز در ادامه آمده است.

خروجی قطعه کد بالا به صورت زیر است.

False

توابع توکار برای نوع داده رشته پایتون

توابع توکار متعددی برای کار با نوع داده رشته در پایتون وجود دارند. از جمله متداول‌ترین این توابع توکار می‌توان به ()enumerate و ()len اشاره کرد. تابع ()enumerate یک شی شمارشی را باز می‌گرداند. این تابع، اندیس و مقدار همه عناصر رشته را به صورت جفت (اندیس، مقدار) باز می‌گرداند. تابع ()len، طول یک رشته (تعداد کاراکترهای آن رشته) را باز می‌گرداند.

قالب‌بندی رشته در پایتون

در ادامه، روشهای قالب‌بندی رشته در پایتون مورد بررسی قرار گرفته است.

فرار از توالی

اگر کاربر بخواهد رشته‌های مانند -“?He said, “What’s there- را چاپ کند، نمی‌تواند از تک نقل قول (‘) یا جفت نقل قول (“) استفاده کند. زیرا این کار موجب خطای نحو (SyntaxError) می‌شود. زیرا، خط رشته حاوی سینگل و دابل کوتنشن است. نمونه زیر مثالی در همین رابطه است.

>>> print("He said, "What's there?"")
...
SyntaxError: invalid syntax
>>> print('He said, "What's there?"')
...
SyntaxError: invalid syntax

یک راهکار برای حل این مساله استفاده از جفت نقل قول تکی است. راهکار دیگر، فرار از توالی است. فرار توالی با یک «بک‌اسلش» (Backslash) آغاز و به گونه‌ای متفاوت تفسیر می‌شود. اگر از تک نقل قول برای نمایش یک رشته استفاده شود، از همه تک نقل قول‌های قرار گرفته در رشته باید فرار شود. به طور مشابه، فرار از جفت نقل قول نیز باید اتفاق بیفتد. در ادامه، کدهای قابل استفاده برای نمایش جمله بالا، ارائه شده‌اند.

در ادامه، لیست همه روش‌های فرار توالی در پایتون ارائه شده است.

  • newline\: بک‌اسلش و خط جدید نادیده گرفته می‌شوند.
  • \\: بک‌اسلش
  • ‘\: برای Single quote
  • “\: برای Double quote
  • a\: اسکی بل (ASCII Bell)
  • b\: بک‌اسپیس اسکی (ASCII Backspace)
  • f\: فرم‌فید اسکی (ASCII Formfeed)
  • n\: خط جدید اسکی (ASCII Linefeed)
  • r\: بازگشت به عقب اسکی (ASCII Carriage Return)
  • t\: تب افقی اسکی (ASCII Horizontal Tab)
  • v\: تب عمودی اسکی (ASCII Vertical Tab)
  • ooo\: کاراکتر با مقدار مبنای هشت ooo
  • xHH\: کاراکتر با مقدار هگزادسیمال HH

در ادامه، مثال‌هایی از این کاراکترها آورده شده است.

>>> print("C:\\Python32\\Lib")
C:\Python32\Lib

>>> print("This is printed\nin two lines")
This is printed
in two lines

>>> print("This is \x48\x45\x58 representation")
This is HEX representation

رشته خام برای نادیده گرفتن فرار توالی

گاهی ممکن است نیاز به نادیده گرفتن فرار توالی درون یک رشته باشد. برای انجام این کار، می‌توان r یا R را در مقابل یک رشته قرار داد. این کار نشان می‌دهد که رشته مذکور یک رشته خام است و فرار توالی آن نادیده گرفته می‌شود. در ادامه مثال‌هایی برای این موارد ارائه شده است.

خروجی قطعه کد بالا به صورت زیر است.

This is a 
good example

مثال دیگری در همین رابطه و در ادامه ارائه شده اس.

خروجی قطعه کد بالا به صورت زیر است.

This is \x61 \ngood example

متد ()format برای قالب‌بندی رشته‌ها

متد ()format که برای شی رشته موجود است، متدی بسیار گسترده و قدرتمند برای قالب‌بندی رشته‌ها محسوب می‌شود. در این متد، از آکولاد به عنوان placeholder یا فیلد جایگزین استفاده می‌شود. می‌توان از آرگومان‌های موقعیتی یا آرگومان‌های کلیدواژه‌ها برای تعیین ترتیب استفاده کرد. در ادامه، مثال‌هایی در این رابطه آورده شده است.

متد ()format می‌تواند مشخصه‌های قالب گزینشی داشته باشد. آن‌ها، از نام فیلد با استفاده از دو نقطه (:) جدا می‌شوند. بنابراین، می‌توان یک رشته را در فضای داده شده چپ‌چین (>)، راست‌چین (<) یا وسط‌چین (^) کرد. همچنین، می‌توان انواع عددی صحیح را به عنوان دودویی، شانزده‌شانزدهی و دیگر موارد فرمت کرد. اعداد اعشاری را نیز می‌توان گرد کرد یا به صورت نماد علمی نمایش داد. روش‌های قالب‌بندی بسیاری وجود دارد که می‌توان از آن‌ها همراه با متد ()format برای قالب‌بندی رشته‌ها استفاده کرد. در ادامه، نمونه‌هایی برای موارد بیان شده، آمده است.

خروجی قطعه کد بالا به صورت زیر است.

'Binary representation of 12 is 1100'

مثال:

خروجی قطعه کد بالا به صورت زیر است.

'Exponent representation: 1.566345e+03'

مثال:

خروجی قطعه کد بالا به صورت زیر است.

'One third is: 0.333'

مثال:

خروجی قطعه کد بالا به صورت زیر است.

'|butter    |  bread   |       ham|'

قالب‌بندی سبک قدیمی

برای نوع داده رشته در پایتون، حتی می‌توان از رشته‌ها را به روش‌هایی مانند ()sprintf که در زبان برنامه‌نویسی C وجود داشت، قالب‌بندی کرد. از عملگر % برای انجام این کار استفاده می‌شود. در ادامه، مثال‌هایی برای این مورد آمده است.

در کد بالا، مقدار 12.3456789 به متغیر x تخصیص داده شده است. سپس، با استفاده از تابع ()print مقدار متغیر گرد و در خروجی به صورتی که در زیر مشخص شده چاپ شده است.

The value of x is 12.35

متدهای متداول برای رشته در پایتون

متدهای متعددی برای کار با نوع داده رشته در پایتون وجود دارد. متد ()format که پیش‌تر به آن اشاره شد، یکی از آن‌ها است. از جمله متدهای محبوب کار با رشته‌ها در پایتون می‌توان به () upper() ،join() ،split() ،find() ،replace و ()lower اشاره کرد. در ادامه، مثال‌هایی در همین رابطه آمده است.

در دستور بالا، با استفاده از متد ()lower، همه حروف PrOgRaMiZ که برخی از آن‌ها حروف بزرگ و برخی حروف کوچک هستند، به حروف کوچک مبدل شده‌اند.

'programiz'

مثال از متد ()upper

در دستور بالا، با استفاده از متد ()upper، کلیه حروف PrOgRaMiZ که برخی از آن‌ها کوچک (Lowercase) و برخی بزرگ (Uppercase) هستند به حروف بزرگ مبدل شده‌اند.

 'PROGRAMIZ'

مثال از متد ()split

در کد بالا، با استفاده از متد ()split، کلیه کلمات رشته به عناصر یک لیست تبدیل شده‌اند.

['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']

مثال از متد ()join

در دستور بالا، با استفاده از متد ()join، کلیه عناصر لیست به هم متصل شده‌اند و یک جمله را ساخته‌اند.

'This will join all words into a string'

مثال از متد ()find

متد ()find، اندیس اولین وقوع زیررشته در رشته اصلی ر ا ارائه می‌کند.

7

مثال از متد ()replace

در کد بالا، با استفاده از متد ()replace، رشته Brilliant جایگزین رشته Happy شده است.

'Brilliant New Year'

اگر این مطلب برای شما مفید بوده است، آموزش‌ها و مطالب زیر نیز به شما پیشنهاد می‌شوند:

الهام حصارکی (+)

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *