کار با رشتهها
رشتهها (متنها) یکی از پرکاربردترین انواع داده هستند. در این فصل با تمام متدهای مفید رشته در پایتون و نحوه کار با متنهای فارسی آشنا میشویم.
رشتهها (متنها) یکی از پرکاربردترین انواع داده هستند. در این فصل با تمام متدهای مفید رشته در پایتون و نحوه کار با متنهای فارسی آشنا میشویم.
ساخت رشته
s1 = "تک خطی با کوتیشن"
s2 = 'تک خطی با تک کوتیشن'
s3 = """رشته
چندخطی
طولانی"""
s4 = (تک کوتیشن سهگانه نیز ممکن است)
# رشته خالی
empty = ""
print(len(empty)) # 0
دسترسی به کاراکترها
name = "محمدعلی"
# اندیس از 0 شروع میشود
print(name[0]) # م
print(name[1]) # ح
print(name[-1]) # ی (آخرین)
print(name[-2]) # ل (یکی مانده به آخر)
# طول رشته
print(len(name)) # 7
# خطا برای اندیس خارج محدوده
# print(name[100]) # IndexError
برش (Slicing)
text = "Hello World"
# [start:stop] -- stop شامل نمیشود
print(text[0:5]) # Hello
print(text[6:11]) # World
# اگر start حذف شود از اول
print(text[:5]) # Hello
# اگر stop حذف شود تا آخر
print(text[6:]) # World
# اعداد منفی
print(text[-5:]) # World
print(text[:-6]) # Hello
# [start:stop:step]
print(text[::2]) # HloWrd (یکی در میان)
print(text[::-1]) # dlroW olleH (معکوس)
# کپی کامل
copy = text[:]
تغییرناپذیری
رشتهها در پایتون تغییرناپذیر هستند:
name = "علی"
# name[0] = "ر" # TypeError!
# باید رشته جدید ساخت
new_name = "ر" + name[1:]
print(new_name) # رلی
# یا با replace
text = "سلام دنیا"
new_text = text.replace("دنیا", "ایران")
print(new_text) # سلام ایران
print(text) # سلام دنیا (تغییر نکرد)
متدهای مهم رشته
تغییر اندازه حروف
s = "Hello World"
print(s.upper()) # HELLO WORLD
print(s.lower()) # hello world
print(s.title()) # Hello World
print(s.capitalize()) # Hello world
print(s.swapcase()) # hELLO wORLD
حذف فاصله
s = " سلام "
print(f"|{s.strip()}|") # |سلام| (دو طرف)
print(f"|{s.lstrip()}|") # |سلام | (چپ)
print(f"|{s.rstrip()}|") # | سلام| (راست)
# حذف کاراکتر خاص
url = "###سلام###"
print(url.strip("#")) # سلام
# پاک کردن خط جدید
line = "متنn"
print(line.rstrip()) # متن (بدون n)
جستجو
text = "آموزش پایتون مقدماتی"
# in - سادهترین روش
print("پایتون" in text) # True
# find - اندیس را برمیگرداند، -1 اگر نباشد
print(text.find("پایتون")) # 6
print(text.find("جاوا")) # -1
# index - مثل find ولی خطا میدهد اگر نباشد
print(text.index("پایتون")) # 6
# text.index("جاوا") # ValueError
# count - شمارش
print(text.count("ا")) # 2
# startswith / endswith
filename = "report.pdf"
print(filename.endswith(".pdf")) # True
print(filename.startswith("rep")) # True
# با چند گزینه
extensions = (".jpg", ".png", ".gif")
filename2 = "photo.png"
print(filename2.endswith(extensions)) # True
جایگزینی
text = "سلام علی، سلام علی"
# replace(old, new) - همه را جایگزین میکند
print(text.replace("علی", "زهرا"))
# سلام زهرا، سلام زهرا
# با محدودیت تعداد
print(text.replace("علی", "زهرا", 1))
# سلام زهرا، سلام علی
# حذف با replace به رشته خالی
text = "متن با فاصله زیاد"
print(text.replace(" ", " "))
تقسیم و اتصال
# split - تقسیم به لیست
csv = "علی,زهرا,محمد,سارا"
names = csv.split(",")
print(names) # ['علی', 'زهرا', 'محمد', 'سارا']
# با محدودیت
text = "a-b-c-d-e"
parts = text.split("-", 2)
print(parts) # ['a', 'b', 'c-d-e']
# splitlines - تقسیم به خطوط
multi = """خط اول
خط دوم
خط سوم"""
lines = multi.splitlines()
print(lines) # ['خط اول', 'خط دوم', 'خط سوم']
# join - اتصال
words = ["پایتون", "زبان", "قشنگی", "است"]
sentence = " ".join(words)
print(sentence) # پایتون زبان قشنگی است
# با خط جدید
para = "n".join(words)
print(para)
بررسی نوع کاراکترها
"abc".isalpha() # True فقط حروف
"abc123".isalnum() # True حروف یا عدد
"123".isdigit() # True فقط عدد
"abc".islower() # True حروف کوچک
"ABC".isupper() # True حروف بزرگ
" ".isspace() # True فقط فاصله
"Hello World".istitle() # True هر کلمه با حرف بزرگ شروع شود
# اعتبارسنجی ورودی
age_str = input("سن: ")
if age_str.isdigit():
age = int(age_str)
else:
print("ورودی عدد نیست")
پر کردن (Padding)
num = "5"
# zfill - پر کردن با صفر
print(num.zfill(4)) # 0005
# ljust / rjust / center
print("علی".ljust(10, ".")) # علی.......
print("علی".rjust(10, ".")) # .......علی
print("علی".center(10, "-")) # ---علی----
# مثال شماره فاکتور
order_id = 42
formatted = f"INV-{str(order_id).zfill(6)}"
print(formatted) # INV-000042
رشتههای فارسی
پایتون ۳ بهصورت پیشفرض UTF-8 است و فارسی بهخوبی پشتیبانی میشود:
name = "محمدعلی ناظری"
print(len(name)) # 13 (شامل فاصله)
print(name[0]) # م
print(name.split(" ")) # ['محمدعلی', 'ناظری']
# مرتبسازی فارسی
names = ["زهرا", "علی", "محمد", "آرش"]
names.sort()
print(names)
# ['آرش', 'زهرا', 'علی', 'محمد'] (بر اساس Unicode)
تبدیل اعداد فارسی به انگلیسی
def fa_to_en(text):
"""تبدیل اعداد فارسی/عربی به انگلیسی"""
fa_digits = "۰۱۲۳۴۵۶۷۸۹"
ar_digits = "٠١٢٣٤٥٦٧٨٩"
en_digits = "0123456789"
table = str.maketrans(fa_digits + ar_digits, en_digits + en_digits)
return text.translate(table)
text = "قیمت ۲۵۰۰۰۰ تومان است"
print(fa_to_en(text)) # قیمت 250000 تومان است
# تبدیل برعکس
def en_to_fa(text):
en = "0123456789"
fa = "۰۱۲۳۴۵۶۷۸۹"
return text.translate(str.maketrans(en, fa))
print(en_to_fa("شماره: 1404")) # شماره: ۱۴۰۴
نرمالسازی فارسی
def normalize_persian(text):
"""تصحیح ی و ک عربی"""
text = text.replace("ي", "ی").replace("ك", "ک")
return text
# تفاوت در نگاه ساده دیده نمیشود ولی Unicode متفاوت است!
text1 = "علي" # با ي عربی
text2 = "علی" # با ی فارسی
print(text1 == text2) # False!
print(normalize_persian(text1) == text2) # True
قالببندی پیشرفته
# اعداد
num = 1234567.891
print(f"{num:,}") # 1,234,567.891 جداکننده هزارگان
print(f"{num:.2f}") # 1234567.89
print(f"{num:,.2f}") # 1,234,567.89
print(f"{num:e}") # 1.234568e+06 نمایش علمی
# درصد
ratio = 0.847
print(f"{ratio:.1%}") # 84.7%
# مبنا
n = 255
print(f"{n:b}") # 11111111 دودویی
print(f"{n:o}") # 377 اکتال
print(f"{n:x}") # ff هگزا
print(f"{n:X}") # FF
print(f"{n:#x}") # 0xff
# تاریخ
from datetime import datetime
now = datetime.now()
print(f"{now:%Y-%m-%d}") # 2026-05-01
print(f"{now:%A %d %B %Y}") # Friday 01 May 2026
تمرین فصل
🏋️ تمرین ۱ – شمارنده حروف:
متنی بگیرید و تعداد حروف، تعداد کلمات و تعداد جملات (با شمارش .) را چاپ کنید.
🏋️ تمرین ۲ – معکوس کردن:
یک رشته بگیرید و آن را معکوس چاپ کنید (دو روش: با slicing و با حلقه).
🏋️ تمرین ۳ – متقارن (Palindrome):
تشخیص دهید رشته متقارن است یا نه. مثال: «داماد»، «کرک»، «racecar» متقارن هستند.
🏋️ تمرین ۴ – فایل صحیح:
یک نام فایل بگیرید و چک کنید پسوندش .jpg، .png یا .gif باشد. اگر نه، خطا بدهید.
جمعبندی
- دسترسی با اندیس و slicing
- تغییرناپذیری رشتهها
- متدهای پرکاربرد:
upper،lower،strip،replace،split،join،find - متدهای بررسی نوع:
isdigit،isalpha، … - کار با فارسی و تبدیل اعداد
- قالببندی پیشرفته با f-string