🐍 Python শেখার সিরিজ — পর্ব ৯ / ২০
python learning

Strings
String Formatting, Escape Characters, সব গুরুত্বপূর্ণ Method, Slicing ও Text Analyzer প্রজেক্ট সহ বিস্তারিত বাংলায়
⏱ পড়তে সময় ~১৮ মিনিট 🎯 Beginner Friendly 🐍 Python 3.x

পর্ব ২-এ আমরা String-এর প্রাথমিক ধারণা পেয়েছিলাম। এই পর্বে আমরা String-কে সম্পূর্ণভাবে জানব — Formatting, সব গুরুত্বপূর্ণ Method, এবং বাস্তব কাজে String ব্যবহার। Python-এ প্রায় সব কাজেই String লাগে — Web, Data, File — সর্বত্র।

📝 String — পুনরায় পরিচয়

String হলো অক্ষরের একটি ক্রমানুসারী সংগ্রহ। Python-এ String Immutable — একবার তৈরি হলে সরাসরি পরিবর্তন করা যায় না, তবে নতুন String তৈরি করা যায়।

Python — String তৈরির বিভিন্ন উপায়
# Single quote
s1 = 'হ্যালো Python'

# Double quote
s2 = "Python শেখা মজার"

# Triple quote — Multi-line
s3 = """এটি
একটি
Multi-line String"""

# Raw String — Backslash literal হিসেবে নেয়
path = r"C:\Users\rahim\Desktop"

# String Repetition
line = "─" * 30
print(line)

# String Concatenation
full = "রাহিম" + " " + "করিম"
print(full)

# String Immutable — সরাসরি পরিবর্তন যায় না
name = "rahim"
name = name.upper()  # নতুন String তৈরি হয়
print(name)
✔ আউটপুট
──────────────────────────────
রাহিম করিম
RAHIM
🔡 Escape Characters

Escape Character হলো বিশেষ অক্ষর যা Backslash (\) দিয়ে শুরু হয় এবং String-এ বিশেষ কাজ করে।

\nনতুন লাইন
\tTab (৪ ঘর)
\\Backslash
\'Single Quote
\"Double Quote
\rCarriage Return
\0Null Character
\uUnicode
Python — Escape Characters
# \n — নতুন লাইন
print("প্রথম লাইন\nদ্বিতীয় লাইন\nতৃতীয় লাইন")

# \t — Tab
print("নাম:\tরাহিম")
print("বয়স:\t২২")

# Quote-এর ভেতরে Quote
print('সে বলল, \'আমি Python শিখছি\'')
print("সে বলল, \"আমি Python শিখছি\"")

# \\ — Backslash নিজেই
print("ফাইল পাথ: C:\\Users\\rahim")

# r"" — Raw String, Backslash literal
print(r"ফাইল পাথ: C:\Users\rahim")
✔ আউটপুট
প্রথম লাইন
দ্বিতীয় লাইন
তৃতীয় লাইন
নাম:	রাহিম
বয়স:	২২
সে বলল, 'আমি Python শিখছি'
সে বলল, "আমি Python শিখছি"
ফাইল পাথ: C:\Users\rahim
ফাইল পাথ: C:\Users\rahim
✂️ String Indexing ও Slicing

String-ও List-এর মতো Index ও Slice করা যায়। প্রতিটি অক্ষরের একটি Index আছে।

Python — String Indexing ও Slicing
text = "Python"
#        P  y  t  h  o  n
# index:  0  1  2  3  4  5
# neg:   -6 -5 -4 -3 -2 -1

print(text[0])      # P
print(text[-1])     # n
print(text[1:4])    # yth
print(text[:3])     # Pyt
print(text[3:])     # hon
print(text[::-1])   # nohtyP — উল্টো
print(text[::2])    # Pto — একটি পর পর

# Palindrome চেক — উল্টালেও একই?
word = "level"
print(f"'{word}' Palindrome? {word == word[::-1]}")

word2 = "python"
print(f"'{word2}' Palindrome? {word2 == word2[::-1]}")
✔ আউটপুট
P
n
yth
Pyt
hon
nohtyP
Pto
'level' Palindrome? True
'python' Palindrome? False
🎨 String Formatting — তিনটি পদ্ধতি

String-এর মধ্যে Variable-এর মান ঢোকানোর তিনটি পদ্ধতি আছে।

