Python দ্রুত ঝালাই
Variable, type, condition, loop, f-string, match
তুমি Python এর basic জানো, আর Dart এ দুই বছর কাজ করেছো। তাই এই অধ্যায়ে একদম শুরু থেকে শেখাবো না। বরং দ্রুত সব ঝালিয়ে নেবো, Dart এর সাথে তুলনা করে দেখাবো কোথায় মিল আর কোথায় অমিল, আর সেই জায়গাগুলোয় বেশি সময় দেবো যেখানে Dart থেকে আসা মানুষ সাধারণত ভুল করে।
প্রতিটা উদাহরণ নিজে type করে চালাবে। শুধু পড়লে হবে না।
#Dart আর Python: এক নজরে পার্থক্য
| বিষয় | Dart | Python |
|---|---|---|
| Block | { } দিয়ে |
Indentation (৪ space) দিয়ে |
| লাইনের শেষ | ; লাগে |
কিছু লাগে না |
| Variable | var, final, int x = 5 |
শুধু x = 5 |
| Type | Compile এর সময় check | চালানোর সময়, তবে type hint দিয়ে আগে check করা যায় |
| null | null |
None |
| true/false | true, false |
True, False (বড় হাতের) |
| এবং/অথবা/না | &&, ||, ! |
and, or, not |
| String জোড়া | 'Hi $name' |
f"Hi {name}" |
| List | List<int> |
list[int] |
| Map | Map<String, int> |
dict[str, int] |
| Function | int add(int a, int b) {...} |
def add(a: int, b: int) -> int: |
| Comment | // |
# |
#Variable আর type
Python এ variable হলো একটা নাম, যেটা কোনো value কে নির্দেশ করে। Type লিখতে হয় না, value দেখেই Python বুঝে নেয়।
name = "Rahim" # str
age = 26 # int
height = 5.7 # float
is_developer = True # bool
salary = None # None, মানে "কিছু নেই"
print(type(age)) # <class 'int'>পরে আমরা type hint ব্যবহার করবো, যা Dart এর মতো নিরাপত্তা দেয়:
name: str = "Rahim"
age: int = 26Type hint Python নিজে চালানোর সময় check করে না, কিন্তু VS Code (Pylance) আর type checker ভুল ধরিয়ে দেয়। Type Hint অধ্যায়ে বিস্তারিত আছে।
#সংখ্যা নিয়ে কিছু বিশেষ কথা
print(7 / 2) # 3.5 → সবসময় float দেয়
print(7 // 2) # 3 → পূর্ণসংখ্যার ভাগ (Dart এর ~/)
print(7 % 2) # 1 → ভাগশেষ
print(2 ** 10) # 1024 → ঘাত (power)
big = 10 ** 30 # Python এর int যত বড় দরকার তত বড় হতে পারে
print(big)
print(0.1 + 0.2) # 0.30000000000000004 😮#String
name = "Karim"
city = 'Dhaka' # ' আর " একই
bio = """একাধিক লাইনের
লেখা এভাবে লেখা যায়"""
# f-string: Dart এর '$name' এর মতো
print(f"{name} থাকে {city} তে")
print(f"২ + ৩ = {2 + 3}")
price = 1234567.891
print(f"দাম: {price:,.2f} টাকা") # দাম: 1,234,567.89 টাকা
# দরকারি method
email = " Karim@Example.COM "
print(email.strip().lower()) # karim@example.com
print("a,b,c".split(",")) # ['a', 'b', 'c']
print("-".join(["2026", "10", "29"])) # 2026-10-29
print("hello".replace("l", "L")) # heLLo
print("python".startswith("py")) # True
print("FastAPI" in "I love FastAPI") # True#Slicing: Python এর শক্তিশালী একটা জিনিস
text = "Bangladesh"
# 0123456789
print(text[0]) # B
print(text[-1]) # h → শেষ থেকে গোনা
print(text[0:6]) # Bangla → ০ থেকে ৬ এর আগ পর্যন্ত
print(text[6:]) # desh
print(text[:3]) # Ban
print(text[::-1]) # hsedalgnaB → উল্টোSlicing list এও একইভাবে কাজ করে। মনে রাখো: [start:end] এ end অন্তর্ভুক্ত না।
String immutable, মানে বদলানো যায় না। text.upper() নতুন string দেয়, পুরনোটা বদলায় না।
#True/False এর হিসাব (truthiness)
Python এ শুধু True/False না, যেকোনো value কে condition হিসেবে ব্যবহার করা যায়। এই value গুলো False ধরা হয়:
False, None, 0, 0.0, "", [], {}, set()বাকি সব True। তাই Python এ এভাবে লেখা স্বাভাবিক:
items = []
if not items:
print("Cart খালি")
name = ""
display = name or "Guest" # name খালি হলে "Guest"
print(display) # Guest#== বনাম is
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True → value সমান
print(a is b) # False → একই object না
x = None
print(x is None) # None এর সাথে তুলনায় সবসময় is ব্যবহার করোনিয়ম: value তুলনায় ==, আর None, True, False এর সাথে তুলনায় is।
#Condition
score = 78
if score >= 80:
grade = "A+"
elif score >= 70:
grade = "A"
elif score >= 60:
grade = "A-"
else:
grade = "F"
# এক লাইনে (Dart এর ternary condition ? a : b এর মতো)
status = "পাস" if score >= 33 else "ফেল"
# কয়েকটা condition একসাথে
age = 25
if 18 <= age < 60: # Python এ এভাবে chain করা যায়
print("কাজের বয়স")#Loop
# range দিয়ে
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 10, 2): # 2, 4, 6, 8
print(i)
# list এর উপর
fruits = ["আম", "জাম", "কাঁঠাল"]
for fruit in fruits:
print(fruit)
# index সহ দরকার হলে enumerate (range(len(...)) লিখবে না)
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
# দুইটা list একসাথে
names = ["Rahim", "Karim"]
scores = [85, 92]
for name, score in zip(names, scores):
print(f"{name}: {score}")
# while
balance = 1000
while balance > 0:
balance -= 300
print(f"বাকি: {balance}")break loop থামায়, continue পরের ঘুরে চলে যায়। Dart এর মতোই।
#for ... else: Python এর একটা অদ্ভুত কিন্তু কাজের জিনিস
users = ["ali", "sara", "rafi"]
target = "nila"
for u in users:
if u == target:
print("পাওয়া গেছে")
break
else:
# loop break ছাড়া শেষ হলে এটা চলে
print("পাওয়া যায়নি")#match: Dart এর switch এর চেয়েও শক্তিশালী
def handle(status_code: int) -> str:
match status_code:
case 200 | 201:
return "সফল"
case 401:
return "আবার login করো"
case 404:
return "পাওয়া যায়নি"
case code if code >= 500:
return "Server এ সমস্যা"
case _:
return "অজানা"
print(handle(503)) # Server এ সমস্যাmatch data এর গঠন (structure) দেখেও মেলাতে পারে:
event = {"type": "order", "id": 42, "amount": 550}
match event:
case {"type": "order", "id": order_id}:
print(f"নতুন order #{order_id}")
case {"type": "refund", "id": order_id}:
print(f"Refund #{order_id}")#User থেকে input আর type বদল
raw = input("তোমার বয়স? ") # input সবসময় str দেয়
age = int(raw) # str → int
print(f"১০ বছর পর বয়স হবে {age + 10}")
print(int("42"), float("3.5"), str(100), bool("")) # 42 3.5 100 Falseint("abc") দিলে ValueError হবে। এটা কীভাবে সামলাতে হয় সেটা Error Handling অধ্যায়ে দেখবো।
#Indentation: সবচেয়ে বড় পার্থক্য
Python এ { } নেই। কোন লাইন কোন block এর ভেতরে, সেটা বোঝায় indentation। নিয়ম হলো ৪টা space।
for i in range(3):
print("loop এর ভেতরে")
if i == 1:
print("if এর ভেতরে")
print("loop এর বাইরে")VS Code এ Ruff format চালু থাকলে এটা নিয়ে চিন্তা করতে হবে না।
#অনুশীলন
#নিজেকে যাচাই করো
`7 / 2` আর `7 // 2` এর output কী?
7 / 2 দেয় 3.5 (সবসময় float)। 7 // 2 দেয় 3 (পূর্ণসংখ্যার ভাগ)।
নিচের code কী print করবে? `count = 0` তারপর `print("আছে" if count else "নেই")`
"নেই"। কারণ 0 falsy। যদি বোঝাতে চাও count এর value দেওয়া আছে কিনা, তাহলে count is not None লিখতে হবে।
`text = "Python"` হলে `text[1:4]` আর `text[-2:]` কী দেবে?
text[1:4] দেবে "yth" (index 1, 2, 3)। text[-2:] দেবে "on" (শেষের দুইটা)।
Loop এ index দরকার হলে `range(len(items))` এর বদলে কী ব্যবহার করবে?
enumerate(items)। এটা (index, value) জোড়া দেয়, code পড়তে সহজ হয় আর ভুলের সুযোগ কমে।
টাকার হিসাবে float কেন বিপজ্জনক, আর বিকল্প কী?
Float binary তে আনুমানিকভাবে রাখা হয়, তাই 0.1 + 0.2 ঠিক 0.3 হয় না। অনেক লেনদেনে এই ছোট ভুল জমে বড় হয়। বিকল্প: পয়সায় integer হিসেবে রাখা, অথবা decimal.Decimal ব্যবহার করা।
চিহ্ন দিলে sidebar আর রোডম্যাপে এই অধ্যায়ের station ভরে যাবে।