فصل ۶ · ادامهٔ مسیر

رشته‌ها و پردازش متن

حروف را پیدا کن، متن را برش بده و بخش مورد نیاز را استخراج کن.

۴۰ دقیقهٔ پیشنهادی مطالعه و تمرین۵ بخشتمرین عملی و خودآزمایی

بعد از این فصل می‌توانی…

  • اندیس و برش رشته را به کار ببری.
  • متن را پاک‌سازی و جست‌وجو کنی.
  • با پیمایش رشته، نویسه‌ها را بشماری.

پیشنهاد برای پیش‌نیاز: حلقه‌ها و الگوهای تکرار

ویدیوی این فصل

رشته‌ها و پردازش متن

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

بخش 1

رشته، طول و اندیس

رشته دنباله‌ای از نویسه‌هاست. اندیس از صفر شروع می‌شود؛ در "banana"، اندیس ۱ حرف a است. len() تعداد نویسه‌ها را می‌دهد. رشته‌های پایتون ۳ از Unicode پشتیبانی می‌کنند و متن فارسی هم رشته است.

آخرین اندیس مثبت len(text) - 1 است. دسترسی مستقیم به اندیس بیرون رشته، IndexError می‌دهد. برای متن خالی نیز text[0] مجاز نیست.

دیدن حروف

fruit = "banana"
print(fruit[0])
print(fruit[1])
print(len(fruit))
خروجی مورد انتظار
b
a
6
بخش 2

برش و چسباندن متن

در text[start:end]، شروع داخل برش است اما پایان داخل آن نیست. حذف start یعنی از ابتدا، و حذف end یعنی تا انتها. + دو رشته را به هم می‌چسباند.

خود رشته تغییرپذیر نیست؛ text[0] = "A" خطاست. برای تغییر، رشتهٔ جدید بساز و آن را در متغیر نگه دار.

برش نام زبان

text = "Monty Python"
print(text[6:12])
print(text[:5])
print("Hello" + " " + "Python")
خروجی مورد انتظار
Python
Monty
Hello Python
بخش 3

پیمایش و شمارش

for می‌تواند حروف رشته را یکی‌یکی بخواند. با یک شرط و شمارنده، تعداد یک حرف را پیدا کن. عملگر in هم وجود یک زیررشته را به صورت True یا False نشان می‌دهد.

چند حرف a داریم؟

count = 0
for letter in "banana":
    if letter == "a":
        count += 1
print(count)
print("nan" in "banana")
خروجی مورد انتظار
3
True
بخش 4

متدهای پاک‌سازی و جست‌وجو

strip() فاصله‌های ابتدا و انتها را حذف می‌کند، lower() و upper() حروف را تبدیل می‌کنند، و replace() متن را جایگزین می‌کند. این متدها رشتهٔ جدید می‌سازند؛ اصل رشته تغییر نمی‌کند.

find() محل اولین تطبیق یا -1 را می‌دهد. startswith() و endswith() ابتدا و انتهای رشته را می‌سنجند. مقایسهٔ رشته‌ها به حروف بزرگ و کوچک حساس است؛ برای دادهٔ انگلیسی می‌توان پیش از مقایسه lower() را به کار برد.

پاک‌سازی پیام

message = "  Hello Bob  "
clean = message.strip().replace("Bob", "Sara")
print(clean)
print(clean.lower())
print(clean.find("Sara"))
خروجی مورد انتظار
Hello Sara
hello sara
6
بخش 5

استخراج بخشی از متن

برای جدا کردن دامنهٔ یک ایمیل ساده، جای @ را پیدا کن و بخش بعد از آن را برش بده. ابتدا مطمئن شو find نتیجهٔ -1 نداده است.

در فصل فهرست‌ها با split و در فصل عبارت منظم با re همین مسئله را از راه دیگری حل می‌کنیم.

دامنهٔ ایمیل آموزشی

email = "sara@example.org"
position = email.find("@")
if position != -1:
    print(email[position + 1:])
خروجی مورد انتظار
example.org
حالا نوبت توست

نام کاربری مرتب

متن « Sara_Python » را از ورودی بگیر، فاصله‌های دو طرف را حذف کن، حروف را کوچک کن و نام تمیزشده و طول آن را چاپ کن.

یک راهنمای کوچک

نتیجهٔ strip().lower() را در یک متغیر نگه دار.

پاسخ پیشنهادی و خروجی
username = input()
clean = username.strip().lower()
print(clean)
print(len(clean))

خروجی نمونه

sara_python
11

خودآزمایی

پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمی‌کند.

1. خروجی "Python"[0:2] چیست؟
2. lower() چه اثری روی رشتهٔ اولیه دارد؟