f"..."
f-string (Python 3.6+)

সবচেয়ে আধুনিক ও সহজ। সরাসরি {} এর ভেতরে Variable।

.format()
format() Method

Python 3-এর পুরনো পদ্ধতি। {} placeholder ব্যবহার করে।

% "..."
% Formatting

সবচেয়ে পুরনো পদ্ধতি। এখনও চলে কিন্তু কম ব্যবহৃত।

Python — তিনটি Formatting পদ্ধতি
naam  = "রাহিম"
boyos = 22
gpa   = 3.85

# পদ্ধতি ১: f-string (সবচেয়ে ভালো)
print(f"নাম: {naam}, বয়স: {boyos}, GPA: {gpa}")

# পদ্ধতি ২: .format()
print("নাম: {}, বয়স: {}, GPA: {}".format(naam, boyos, gpa))

# নাম দিয়েও format() করা যায়
print("নাম: {n}, বয়স: {b}".format(n=naam, b=boyos))

# পদ্ধতি ৩: % formatting
print("নাম: %s, বয়স: %d, GPA: %.2f" % (naam, boyos, gpa))
✔ আউটপুট
নাম: রাহিম, বয়স: 22, GPA: 3.85
নাম: রাহিম, বয়স: 22, GPA: 3.85
নাম: রাহিম, বয়স: 22
নাম: রাহিম, বয়স: 22, GPA: 3.85

সবসময় f-string ব্যবহার করো — এটি সবচেয়ে পড়তে সহজ, দ্রুত এবং আধুনিক।

🔢 f-string Advanced — সংখ্যার ফরম্যাট

f-string দিয়ে সংখ্যাকে বিভিন্নভাবে সুন্দরভাবে দেখানো যায়।

Python — f-string Number Formatting
pi      = 3.14159265
price   = 1234567.89
percent = 0.7543

# দশমিক নিয়ন্ত্রণ
print(f"PI (2 দশমিক): {pi:.2f}")
print(f"PI (4 দশমিক): {pi:.4f}")

# হাজারের কমা
print(f"মূল্য: {price:,.2f} টাকা")

# শতাংশ
print(f"শতাংশ: {percent:.1%}")

# নির্দিষ্ট প্রস্থে সাজানো
print(f"{'নাম':15} {'নম্বর':8} {'গ্রেড':5}")
print(f"{'রাহিম':15} {85:8} {'A+':5}")
print(f"{'সালমা আক্তার':15} {91:8} {'A+':5}")

# শূন্য দিয়ে padding
print(f"রোল নম্বর: {7:04d}")    # 0007

# বাইনারি, হেক্স, অক্টাল
print(f"255 → Binary: {255:b}, Hex: {255:x}, Octal: {255:o}")
✔ আউটপুট
PI (2 দশমিক): 3.14
PI (4 দশমিক): 3.1416
মূল্য: 1,234,567.89 টাকা
শতাংশ: 75.4%
নাম            নম্বর    গ্রেড
রাহিম                85 A+
সালমা আক্তার         91 A+
রোল নম্বর: 0007
255 → Binary: 11111111, Hex: ff, Octal: 377
🔡 Case Methods

String-এর অক্ষরের বড়/ছোট হাত পরিবর্তনের Method।

Python — Case Methods
text = "hello python world"
text2= "HELLO PYTHON WORLD"

print(text.upper())        # HELLO PYTHON WORLD
print(text2.lower())       # hello python world
print(text.title())        # Hello Python World
print(text.capitalize())   # Hello python world
print(text.swapcase())     # HELLO PYTHON WORLD
print(text2.swapcase())    # hello python world

# Case-insensitive তুলনা
a = "Python"
b = "python"
print(f"সমান? {a == b}")                    # False
print(f"সমান (ignore case)? {a.lower() == b.lower()}")  # True
✔ আউটপুট
HELLO PYTHON WORLD
hello python world
Hello Python World
Hello python world
HELLO PYTHON WORLD
hello python world
সমান? False
সমান (ignore case)? True
🔍 Search ও Replace Methods
find(sub)

প্রথম occurrence-এর index দেয়, না পেলে -1

rfind(sub)

শেষ occurrence-এর index দেয়

index(sub)

find()-এর মতো, না পেলে Error

