Python স্ট্রিং একটি সত্যিকারের দরকারি এম্বেডিং সিনট্যাক্স আর প্রচুর বিল্ট-ইন মেথড নিয়ে আসে — এই পাঠে সেগুলো দেখানো হবে যা আপনি প্রতিদিন আসলেই ব্যবহার করবেন।
একটি f-string — f-প্রিফিক্সযুক্ত একটি স্ট্রিং লিটারেল — আপনাকে সরাসরি { }-এর ভেতরে যেকোনো এক্সপ্রেশন বসাতে দেয়:
name = "Priya"
age = 21
print(f"{name} is {age} years old.")
print(f"Next year: {age + 1}") # expressions work too, not just variablesএটি স্ট্রিং কনক্যাটেনেশন পুরোপুরি এড়িয়ে যেতে দেয় — আপনি সরাসরি স্ট্রিংয়ের ভেতরে শুধু একটি ভ্যারিয়েবলের নাম নয়, age + 1-এর মতো একটি সম্পূর্ণ এক্সপ্রেশনও বসাতে পারেন।
{ }-এর ভেতরে, একটি কোলন একটি format specifier শুরু করে — আলাদা কোনো ফরম্যাটিং ফাংশন ছাড়াই দশমিক স্থান, প্যাডিং, আর অ্যালাইনমেন্ট নিয়ন্ত্রণ করা যায়:
price = 3.14159
print(f"{price:.2f}") # "3.14" — 2 decimal places
name = "Amit"
print(f"{name:>10}|") # " Amit|" — right-align in a 10-character field
print(f"{name:<10}|") # "Amit |" — left-align
print(f"{name:^10}|") # " Amit |" — centerNumbers পাঠে আপনি ইতিমধ্যে এর একটি ভ্যারিয়েন্ট দেখেছেন — f"{value:,.2f}" একটি একক specifier-এ হাজার-বিভাজক আর 2টি দশমিক স্থান একত্রিত করে।
= ডিবাগ স্পেসিফায়ার
Python 3.8 একটি ডিবাগিং শর্টকাট যোগ করেছে — { }-এর ভেতরে একটি ভ্যারিয়েবলের ঠিক পরে = যোগ করলে ভ্যারিয়েবলের নাম আর মান দুটোই প্রিন্ট হয়, একটি বাগ খুঁজে বের করার সময় হাতে টাইপ করা থেকে বাঁচায়।
age = 21
print(f"{age=}") # "age=21"ট্রিপল কোট (""" বা ''') একটি স্ট্রিং তৈরি করে যা একাধিক লাইন জুড়ে থাকতে পারে, এর ভেতরের প্রতিটি লাইন ব্রেক আর স্পেস ঠিক যেভাবে লেখা হয়েছে সেভাবেই রেখে — একটি প্যারাগ্রাফ টেক্সট বা একটি ফরম্যাট করা আউটপুট ব্লকের জন্য দরকারি:
message = """Dear Priya,
Your course starts on Monday.
Regards,
LCA"""
print(message)এটি Syntax Basics পাঠে মাল্টি-লাইন কমেন্টের জন্য ব্যবহৃত একই ট্রিপল-কোট সিনট্যাক্স — একমাত্র পার্থক্য হলো ফলাফলটি কোনো কিছুতে assign করা হয়েছে কিনা।
Python [start:end] ব্যবহার করে অক্ষরের একটি রেঞ্জ বের করতে দেয় — আলাদা কোনো ফাংশনের দরকার নেই:
text = "Hello, world!"
print(text[0]) # "H"
print(text[0:5]) # "Hello"
print(text[-1]) # "!" — negative indexes count from the end
print(text[7:]) # "world!" — leaving off the end means "to the end"| মেথড | কী করে | উদাহরণ |
|---|---|---|
| len(s) | একটি স্ট্রিং-এর দৈর্ঘ্য (একটি ফাংশন, মেথড নয়) | len("hello") → 5 |
| s.upper() / s.lower() | কেস বদলানো | "hi".upper() → "HI" |
| s.strip() | দুই প্রান্ত থেকে whitespace সরায় | " hi ".strip() → "hi" |
| s.replace(old, new) | সব occurrence replace করে | "I like cat".replace("cat", "dog") |
| s.split(delimiter) | একটি স্ট্রিংকে list-এ ভাগ করে | "a,b,c".split(",") → ['a', 'b', 'c'] |
| delimiter.join(list) | একটি list-কে স্ট্রিংয়ে জোড়া দেয় | "-".join(["a", "b"]) → "a-b" |
মেথড বনাম ফাংশন — কোনো পরিষ্কার নিয়ম নেই
লক্ষ্য করুন এদের বেশিরভাগই স্ট্রিং নিজের উপর কল করা মেথড (s.upper()), স্ট্রিংকে আর্গুমেন্ট হিসেবে নেওয়া আলাদা ফাংশন নয় — শুধু len() ছাড়া, যা একটি ফাংশন। এই মিশ্র প্যাটার্নটা মুখস্থ রাখতে হবে; কোনটা কী তা অনুমান করার কোনো পরিষ্কার নিয়ম নেই।
Python-এর একটি বড় স্ট্যান্ডার্ড স্ট্রিং মেথড সেট আছে — এখানে যা নেই তার জন্য দেখুন python.org-এ সম্পূর্ণ স্ট্রিং মেথড রেফারেন্স।
স্ট্রিং মেথড একটি নতুন স্ট্রিং রিটার্ন করে
Python স্ট্রিং immutable — s.upper() একটি নতুন স্ট্রিং রিটার্ন করে, এটি s-কে নিজে বদলায় না। শুধু s.upper(), ফলাফল ফেলে দিয়ে, নতুনদের একটি সাধারণ ভুল; পরিবর্তনটা আসলে রাখতে আপনার s = s.upper() দরকার।
উপরের টেবিলের বাইরে, আরও কিছু যা ক্রমাগত দেখা যায়:
| মেথড | কী করে | উদাহরণ |
|---|---|---|
| s.startswith(x) / s.endswith(x) | একটি স্ট্রিংয়ের শুরু/শেষ চেক করে | "file.pdf".endswith(".pdf") → True |
| s.find(x) | প্রথম মিলের index, বা না পেলে -1 | "hello".find("l") → 2 |
| s.count(x) | x কতবার আছে | "banana".count("a") → 3 |
| s.isdigit() | প্রতিটি অক্ষর সংখ্যা হলে True | "123".isdigit() → True |
| s.isalpha() | প্রতিটি অক্ষর বর্ণ হলে True | "abc".isalpha() → True |
| s.title() | প্রতিটি শব্দের প্রথম অক্ষর বড় করে | "hello world".title() → "Hello World" |
| s.zfill(n) | দৈর্ঘ্য n পর্যন্ত শুরুতে শূন্য দিয়ে প্যাড করে | "7".zfill(3) → "007" |
এই টেবিল আর উপরের টেবিলের মধ্যে, বেশিরভাগ প্রতিদিনের স্ট্রিং কাজ কভার হয়ে যায় — বাকি যা কিছু উপরে লিংক করা সম্পূর্ণ রেফারেন্সে আছে।