অধ্যায় 2 · Python-এর মৌলিক বিষয়
সিদ্ধান্ত ও লুপ
- পৃষ্ঠা 6 / 20
- 4 মিনিট পড়া
এ পর্যন্ত প্রতিটা প্রোগ্রাম ওপর থেকে নিচে একবার চলেছে। আসল প্রোগ্রাম সিদ্ধান্ত নেয় (এই রিভিউটা কি পজিটিভ?) আর কাজ পুনরাবৃত্তি করে (১০,০০০ ডকুমেন্টের প্রতিটার জন্য এটা করো)। এই দুই ধারণা — কন্ডিশন আর লুপ — থেকেই প্রোগ্রামিং তার আসল শক্তি পায়।
সিদ্ধান্ত নেওয়া: if, elif, else
score = 0.72
if score >= 0.8:
label = "positive"
elif score >= 0.4:
label = "neutral"
else:
label = "negative"
print(label)neutralPython ওপর থেকে শর্তগুলো যাচাই করে আর প্রথম যে শর্তটা True, তার নিচের অংশটা চালায়, বাকিগুলো বাদ দেয়। elif ("else if") আর else ঐচ্ছিক।
ইনডেন্টেশনই নিয়ম
কোন লাইনগুলো if-এর অংশ, Python তা বোঝে ইনডেন্টেশন দিয়ে — লাইনের শুরুর ৪টা স্পেস। অন্য ভাষা ব্যবহার করে { } বন্ধনী; Python ব্যবহার করে ফাঁকা জায়গা, আর এ ব্যাপারে সে কড়া:
tokens = 1200
if tokens > 1000:
print("Too long")
print("Shortening the prompt...")
print("Done") # ইনডেন্ট নেই: যেকোনো ক্ষেত্রেই চলবেToo long
Shortening the prompt...
Doneসবসময় ৪টা স্পেস দিয়ে ইনডেন্ট করুন (Tab চাপলে এডিটর নিজেই করে দেয়)। ট্যাব আর স্পেস মেশালে, বা এক জায়গায় ৩ আর আরেক জায়গায় ৪ স্পেস দিলে IndentationError আসে।
পুনরাবৃত্তি: for লুপ
for লুপ একটা কালেকশনের প্রতিটা আইটেমের জন্য তার অংশটা একবার করে চালায়। তিনটা সহায়ক জিনিস একে আরও কাজের করে তোলে:
range(n)দেয় 0 থেকে n−1 পর্যন্ত সংখ্যা — "এটা n বার করো"-র জন্য।enumerate()প্রতিটা আইটেমের সাথে তার অবস্থানও দেয়।zip()দুটো লিস্ট পাশাপাশি একসাথে ঘোরে।
documents = ["intro.txt", "pricing.txt", "faq.txt"]
for doc in documents:
print("Reading", doc)
for i in range(3): # 0, 1, 2
print("Attempt", i + 1)
for number, doc in enumerate(documents, start=1):
print(number, doc)Reading intro.txt
Reading pricing.txt
Reading faq.txt
Attempt 1
Attempt 2
Attempt 3
1 intro.txt
2 pricing.txt
3 faq.txtquestions = ["2 + 2?", "Capital of Bangladesh?"]
answers = ["4", "Dhaka"]
for q, a in zip(questions, answers):
print(f"Q: {q} A: {a}")Q: 2 + 2? A: 4
Q: Capital of Bangladesh? A: Dhakaজমানোর প্যাটার্ন (accumulator)
ডেটার কাজে সবচেয়ে বেশি ব্যবহৃত লুপ: একটা খালি ফলাফল দিয়ে শুরু, তারপর আইটেম ধরে ধরে সেটা গড়ে তোলা। এখানে আমরা গড় বের করছি আর একটা সীমা পার করা স্কোরগুলো জমাচ্ছি:
scores = [0.91, 0.45, 0.78, 0.12, 0.66]
total = 0
passed = []
for s in scores:
total += s # total = total + s-এর মতোই
if s >= 0.5:
passed.append(s)
print("Average:", round(total / len(scores), 2))
print("Passed:", passed)Average: 0.58
Passed: [0.91, 0.78, 0.66]কিছু না ঘটা পর্যন্ত পুনরাবৃত্তি: while
while লুপ ততক্ষণ চলে, যতক্ষণ তার শর্ত True থাকে। কয় রাউন্ড লাগবে আগে থেকে না জানলে এটা ব্যবহার করুন — যেমন মাঝে মাঝে ব্যর্থ হওয়া API কল আবার চেষ্টা করা:
attempt = 1
max_attempts = 3
success = False
while attempt <= max_attempts and not success:
print("Calling the API, attempt", attempt)
success = attempt == 3 # ধরে নিই তৃতীয়বার কাজ করবে
attempt += 1
print("Success!" if success else "Gave up.")Calling the API, attempt 1
Calling the API, attempt 2
Calling the API, attempt 3
Success!শেষ লাইনে আছে এক লাইনের শর্তযুক্ত এক্সপ্রেশন: A if condition else B।
প্রতিটা
whileলুপের ভেতরে এমন কিছু থাকতেই হবে, যা একসময় শর্তটাকে False করে দেয়।attempt += 1ভুলে গেলে লুপ চিরকাল চলবে — থামাতে Ctrl+C চাপুন।
break আর continue
words = ["hello", "world", "STOP", "ignored"]
for w in words:
if w == "STOP":
break # এখনই লুপ থেকে বের হও
print(w)
for n in range(1, 8):
if n % 2 == 0:
continue # এই রাউন্ডের বাকিটা বাদ
print(n, end=" ")
print()hello
world
1 3 5 7 break পুরো লুপ থেকে বেরিয়ে যায়; continue সরাসরি পরের রাউন্ডে চলে যায়। (print(n, end=" ") নতুন লাইনের বদলে একটা স্পেস প্রিন্ট করে।)
match: অনেক বিকল্পের মধ্যে বাছাই
একটা মানকে অনেকগুলো সম্ভাবনার সাথে মেলাতে হলে লম্বা if/elif-এর চেয়ে match (Python 3.10+) বেশি পরিষ্কার। | মানে "অথবা", আর case _ বাকি সবকিছু ধরে:
command = "summarise"
match command:
case "translate":
print("Translating...")
case "summarise" | "summarize":
print("Summarising...")
case _:
print("Unknown command")Summarising...নিজে চেষ্টা করুন
- ব্যবহারকারীর কাছে টোকেনের সংখ্যা জানতে চান। ৫০০-এর কম হলে "short", ২,০০০-এর কম হলে "medium", আর বাকি সব ক্ষেত্রে "long" প্রিন্ট করুন।
- রিভিউয়ের একটা লিস্ট থেকে গুনুন কয়টায় "bad" শব্দটা আছে (ইঙ্গিত:
"bad" in text.lower())। - একটা অনুমানের খেলা লিখুন: গোপন সংখ্যা 7; ব্যবহারকারী না মেলানো পর্যন্ত জিজ্ঞেস করতে থাকুন, তারপর প্রিন্ট করুন কয়বারে মিলল।