count(sub)

কতবার আছে গণনা করে

replace(old, new)

পুরনো অংশ নতুন দিয়ে বদলায়

startswith(s)

s দিয়ে শুরু হলে True

endswith(s)

s দিয়ে শেষ হলে True

in operator

sub থাকলে True

Python — Search ও Replace
sentence = "Python শেখা মজার। Python দিয়ে অনেক কাজ করা যায়।"

# find() ও count()
print(f"প্রথম 'Python' কোথায়: {sentence.find('Python')}")
print(f"'Python' কতবার: {sentence.count('Python')}")
print(f"'Java' আছে কি: {sentence.find('Java')}")   # -1

# replace()
new_s = sentence.replace("Python", "🐍 Python")
print(new_s)

# startswith ও endswith
email = "rahim@gmail.com"
print(f"Gmail? {email.endswith('@gmail.com')}")     # True
print(f"rahim? {email.startswith('rahim')}")         # True

# in operator
print(f"'মজার' আছে? {'মজার' in sentence}")             # True

# URL validation সহজ উদাহরণ
urls = ["https://esbangla.com", "http://example.com", "not-a-url"]
for url in urls:
    valid = url.startswith("http")
    print(f"{'✅' if valid else '❌'} {url}")
✔ আউটপুট
প্রথম 'Python' কোথায়: 0
'Python' কতবার: 2
'Java' আছে কি: -1
🐍 Python শেখা মজার। 🐍 Python দিয়ে অনেক কাজ করা যায়।
Gmail? True
rahim? True
'মজার' আছে? True
✅ https://esbangla.com
✅ http://example.com
❌ not-a-url
✂️ Split ও Join — String ভাঙা ও জোড়া লাগানো

split() এবং join() হলো সবচেয়ে বেশি ব্যবহৃত String Method — একটি String-কে List-এ ভাঙে, অন্যটি List-কে String-এ জোড়া লাগায়।

Python — split() ও join()
# split() — String → List
sentence = "Python শেখা অনেক মজার"
words    = sentence.split()       # space দিয়ে ভাঙে
print(words)

# নির্দিষ্ট delimiter দিয়ে ভাঙা
csv   = "রাহিম,করিম,সালমা,নাসরিন"
names = csv.split(",")
print(names)

# সর্বোচ্চ কতবার ভাঙবে
parts = csv.split(",", 2)
print(parts)   # ['রাহিম', 'করিম', 'সালমা,নাসরিন']

# join() — List → String
fruits     = ["আম", "কলা", "লিচু"]
joined     = ", ".join(fruits)
print(joined)   # আম, কলা, লিচু

joined2 = " | ".join(fruits)
print(joined2)  # আম | কলা | লিচু

joined3 = "".join(fruits)
print(joined3)  # আমকলালিচু

# বাস্তব ব্যবহার — URL slug তৈরি
title = "Python Tutorial For Beginners"
slug  = "-".join(title.lower().split())
print(slug)   # python-tutorial-for-beginners
✔ আউটপুট
['Python', 'শেখা', 'অনেক', 'মজার']
['রাহিম', 'করিম', 'সালমা', 'নাসরিন']
['রাহিম', 'করিম', 'সালমা,নাসরিন']
আম, কলা, লিচু
আম | কলা | লিচু
আমকলালিচু
python-tutorial-for-beginners
✂️ Strip Methods — ছাঁটাই করা

String-এর শুরু বা শেষের অতিরিক্ত space বা অক্ষর সরাতে Strip Methods ব্যবহার হয়।

Python — Strip Methods
messy = "   হ্যালো Python   "

print(f"আগে:  '{messy}'")
print(f"strip:  '{messy.strip()}'")    # উভয় দিক
print(f"lstrip: '{messy.lstrip()}'")   # শুধু বাম
print(f"rstrip: '{messy.rstrip()}'")   # শুধু ডান

# নির্দিষ্ট অক্ষর সরানো
url = "###esbangla.com###"
print(url.strip("#"))    # esbangla.com

# বাস্তব ব্যবহার — user input পরিষ্কার করা
user_input = "  rahim@gmail.com  "
clean      = user_input.strip().lower()
print(f"পরিষ্কার Email: '{clean}'")
✔ আউটপুট
আগে:  '   হ্যালো Python   '
strip:  'হ্যালো Python'
lstrip: 'হ্যালো Python   '
rstrip: '   হ্যালো Python'
esbangla.com
পরিষ্কার Email: 'rahim@gmail.com'
✔️ Validation Methods

