رشتهها در پایتون؛ تعریف، ایندکس و برش (Slicing) رشته

🗓 آخرین بهروزرسانی:
رشتهها (String) پرکاربردترین نوع داده در برنامههای واقعی هستند. نام کاربر، پیام خوشآمدگویی، آدرس ایمیل، متن یک فایل و حتی پاسخی که از یک وبسایت دریافت میکنیم، همگی رشته هستند. اگر میخواهید برنامههایی بنویسید که با کاربر حرف بزنند، اطلاعات را نمایش دهند یا متن را پردازش کنند، باید کار با رشته در پایتون را بهخوبی یاد بگیرید.
این آموزش، ادامه درس انواع داده در پایتون از دوره رایگان آموزش پایتون از صفر است. در آن درس با نوع str آشنا شدیم؛ اکنون میخواهیم عمیقتر شویم و ببینیم رشته دقیقاً چیست، چگونه تعریف میشود، چطور به یک حرف خاص از آن دسترسی پیدا کنیم و چگونه بخشی از رشته را با برش (Slicing) جدا کنیم.
رشته در پایتون چیست؟
رشته در پایتون دنبالهای مرتب از کاراکترهاست. هر کاراکتر میتواند یک حرف فارسی یا انگلیسی، عدد، فاصله، علامت نگارشی یا حتی ایموجی باشد. پایتون رشتهها را با نوع داده str نشان میدهد و از استاندارد یونیکد پشتیبانی میکند؛ بنابراین بدون هیچ تنظیم اضافهای میتوانید متن فارسی را در رشتهها ذخیره و چاپ کنید.
نکته مهم این است که رشته «دنباله» است؛ یعنی ترتیب کاراکترها اهمیت دارد و هر کاراکتر جایگاه یا ایندکس مشخصی دارد. همین ویژگی باعث میشود بتوانیم مانند لیستها روی رشتهها حلقه بزنیم، طول آنها را بگیریم و بخشی از آنها را جدا کنیم.
روشهای تعریف رشته در پایتون
برای تعریف رشته کافی است متن را داخل کوتیشن قرار دهید. پایتون سه روش اصلی دارد:
name = 'Sara'
city = "تهران"
bio = """من برنامهنویس پایتون هستم.
این متن چند خطی است."""
print(name)
print(city)
print(bio)
print(type(name))خروجی این کد نام، شهر، متن دو خطی و در پایان <class 'str'> است. بین کوتیشن تکی (') و دوتایی (") هیچ تفاوتی از نظر عملکرد وجود ندارد. انتخاب بین آنها بیشتر به محتوای متن بستگی دارد؛ مثلاً اگر داخل متن یک آپاستروف انگلیسی دارید، بهتر است کل رشته را با کوتیشن دوتایی بنویسید:
message = "It's a good day"
print(message)کوتیشن سهتایی (""" یا ''') برای متنهای چندخطی استفاده میشود و خطهای جدید را دقیقاً همانطور که نوشتهاید نگه میدارد. از همین روش برای نوشتن Docstring در توابع هم استفاده میشود که در درس توابع در پایتون با آن آشنا شدیم.
کاراکترهای ویژه (Escape Characters)
گاهی لازم است داخل رشته کاراکترهایی بنویسیم که مستقیم قابل تایپ نیستند؛ مثل رفتن به خط بعد یا تب. در این حالت از بکاسلش (\) استفاده میکنیم:
print("خط اول\nخط دوم")
print("نام:\tعلی")
print("مسیر فایل: C:\\Users\\Ali")
print('He said: \'Hello\'')\nیعنی خط جدید.\tیعنی یک تب (فاصله افقی).\\خود کاراکتر بکاسلش را چاپ میکند.\'و\"کوتیشن را داخل رشته قرار میدهند.
اگر بخواهید بکاسلشها اصلاً تفسیر نشوند (مثلاً برای مسیر فایل در ویندوز)، میتوانید از رشته خام (Raw String) با پیشوند r استفاده کنید:
path = r"C:\new_folder\test"
print(path)طول رشته با تابع len()
تابع len() تعداد کاراکترهای یک رشته را برمیگرداند. فاصلهها و علامتها هم جزو کاراکترها حساب میشوند:
text = "Hello Python"
print(len(text)) # 12
persian = "سلام"
print(len(persian)) # 4
empty = ""
print(len(empty)) # 0یکی از کاربردهای رایج len() بررسی ورودی کاربر است؛ مثلاً میخواهیم مطمئن شویم رمز عبور حداقل ۸ کاراکتر دارد. ترکیب این تابع با شرطهای if بسیار رایج است:
password = "abc123"
if len(password) < 8:
print("رمز عبور باید حداقل ۸ کاراکتر باشد")
else:
print("رمز عبور قابل قبول است")ایندکس در رشته؛ دسترسی به یک کاراکتر
هر کاراکتر رشته یک شماره یا ایندکس دارد. در پایتون شمارش از صفر شروع میشود؛ یعنی اولین کاراکتر ایندکس ۰ دارد، دومی ۱ و همینطور تا آخر. برای دسترسی به یک کاراکتر، ایندکس آن را داخل براکت مینویسیم:
word = "Python"
print(word[0]) # P
print(word[1]) # y
print(word[5]) # nپایتون ایندکس منفی هم دارد که از انتهای رشته شمرده میشود. ایندکس -1 آخرین کاراکتر و -2 یکی مانده به آخر است. این روش زمانی مفید است که طول رشته را نمیدانیم ولی به انتهای آن نیاز داریم:
word = "Python"
print(word[-1]) # n
print(word[-2]) # o
print(word[-6]) # Pاگر ایندکسی خارج از محدوده رشته بدهید، پایتون خطای IndexError میدهد. مثلاً word[10] در رشته ششحرفی بالا خطا ایجاد میکند. در درس مدیریت خطا در پایتون یاد میگیرید چگونه این خطاها را کنترل کنید.
برش رشته (Slicing)
برش یا Slicing یعنی جدا کردن بخشی از رشته. ساختار کلی آن به این شکل است:
text[start:stop:step]- start: ایندکس شروع (خود این ایندکس شامل میشود). اگر ننویسید، از ابتدای رشته شروع میشود.
- stop: ایندکس پایان (خود این ایندکس شامل نمیشود). اگر ننویسید، تا انتهای رشته ادامه میدهد.
- step: گام حرکت؛ پیشفرض ۱ است.
text = "Hello Python"
print(text[0:5]) # Hello
print(text[6:]) # Python
print(text[:5]) # Hello
print(text[-6:]) # Python
print(text[::2]) # HloPto
print(text[::-1]) # nohtyP olleHآخرین مثال یک ترفند معروف است: با گام -1 رشته برعکس میشود. از این ترفند برای بررسی «پالیندروم» استفاده میشود؛ یعنی کلمهای که از دو طرف یکسان خوانده میشود:
word = "level"
if word == word[::-1]:
print("این کلمه پالیندروم است")یکی از مزیتهای Slicing این است که برخلاف ایندکس، اگر محدوده را بزرگتر از طول رشته بدهید خطا نمیدهد و فقط تا جایی که کاراکتر وجود دارد را برمیگرداند.
رشتهها تغییرناپذیر هستند
یکی از مهمترین نکات رشته در پایتون این است که رشتهها Immutable یا تغییرناپذیرند. یعنی نمیتوانید یک کاراکتر را مستقیم عوض کنید:
word = "Python"
# word[0] = "J" # TypeError: 'str' object does not support item assignment
new_word = "J" + word[1:]
print(new_word) # Jythonبرای تغییر رشته همیشه یک رشته جدید میسازیم و آن را در همان متغیر یا متغیر دیگری ذخیره میکنیم. این رفتار با لیستها متفاوت است که قابل تغییر هستند، و شبیه تاپلها است.
اتصال و تکرار رشتهها
با عملگر + میتوان دو رشته را به هم چسباند و با * یک رشته را تکرار کرد:
first = "Dev"
last = "Source"
print(first + " " + last) # Dev Source
print("-" * 20)
print("ها" * 3) # هاهاهادقت کنید که نمیتوانید رشته و عدد را مستقیم با + جمع کنید. ابتدا باید عدد را با str() به رشته تبدیل کنید:
age = 25
print("سن من " + str(age) + " سال است")بررسی وجود یک متن با in
عملگر in بررسی میکند آیا یک کاراکتر یا عبارت داخل رشته وجود دارد یا نه، و نتیجه آن True یا False است:
email = "user@example.com"
print("@" in email) # True
print("gmail" in email) # False
print("x" not in email) # Falseاین عملگر برای اعتبارسنجی ساده ورودیها مثل ایمیل بسیار کاربردی است.
پیمایش رشته با حلقه for
چون رشته دنباله است، میتوانیم با حلقه for روی تکتک کاراکترهای آن حرکت کنیم. در مثال زیر تعداد حروف صدادار یک جمله انگلیسی را میشماریم:
sentence = "I love learning Python"
vowels = "aeiouAEIOU"
count = 0
for ch in sentence:
if ch in vowels:
count += 1
print("تعداد حروف صدادار:", count) # 7تمرین: ساخت نام کاربری از نام و نام خانوادگی
فرض کنید میخواهیم از نام و نام خانوادگی یک کاربر، یک نام کاربری کوتاه بسازیم: سه حرف اول نام + سه حرف اول نام خانوادگی + طول کل نام.
first_name = "Mohsen"
last_name = "Ahmadi"
username = first_name[:3].lower() + last_name[:3].lower() + str(len(first_name + last_name))
print(username) # mohahm12در این تمرین از برش، تبدیل نوع و یک متد رشته (lower()) استفاده کردیم. متدهای رشته موضوع درس بعدی هستند.
خطاهای رایج مبتدیان
- فراموش کردن بستن کوتیشن: نوشتن
"HelloباعثSyntaxErrorمیشود. - شروع ایندکس از ۱: اولین کاراکتر ایندکس ۰ دارد، نه ۱.
- جمع رشته با عدد:
"age: " + 20خطایTypeErrorمیدهد. - تلاش برای تغییر مستقیم کاراکتر: رشتهها تغییرناپذیرند.
- اشتباه در stop در Slicing: ایندکس stop شامل نتیجه نمیشود.
📌 همچنین بخوانید: بازار کار پایتون در ایران، نصب و تنظیم پایتون در VS Code و برنامهنویسی پایتون با گوشی
سؤالات متداول
تفاوت کوتیشن تکی و دوتایی در پایتون چیست؟
هیچ تفاوتی در عملکرد ندارند. معمولاً یکی را انتخاب میکنیم و در کل پروژه یکسان استفاده میکنیم؛ فقط اگر داخل متن کوتیشن داشته باشیم، نوع دیگر را برای بیرون رشته انتخاب میکنیم.
آیا پایتون از متن فارسی در رشتهها پشتیبانی میکند؟
بله. پایتون ۳ بهصورت پیشفرض از یونیکد استفاده میکند و متن فارسی بدون مشکل ذخیره، چاپ و پردازش میشود. فقط هنگام کار با فایل بهتر است encoding="utf-8" را مشخص کنید.
چطور یک رشته را در پایتون برعکس کنیم؟
سادهترین راه استفاده از برش با گام منفی است: text[::-1].
جمعبندی
در این درس یاد گرفتیم رشته در پایتون دنبالهای از کاراکترهاست که با کوتیشن تکی، دوتایی یا سهتایی تعریف میشود. با کاراکترهای ویژه، تابع len()، ایندکس مثبت و منفی، برش رشته، تغییرناپذیری، اتصال و تکرار، عملگر in و پیمایش با حلقه آشنا شدیم. این مفاهیم پایهای برای پردازش متن، ساخت رباتها و کار با فایلها هستند.
درس قبلی: انواع داده در پایتون؛ متن، عدد و مقدار بولی
درس بعدی: متدهای رشته در پایتون
بازگشت به فهرست کامل دوره آموزش پایتون از صفر
برای ذخیره پیشرفت در همه دستگاهها و دریافت گواهی پایان مسیر، رایگان ثبتنام کن یا وارد شو.