~/icsd.ir — bash
SYSTEM_ONLINE

کار با رشته‌ها

رشته‌ها (متن‌ها) یکی از پرکاربردترین انواع داده هستند. در این فصل با تمام متدهای مفید رشته در پایتون و نحوه کار با متن‌های فارسی آشنا می‌شویم.

رشته‌ها (متن‌ها) یکی از پرکاربردترین انواع داده هستند. در این فصل با تمام متدهای مفید رشته در پایتون و نحوه کار با متن‌های فارسی آشنا می‌شویم.

ساخت رشته

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

نمایش سایت

رنگ سایت
حالت نمایش
اندازهٔ متن
خوانایی

این تنظیمات فقط روی مرورگر شما ذخیره می‌شود.