String-এর বিষয়বস্তু যাচাই করার Method — সবগুলো True বা False দেয়।

MethodTrue হয় যখনউদাহরণ
isdigit()সব অক্ষর সংখ্যা"123".isdigit() → True
isalpha()সব অক্ষর letter"abc".isalpha() → True
isalnum()letter বা digit, space নেই"abc123".isalnum() → True
isspace()শুধু whitespace" ".isspace() → True
isupper()সব বড় হাত"ABC".isupper() → True
islower()সব ছোট হাত"abc".islower() → True
istitle()প্রতিটি শব্দ Capital"Hello World".istitle() → True
Python — Password Validator
def validate_password(password):
    """পাসওয়ার্ড যাচাই করে।"""
    errors = []

    if len(password) < 8:
        errors.append("কমপক্ষে ৮ অক্ষর দরকার")

    if not any(c.isdigit() for c in password):
        errors.append("কমপক্ষে একটি সংখ্যা দরকার")

    if not any(c.isupper() for c in password):
        errors.append("কমপক্ষে একটি বড় হাত অক্ষর দরকার")

    if not any(c.isalpha() for c in password):
        errors.append("কমপক্ষে একটি অক্ষর দরকার")

    if errors:
        print(f"❌ '{password}' যোগ্য নয়:")
        for e in errors: print(f"   • {e}")
    else:
        print(f"✅ '{password}' সঠিক পাসওয়ার্ড!")

validate_password("abc")
print()
validate_password("Rahim123")
✔ আউটপুট
❌ 'abc' যোগ্য নয়:
   • কমপক্ষে ৮ অক্ষর দরকার
   • কমপক্ষে একটি সংখ্যা দরকার
   • কমপক্ষে একটি বড় হাত অক্ষর দরকার

✅ 'Rahim123' সঠিক পাসওয়ার্ড!
🔁 String ও Loop
Python — String with Loops
text = "Hello World"

# প্রতিটি অক্ষর iterate
for char in text:
    print(char, end="-")
print()

# vowel গণনা
vowels = "aeiouAEIOU"
count  = sum(1 for c in text if c in vowels)
print(f"Vowel সংখ্যা: {count}")

# অক্ষরের frequency Dictionary
freq = {}
for char in text.lower():
    if char.isalpha():
        freq[char] = freq.get(char, 0) + 1
print(f"অক্ষর frequency: {freq}")

