ভেরিয়েবল আর টাইপ — প্রোগ্রাম কীভাবে মনে রাখে
ভেরিয়েবলে মান রাখা, নাম দেওয়ার নিয়ম, আর চারটি মৌলিক টাইপ — int, float, str, bool। সাথে সেই ত্রুটি যেটা শুরুর দিকে সবচেয়ে বেশি আসে।
- 1সমস্যা
- 2বোঝা
- 3উদাহরণ
- 4অনুমান
- 5নিজে করা
- 6কঠিন করা
যে সমস্যাটা আমরা সমাধান করছি
এখন পর্যন্ত আমাদের প্রোগ্রামগুলো কিছুই মনে রাখতে পারত না। যা ছাপা হয়ে গেছে, চলে গেছে।
কিন্তু সত্যিকারের কাজ এভাবে হয় না। একটা বিলের প্রোগ্রামে দাম একবার হিসাব করে সেটা তিন জায়গায় লাগে। একটা রিপোর্টে মোট সংখ্যাটা আগে বের করে পরে ব্যবহার করতে হয়। প্রোগ্রামকে মনে রাখতে হয়।
আর সাথে দ্বিতীয় সমস্যাটা — আগের মিশনে দেখেছেন "2" + "3" দিয়েছিল 23, কিন্তু 2 + 3 দিয়েছিল 5। একই চিহ্ন, দুই রকম আচরণ। কারণ পাইথনের চোখে ওই দুটো জিনিসের ধরন আলাদা। এই ধরনটাকেই বলে টাইপ, আর শুরুর দিকের ত্রুটির সবচেয়ে বড় অংশ এখান থেকেই আসে।
এই মিশন শেষে আপনি পারবেন
- ভেরিয়েবলে মান রাখতে ও পরে সেটা বদলাতে
- এমন নাম দিতে যেটা পাইথন মানবে, আর যেটা পড়ে মানুষ বুঝবে
- চারটি মৌলিক টাইপ চিনতে:
int,float,str,bool type()দিয়ে যেকোনো মানের ধরন দেখে নিতেTypeErrorপড়ে বুঝতে সমস্যাটা ঠিক কোথায়
আগে যা জানা লাগবে: print দিয়ে দেখা, কমেন্ট দিয়ে বোঝানো।
ভেরিয়েবল হলো একটা নাম
city_count = 4এই লাইনটা পড়তে হবে ডান থেকে বামে: 4 মানটি তৈরি হলো, আর তার গায়ে city_count নামের একটা লেবেল লাগানো হলো। এখন থেকে city_count লিখলেই পাইথন ওই মানটা এনে দেবে।
city_count = 4
print("Cities:", city_count)
print("Double:", city_count * 2)Cities: 4
Double: 8=মানে সমান নয়। গণিতেx = 4একটা দাবি — x এবং 4 সমান। পাইথনে=একটা আদেশ: "এই মানটা ওই নামে রাখো।" তাইtotal = total + 5লাইনটা গণিতে অসম্ভব শোনালেও পাইথনে পুরোপুরি স্বাভাবিক — মানে হলো, "total-এর এখনকার মানের সাথে ৫ যোগ করে ফলটা আবারtotal-এ রাখো।" সমান কিনা সেটা যাচাই করার আলাদা চিহ্ন আছে,==, যেটা আমরা পরে দেখব।
মান বদলানো
একটা ভেরিয়েবলে নতুন মান বসালে পুরনোটা আর থাকে না:
stock = 20
print("Before:", stock)
stock = stock - 3
print("After:", stock)Before: 20
After: 17একটা জিনিস মনে রাখা দরকার — মান কপি হয়ে যায়, লেবেল দুটো জোড়া লেগে থাকে না:
a = 10
b = a
a = 99
print(a, b)99 10b = a লাইনে b পেয়েছিল a-এর তখনকার মান, অর্থাৎ 10। পরে a বদলালেও b বদলায় না — b কখনো a-কে দেখছিল না, সে একটা মান পেয়েছিল।
নাম দেওয়ার নিয়ম
পাইথন যা মানবে না:
- সংখ্যা দিয়ে শুরু:
2nd_priceচলবে না,price_2চলবে - মাঝে ড্যাশ:
total-priceচলবে না, পাইথন ওটাকে বিয়োগ ভাবে - মাঝে স্পেস:
total priceচলবে না - পাইথনের সংরক্ষিত শব্দ:
class,for,if,import,return,None— এগুলো নাম হিসেবে ব্যবহার করা যায় না
যা মানবে, কিন্তু করা উচিত নয়:
x1 = 4500 # clear today, meaningless in three weeks
Total_Price = 4500 # legal Python, but not the Python convention
l = 4500 # lowercase L and the digit one look almost identicalপেশাদার পাইথনের রীতি হলো snake_case — ছোট হাতের অক্ষর, শব্দের মাঝে আন্ডারস্কোর:
total_price = 4500
customer_name = "Rafi"
items_in_cart = 3নাম নিয়ে সময় নষ্ট মনে হতে পারে, কিন্তু কোড এক-দুইবার লেখা হয় আর বিশবার পড়া হয়। যে নামটা পড়েই বোঝা যায়, সেটা একটা কমেন্টের সমান কাজ করে।
চারটি মৌলিক টাইপ
items = 7 # int — a whole number
price = 249.50 # float — a number with a decimal point
name = "Rafi" # str — text, inside quotes
is_paid = True # bool — only True or False
print(type(items))
print(type(price))
print(type(name))
print(type(is_paid))<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>type() আপনার সন্দেহ মেটানোর যন্ত্র। কোনো ভেরিয়েবল অদ্ভুত আচরণ করলে প্রথম কাজ — তার টাইপটা ছেপে দেখুন। বেশিরভাগ সময় উত্তরটা ওখানেই পাওয়া যায়।
দুটো ছোট কিন্তু জরুরি কথা:
True আর False বড় হাতের অক্ষরে শুরু। true লিখলে পাইথন সেটাকে একটা ভেরিয়েবলের নাম ভাববে এবং বলবে সে ওই নাম চেনে না।
"7" আর 7 এক জিনিস নয়। প্রথমটা লেখা, দ্বিতীয়টা সংখ্যা। দেখতে একই রকম, কিন্তু পাইথনের কাছে সম্পূর্ণ আলাদা:
a = 7
b = "7"
print(type(a), type(b))
print(a * 3)
print(b * 3)<class 'int'> <class 'str'>
21
777সেই ত্রুটি, যেটা সবার আসে
age = "22"
print(age + 1)Traceback (most recent call last):
File "D:\python-lab\lesson-04\demo.py", line 2, in <module>
print(age + 1)
~~~~^~~
TypeError: can only concatenate str (not "int") to strবার্তাটা ভয় দেখানোর মতো দেখতে, কিন্তু এটা আসলে পরিষ্কার করে বলে দিচ্ছে: str-এর সাথে শুধু str জোড়া লাগানো যায়, int নয়। অর্থাৎ পাইথন বুঝতে পারছে না আপনি যোগ করতে চান নাকি জোড়া লাগাতে — তাই সে আন্দাজ করেনি, থেমে গেছে।
ত্রুটির বার্তা পড়ুন, নিচের লাইন থেকে উপরের দিকে। শেষ লাইনটা বলে কী সমস্যা, তার উপরের লাইনটা বলে কোথায়। শুরুর দিকে অনেকে ত্রুটি দেখলেই ঘাবড়ে গিয়ে পুরোটা এড়িয়ে যায়; কিন্তু পাইথনের ত্রুটি বার্তা আসলে সবচেয়ে সাহায্যকারী লেখা যা আপনি স্ক্রিনে পাবেন।
সমাধান — সংখ্যাটাকে সংখ্যা বানিয়ে নিন:
age = "22"
print(int(age) + 1)23int() লেখাকে পূর্ণ সংখ্যায় বদলে দেয়। এটা কখন কাজে লাগে আর কখন ভেঙে পড়ে, সেটা input() নিয়ে মিশনে বিস্তারিত আসবে — কারণ ওখানে এই সমস্যাটা প্রতিবার আসে।
একটা সম্পূর্ণ উদাহরণ
invoice.py:
# Invoice for a single order, all figures in one place
customer_name = "Rafi"
unit_price = 249.50
quantity = 3
is_member = True
subtotal = unit_price * quantity
discount = 50.0
total = subtotal - discount
print("Customer :", customer_name)
print("Quantity :", quantity)
print("Subtotal :", subtotal)
print("Discount :", discount)
print("Total :", total)
print("Member :", is_member)Customer : Rafi
Quantity : 3
Subtotal : 748.5
Discount : 50.0
Total : 698.5
Member : Trueএখানে আসল সুবিধাটা লক্ষ্য করুন: দাম বদলাতে হলে শুধু unit_price লাইনটা বদলাবেন, আর নিচের সব হিসাব নিজে থেকে ঠিক হয়ে যাবে। সংখ্যাগুলো সরাসরি print-এর ভেতরে লিখে ফেললে প্রতিবার প্রতিটি জায়গা খুঁজে বদলাতে হতো — আর একটা জায়গা বাদ পড়লেই রিপোর্ট ভুল।
কিছু ভাঙা অবস্থা ও তার সমাধান
NameError: name 'total' is not defined যে নামটা ব্যবহার করছেন, সেটায় এখনো কোনো মান রাখা হয়নি — নয়তো বানানে ভুল আছে। পাইথন total আর totl কে দুটো আলাদা নাম হিসেবেই দেখে। খেয়াল রাখুন, ছোট-বড় হাতের অক্ষরও আলাদা: Total আর total এক নয়।
TypeError: can only concatenate str (not "int") to str লেখার সাথে সংখ্যা জোড়া লাগাতে চেয়েছেন। হয় int() দিয়ে লেখাকে সংখ্যা বানান, নয়তো print("Age:", age) এভাবে কমা দিয়ে দিন — কমা দিলে print নিজেই সব ধরন সামলে নেয়।
SyntaxError: invalid syntax — নামে ড্যাশ আছে total-price = 5 লাইনে পাইথন total থেকে price বিয়োগ করার চেষ্টা দেখে। আন্ডারস্কোর দিন: total_price।
SyntaxError: cannot assign to keyword আপনি পাইথনের সংরক্ষিত শব্দকে নাম বানাতে চেয়েছেন, যেমন class = 10। অন্য নাম দিন: class_name, grade।
NameError: name 'true' is not defined True আর False বড় হাতের অক্ষরে শুরু হয়।
ধাপ ৪ / ৬ — অনুমান
যাচাই করুন
এই চার লাইন চালালে কী ছাপা হবে?
a = 10
b = a
a = 99
print(a, b)- A99 10
- B99 99
- C10 99
- D10 10
কোনটি পাইথনে বৈধ ভেরিয়েবলের নাম?
- Aitem_2
- B2nd_item
- Citem-2
- Dclass
এই প্রোগ্রামটি চালালে TypeError আসে। ঠিক কী ভুল, আর সমাধান কী?
age = "22"
next_year = age + 1
print("Next year:", next_year)- A`age`-এ লেখা রাখা হয়েছে, সংখ্যা নয় — `age = 22` লিখতে হবে, অথবা `int(age) + 1` করতে হবে
- B`next_year` নামটি ব্যবহারের আগে ঘোষণা করা হয়নি
- C`print`-এ কমার বদলে `+` দিতে হবে
- D`age + 1`-এর জায়গায় `age + "1"` লিখলেই ২৩ পাওয়া যাবে
উত্তর দিতে অ্যাকাউন্ট লাগবে
উত্তর মিলিয়ে দেখতে সাইন ইন করুন
প্রশ্নগুলো উপরে আছে, আর মাথায় মাথায় উত্তর ভেবে নেওয়াই আসল কাজ। সঠিক উত্তর, ব্যাখ্যা আর তিন ধাপের ইঙ্গিত দেখতে সাইন ইন করুন।
নিজে করুন
shipping.py নামে একটা ফাইল লিখুন, যেখানে থাকবে:
- চারটি ভেরিয়েবল — একটি
int, একটিfloat, একটিstr, একটিbool— সবগুলোর নাম snake_case-এ এবং অর্থপূর্ণ - অন্তত একটি হিসাব, যেটি দুটো ভেরিয়েবল ব্যবহার করে তৃতীয় একটা ভেরিয়েবল বানায়
- চারটি ভেরিয়েবলের টাইপ
type()দিয়ে ছাপা - একটা লাইন, যেটি প্রথমে একটা ভেরিয়েবলে মান রাখে, তারপর সেটাই বদলে দেয় — আর দুই ধাপেই মানটা ছাপে
তারপর ইচ্ছে করে ভাঙুন: একটা str ভেরিয়েবলের সাথে + 1 করে চালান। ত্রুটির বার্তাটা পুরো পড়ুন, বিশেষ করে শেষ লাইনটা। এই বার্তাটা আপনি সামনে বহুবার দেখবেন — আজ একবার নিজে ডেকে আনলে পরে চেনা লাগবে।
এই মিশনে আরও কিছু আছে
উপরে যা পড়েছেন সেটাই সম্পূর্ণ মিশন — কিছু কেটে রাখা হয়নি। প্রো এর সাথে যোগ করে:
- ভেতরে আসলে কী ঘটে — পাইথন কীভাবে এটা চালায়
- অনুশীলনীর সম্পূর্ণ সমাধান, ধাপে ধাপে ব্যাখ্যাসহ
- কঠিন অতিরিক্ত অনুশীলনী
- এই বিষয়ে ইন্টারভিউতে যা জিজ্ঞেস করা হয়, আর তার আদর্শ উত্তর
ধাপ ৬ / ৬
কঠিন করা — অধ্যায়ের কুইজ
সহজ থেকে কঠিন — দশটি প্রশ্ন, শেষেরগুলো ইচ্ছে করেই কঠিন।
সাইন ইন করে কুইজ দিন