True আর False — প্রশ্ন করা শেখা
তুলনার অপারেটর, and / or / not, শিকল-তুলনা, আর কোন মানগুলো পাইথনের চোখে মিথ্যা — শর্ত লেখার আগে যে ভিতটা লাগে।
- 1সমস্যা
- 2বোঝা
- 3উদাহরণ
- 4অনুমান
- 5নিজে করা
- 6কঠিন করা
যে সমস্যাটা আমরা সমাধান করছি
একটা প্রোগ্রামকে সিদ্ধান্ত নিতে হবে: এই অর্ডারে ছাড় দেওয়া যাবে কি? পাসওয়ার্ডটা যথেষ্ট লম্বা কি? স্টকে মাল আছে কি?
সিদ্ধান্তের কোডটা পরের মিশনে (if)। কিন্তু তার আগে দরকার সেই জিনিসটা যার উপর সিদ্ধান্ত দাঁড়াবে — একটা প্রশ্ন, যার উত্তর হ্যাঁ বা না। পাইথনে এই উত্তরটার নাম True আর False, আর টাইপটার নাম bool।
আজ আমরা শুধু প্রশ্ন করা শিখব, সিদ্ধান্ত নেওয়া নয়। ধাপটা আলাদা রাখার কারণ আছে: if লিখতে গিয়ে যে ভুলগুলো হয়, তার প্রায় সবই আসলে প্রশ্নটা ভুল লেখা থেকে হয়, if-এর গঠন থেকে নয়।
এই মিশন শেষে আপনি পারবেন
- ছয়টি তুলনার অপারেটর ব্যবহার করতে
=আর==আলাদা করে চিনতেand,or,notদিয়ে ছোট প্রশ্ন জুড়ে বড় প্রশ্ন বানাতে18 <= age <= 60এভাবে শিকল-তুলনা লিখতে- বলতে কোন মানগুলো পাইথনের চোখে মিথ্যা, এমনকি
Falseনা হয়েও
আগে যা জানা লাগবে: ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়া।
ছয়টি তুলনা
age = 22
print(age == 22)
print(age != 22)
print(age > 18)
print(age < 18)
print(age >= 22)
print(age <= 21)True
False
True
False
True
Falseপ্রতিটি তুলনার ফলাফল একটা মান — True বা False। অর্থাৎ তুলনাকে ভেরিয়েবলে রাখাও যায়:
age = 22
is_adult = age >= 18
print(is_adult)
print(type(is_adult))True
<class 'bool'>এভাবে নাম দিয়ে রাখলে কোড পড়তে অনেক সহজ হয় — is_adult পড়েই বোঝা যায় কী যাচাই হচ্ছে, যেখানে age >= 18 দেখে পাঠককে একবার ভাবতে হয়।
= আর == — এক চিহ্ন কম, পুরো অর্থ আলাদা
total = 100 # an instruction: put 100 into total
print(total == 100) # a question: is total 100?True=রাখে (assignment)==জিজ্ঞেস করে (comparison)
শর্তের জায়গায় ভুল করে = লিখলে পাইথন ৩ সাফ ত্রুটি দেয়, আর বার্তাটাও সহায়ক:
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?ভালো খবর — এই ভুলটা নীরবে থাকে না, ধরা পড়ে যায়।
লেখার তুলনা
print("rafi" == "rafi")
print("Rafi" == "rafi")
print("apple" < "banana")
print(len("password123") >= 8)True
False
True
Trueদুটো ব্যাপার লক্ষ্য করুন:
ছোট-বড় হাতের অক্ষর আলাদা। "Rafi" আর "rafi" সমান নয়। ব্যবহারকারীর দেওয়া লেখা মেলানোর সময় তাই আগেই .lower() চালিয়ে নিতে হয় — নাহলে যিনি নাম বড় হাতের অক্ষরে লিখেছেন, তিনি বাদ পড়ে যাবেন:
typed = " RAFI "
print(typed == "rafi")
print(typed.strip().lower() == "rafi")False
Trueলেখাতেও < কাজ করে, আর সেটা অভিধানের ক্রম ধরে চলে — তাই "apple" < "banana"। নামের তালিকা সাজানোর সময় এটাই ভিত্তি।
and, or, not
ছোট প্রশ্নগুলো জুড়ে বড় প্রশ্ন বানানো হয় এই তিনটি শব্দে:
age = 22
has_id = True
print(age >= 18 and has_id)
print(age >= 60 or has_id)
print(not has_id)True
True
Falseand— দুটোই সত্য হলে সত্যor— অন্তত একটা সত্য হলে সত্যnot— উল্টে দেয়
পুরো ছবিটা একবারে:
print(True and True)
print(True and False)
print(False and False)
print(True or False)
print(False or False)True
False
False
True
Falseorমানে "এক বা একাধিক", "ঠিক একটা" নয়। বাংলায় "চা না কফি?" বললে সাধারণত একটাই বোঝায়। পাইথনেরor-এ দুটোই সত্য হলেও ফলাফলTrue। এটা মনে না রাখলে শর্ত লেখার সময় অবাক হতে হয়।
not সব সময় তার ঠিক পরের অংশটার উপর কাজ করে, আর সে সবার আগে চলে। ক্রমটা: not আগে, তারপর and, সবার শেষে or।
print(True or False and False)
print((True or False) and False)True
Falseপ্রথম লাইনে and আগে চলেছে, তাই পাইথন পড়েছে True or (False and False), অর্থাৎ True or False — যা True। দ্বিতীয় লাইনে বন্ধনী ক্রমটা বদলে দিয়েছে। সন্দেহ হলে বন্ধনী দিন — গণিতের বেলায় যা সত্য, এখানেও তাই।
শিকল-তুলনা
দুই সীমার মধ্যে আছে কি না দেখতে পাইথনে গণিতের মতোই লেখা যায়:
marks = 72
print(0 <= marks <= 100)
print(marks > 60 and marks < 80)
print(60 < marks < 80)True
True
Trueদ্বিতীয় আর তৃতীয় লাইন একই কথা বলছে, কিন্তু তৃতীয়টা পড়তে সহজ। অনেক ভাষায় এভাবে লেখা যায় না; পাইথনে যায়, আর এটা ব্যবহার করাই উচিত।
কোন মানগুলো পাইথনের চোখে মিথ্যা
শুধু False নয় — কয়েকটা সাধারণ মানও পাইথন মিথ্যা হিসেবে ধরে:
print(bool(0))
print(bool(1))
print(bool(-5))
print(bool(""))
print(bool("hello"))
print(bool("0"))
print(bool("False"))False
True
True
False
True
True
Trueনিয়মটা এক লাইনে: শূন্য আর ফাঁকা জিনিস মিথ্যা, বাকি সব সত্য। তাই 0 মিথ্যা, ফাঁকা লেখা "" মিথ্যা; কিন্তু -5 সত্য (শূন্য নয়), আর "0" ও "False" সত্য — কারণ ওগুলো ফাঁকা নয়, ওগুলোর ভেতরে অক্ষর আছে।
শেষ দুটো লাইনই আসল ফাঁদ। input() থেকে আসা সবকিছু লেখা, তাই ব্যবহারকারী 0 লিখলেও সেটা "0" — আর পাইথনের কাছে সত্য। সংখ্যার তুলনা করতে চাইলে আগে int() করে নিতে হবে।
এই "ফাঁকা মানে মিথ্যা" নিয়মটার একটা কাজের দিকও আছে — ব্যবহারকারী কিছু না লিখে এন্টার চাপলে সেটা ধরা যায়:
name = input("Name: ").strip()
print("Name was given:", bool(name))Name:
Name was given: Falseএকটা সম্পূর্ণ উদাহরণ
eligibility.py:
# Check a discount rule without deciding anything yet
age = int(input("Age : "))
years_member = int(input("Years a member : "))
order_total = float(input("Order total : "))
is_adult = age >= 18
is_senior = age >= 60
is_loyal = years_member >= 2
is_large_order = order_total >= 1000
# The rule: adults who are either long-standing members or spending a lot
gets_discount = is_adult and (is_loyal or is_large_order)
print()
print(f"Adult : {is_adult}")
print(f"Senior : {is_senior}")
print(f"Loyal member : {is_loyal}")
print(f"Large order : {is_large_order}")
print(f"Gets discount : {gets_discount}")Age : 34
Years a member : 1
Order total : 1500
Adult : True
Senior : False
Loyal member : False
Large order : True
Gets discount : Trueলক্ষ্য করুন প্রতিটি শর্তকে আলাদা নাম দিয়ে রাখা হয়েছে, আর তারপর সেগুলো জুড়ে নিয়মটা লেখা হয়েছে। পুরো শর্তটা এক লাইনে লিখলে — age >= 18 and (years_member >= 2 or order_total >= 1000) — কোডটা চলত ঠিকই, কিন্তু ছয় মাস পরে ওটা পড়ে নিয়মটা বোঝা কঠিন হত। বন্ধনীটাও জরুরি: ওটা না দিলে and আগে চলে যেত আর নিয়মটাই বদলে যেত।
কিছু ভাঙা অবস্থা ও তার সমাধান
SyntaxError: invalid syntax. Maybe you meant '==' ... তুলনার জায়গায় = লেখা হয়েছে। == দিন।
সমান হওয়ার কথা, কিন্তু False আসছে তিনটি জিনিস দেখুন: বাড়তি স্পেস (.strip()), ছোট-বড় হাতের অক্ষর (.lower()), আর ধরন — "22" == 22 সব সময় False, কারণ লেখা আর সংখ্যা কখনো সমান হয় না।
TypeError: '<' not supported between instances of 'str' and 'int' লেখার সাথে সংখ্যা তুলনা করতে চেয়েছেন, সম্ভবত input()-এর ফলাফল বদলাতে ভুলে গিয়ে। int() দিয়ে নিন।
দুটো দশমিক সংখ্যা == দিয়ে মিলছে না এটা প্রত্যাশিত — সংখ্যার মিশনের দশমিকের ফাঁদটা মনে করুন। round() করে তুলনা করুন।
শর্তটা যা বলছে তা করছে না and/or-এর ক্রম দেখুন। not আগে, তারপর and, শেষে or। বন্ধনী দিয়ে নিজের উদ্দেশ্যটা স্পষ্ট করে লিখুন।
ধাপ ৪ / ৬ — অনুমান
যাচাই করুন
তিনটি লাইনের আউটপুট কী?
print(5 > 3 and 2 > 4)
print(5 > 3 or 2 > 4)
print(not 5 > 3)- AFalse True False
- BTrue True False
- CFalse False True
- DFalse True True
তিনটি মানের সত্য-মিথ্যা রূপ কী?
print(bool("False"))
print(bool(""))
print(bool(0))- ATrue False False
- BFalse False False
- CFalse True False
- DTrue True False
ব্যবহারকারী Yes লিখেছেন (বড় হাতের Y, শেষে একটা স্পেস), আর প্রোগ্রাম বলছে Continuing: False। কেন, আর সবচেয়ে ভালো সমাধান কী?
answer = input("Type yes to continue: ")
print("Continuing:", answer == "yes")- Aতুলনায় বাড়তি স্পেস আর বড় হাতের অক্ষর দুটোই গণ্য হয় — `answer.strip().lower() == "yes"` লিখতে হবে
- B`==`-এর বদলে `=` লিখতে হবে
- C`input()` কখনো `"yes"`-এর সমান হতে পারে না, তাই `in` ব্যবহার করতে হবে
- D`answer`-কে আগে `bool()` দিয়ে বদলে নিতে হবে
উত্তর দিতে অ্যাকাউন্ট লাগবে
উত্তর মিলিয়ে দেখতে সাইন ইন করুন
প্রশ্নগুলো উপরে আছে, আর মাথায় মাথায় উত্তর ভেবে নেওয়াই আসল কাজ। সঠিক উত্তর, ব্যাখ্যা আর তিন ধাপের ইঙ্গিত দেখতে সাইন ইন করুন।
নিজে করুন
password_check.py নামে একটা ফাইল লিখুন, যেটি একটা পাসওয়ার্ড নিয়ে চারটি প্রশ্নের উত্তর True/False আকারে ছাপে:
- দৈর্ঘ্য অন্তত ৮
- দৈর্ঘ্য ৮ থেকে ২০-এর মধ্যে (শিকল-তুলনা দিয়ে লিখুন)
"password"শব্দটা এর ভেতরে নেই (notআরinদুটোই লাগবে, আর তুলনার আগে ছোট হাতের করে নিন)- উপরের তিনটিই একসাথে সত্য কি না
তারপর অন্তত চারটি ভিন্ন পাসওয়ার্ড দিয়ে চালান: একটা খুব ছোট, একটা খুব বড়, একটায় Password শব্দটা বড় হাতের অক্ষরে, আর একটা যেটা সব শর্ত মানে। চারটিতেই উত্তর ঠিক আসছে কি না মিলিয়ে দেখুন — বিশেষ করে তৃতীয়টি, কারণ ওখানেই ছোট-বড় হাতের অক্ষরের ফাঁদটা লুকিয়ে আছে।
এই মিশনে আরও কিছু আছে
উপরে যা পড়েছেন সেটাই সম্পূর্ণ মিশন — কিছু কেটে রাখা হয়নি। প্রো এর সাথে যোগ করে:
- ভেতরে আসলে কী ঘটে — পাইথন কীভাবে এটা চালায়
- অনুশীলনীর সম্পূর্ণ সমাধান, ধাপে ধাপে ব্যাখ্যাসহ
- কঠিন অতিরিক্ত অনুশীলনী
- এই বিষয়ে ইন্টারভিউতে যা জিজ্ঞেস করা হয়, আর তার আদর্শ উত্তর
ধাপ ৬ / ৬
কঠিন করা — অধ্যায়ের কুইজ
সহজ থেকে কঠিন — দশটি প্রশ্ন, শেষেরগুলো ইচ্ছে করেই কঠিন।
সাইন ইন করে কুইজ দিন