# String Comprehension — শুধু অক্ষর রাখো
dirty  = "h3ll0 w0rld!"
clean  = "".join([c for c in dirty if c.isalpha()])
print(f"শুধু অক্ষর: '{clean}'")
✔ আউটপুট
H-e-l-l-o- -W-o-r-l-d-
Vowel সংখ্যা: 3
অক্ষর frequency: {'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1}
শুধু অক্ষর: 'hllwrld'
📊 প্র্যাকটিক্যাল প্রজেক্ট — Text Analyzer

এই পর্বের সব String ধারণা একসাথে ব্যবহার করে একটি সম্পূর্ণ Text Analyzer তৈরি করি।

💻 প্রজেক্ট: Text Analyzer

যেকোনো টেক্সট বিশ্লেষণ করে — শব্দ সংখ্যা, অক্ষর, সবচেয়ে বেশি ব্যবহৃত শব্দ, বাক্য সংখ্যা এবং আরও তথ্য বের করবে।

Python — text_analyzer.py
def analyze_text(text):
    """টেক্সট বিশ্লেষণ করে বিভিন্ন তথ্য দেয়।"""

    if not text.strip():
        return "❌ খালি টেক্সট!"

    # মৌলিক পরিসংখ্যান
    total_chars    = len(text)
    chars_no_space = len(text.replace(" ", ""))
    words          = text.split()
    word_count     = len(words)
    sentences      = len([s for s in text.split(".") if s.strip()])

    # Vowel গণনা
    vowels      = "aeiouAEIOU"
    vowel_count = sum(1 for c in text if c in vowels)

    # শব্দের frequency
    word_freq = {}
    for word in words:
        w = word.lower().strip(".,!?;:")
        if w: word_freq[w] = word_freq.get(w, 0) + 1

    # শীর্ষ ৩ শব্দ
    top3 = sorted(word_freq.items(),
                  key=lambda x: x[1], reverse=True)[:3]

    # সবচেয়ে দীর্ঘ শব্দ
    longest = max(words, key=len)

    # গড় শব্দের দৈর্ঘ্য
    avg_len = sum(len(w) for w in words) / word_count

    # রিপোর্ট প্রিন্ট
    print("╔══════════════════════════════╗")
    print("║       Text Analysis Report       ║")
    print("╚══════════════════════════════╝")
    print(f"📝 মোট অক্ষর:       {total_chars}")
    print(f"📝 Space ছাড়া:       {chars_no_space}")
    print(f"📖 মোট শব্দ:         {word_count}")
    print(f"📜 মোট বাক্য:        {sentences}")
    print(f"🔤 Vowel সংখ্যা:      {vowel_count}")
    print(f"📏 দীর্ঘতম শব্দ:     '{longest}' ({len(longest)} অক্ষর)")
    print(f"📐 গড় শব্দের দৈর্ঘ্য: {avg_len:.1f}")
    print("\n🏆 শীর্ষ ৩ শব্দ:")
    for i, (word, cnt) in enumerate(top3, 1):
        print(f"   {i}. '{word}' — {cnt} বার")

# ── পরীক্ষা ──
sample = """
Python is a great programming language. Python is easy to learn.
Many developers love Python. Python can be used for web development,
data science, and artificial intelligence. Learning Python is fun.
"""
analyze_text(sample)
✔ আউটপুট
╔══════════════════════════════╗
║       Text Analysis Report       ║
╚══════════════════════════════╝
📝 মোট অক্ষর:       196
📝 Space ছাড়া:       162
📖 মোট শব্দ:         33
📜 মোট বাক্য:        5
🔤 Vowel সংখ্যা:      57
📏 দীর্ঘতম শব্দ:     'intelligence.' (14 অক্ষর)
📐 গড় শব্দের দৈর্ঘ্য: 6.0

🏆 শীর্ষ ৩ শব্দ:
   1. 'python' — 5 বার
   2. 'is' — 3 বার
   3. 'learning' — 2 বার
📚 এই পর্বে আমরা যা শিখলাম
  • String তৈরির সব পদ্ধতি — single, double, triple quote, raw string
  • Escape Characters — \n, \t, \\, \', \"
  • String Indexing ও Slicing — Palindrome চেক
  • তিনটি Formatting পদ্ধতি — f-string (সেরা), .format(), %
  • f-string Advanced — দশমিক, হাজারের কমা, padding, alignment
  • Case Methods — upper, lower, title, capitalize, swapcase
  • Search Methods — find, rfind, count, in operator
  • Replace ও Check — replace, startswith, endswith
  • split() ও join() — URL slug তৈরি উদাহরণ
  • Strip Methods — strip, lstrip, rstrip
  • Validation Methods — isdigit, isalpha, isupper, islower
  • Password Validator প্রজেক্ট
  • Text Analyzer প্রজেক্ট
🏋️ নিজে চেষ্টা করো
  1. Palindrome Checker: একটি শব্দ বা বাক্য নিয়ে Palindrome কিনা যাচাই করো (space ও case ignore করো)
  2. Caesar Cipher: একটি String-এর প্রতিটি অক্ষর নির্দিষ্ট সংখ্যক ঘর সরিয়ে encode করো
  3. Email Validator: Email address-এ @ আছে কিনা, .com বা .net দিয়ে শেষ কিনা চেক করো
  4. Word Reverser: একটি বাক্যের প্রতিটি শব্দ উল্টো করো কিন্তু শব্দের ক্রম ঠিক রাখো
  5. Slug Generator: যেকোনো Blog title নিয়ে URL-friendly slug তৈরি করো (lowercase, hyphen দিয়ে)
⏭️ পরের পর্বে কী থাকছে? — পর্ব ১০: File Handling
  • File খোলা, পড়া ও লেখা — open(), read(), write()
  • with statement — নিরাপদ File handling
  • Text File ও Binary File-এর পার্থক্য
  • CSV File পড়া ও লেখা
  • বাস্তব প্রজেক্ট — Diary App