ভেরিয়েবল আর টাইপ — প্রোগ্রাম কীভাবে মনে রাখে
ভেরিয়েবলে মান রাখা, নাম দেওয়ার নিয়ম, আর চারটি মৌলিক টাইপ — int, float, str, bool। সাথে সেই এরর যেটা শুরুর দিকে সবচেয়ে বেশি আসে।
কীভাবে শিখতে চান?
যে সমস্যাটা আমরা সমাধান করছি
এখন পর্যন্ত আমাদের প্রোগ্রামগুলো কিছুই মনে রাখতে পারত না। যা ছাপা হয়ে গেছে, চলে গেছে।
কিন্তু সত্যিকারের কাজ এভাবে হয় না। একটা বিলের প্রোগ্রামে দাম একবার হিসাব করে সেটা তিন জায়গায় লাগে। একটা রিপোর্টে মোট সংখ্যাটা আগে বের করে পরে ব্যবহার করতে হয়। প্রোগ্রামকে মনে রাখতে হয়।
আর সাথে দ্বিতীয় সমস্যাটা — আগের অধ্যায়ে দেখেছেন "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 লাইনের মানে: a যে মানের গায়ে লাগানো আছে, b লেবেলটাও সেই একই মানের গায়ে লাগাও। এখন দুটো নামই একই 10-কে দেখাচ্ছে। এরপর a = 99 লিখলে শুধু a লেবেলটা খুলে নতুন মান 99-এর গায়ে লাগানো হয় — b যেখানে ছিল সেখানেই থাকে, 10-এর গায়ে। একটা নামে নতুন মান বসালে শুধু সেই নামটাই সরে, অন্য নাম নয়।
এই ছবিটা মাথায় রাখুন: দুটো নাম একই মানকে দেখাতে পারে। সংখ্যা বা স্ট্রিংয়ের ক্ষেত্রে এতে কোনো ঝামেলা হয় না, কিন্তু সামনে যখন লিস্ট শিখবেন — যার ভেতরের জিনিস জায়গায় বসেই বদলানো যায় — তখন এই কথাটাই খুব জরুরি হয়ে উঠবে।
নাম দেওয়ার নিয়ম
পাইথন যা মানবে না:
- সংখ্যা দিয়ে শুরু:
2nd_priceচলবে না,price_2চলবে - মাঝে ড্যাশ:
total-priceচলবে না, পাইথন ওটাকে বিয়োগ ভাবে - মাঝে স্পেস:
total priceচলবে না - পাইথনের কিওয়ার্ড (keyword):
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 "C:\Users\Rafi\python-lab\lesson-04\demo.py", line 2, in <module>
print(age + 1)
~~~~^~~
TypeError: can only concatenate str (not "int") to strFile লাইনে আপনার নিজের ফাইলের পুরো পথ দেখাবে, তাই আপনার কম্পিউটারে সেটা আলাদা হবে। বাকি লাইনগুলো একই থাকবে।
মেসেজটা ভয় দেখানোর মতো দেখতে, কিন্তু এটা আসলে পরিষ্কার করে বলে দিচ্ছে: 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: cannot assign to expression here. Maybe you meant '==' instead of '='? নামে ড্যাশ দিলে এটা আসে। total-price = 5 লাইনে পাইথন total থেকে price বিয়োগ করার একটা হিসাব দেখে, আর হিসাবের ফলে মান রাখা যায় না। আন্ডারস্কোর দিন: total_price।
SyntaxError: invalid syntax আপনি পাইথনের কোনো কিওয়ার্ডকে নাম বানাতে চেয়েছেন, যেমন class = 10। মেসেজটা কিওয়ার্ডের কথা বলে না, শুধু =-এর নিচে একটা ^ চিহ্ন দেখায় — তাই নামটা কিওয়ার্ড কি না, নিজেকেই দেখতে হবে। অন্য নাম দিন: class_name, grade।
NameError: name 'true' is not defined. Did you mean: 'True'? True আর False বড় হাতের অক্ষরে শুরু হয়।
ধাপ ৪ / ৬ — অনুমান
যাচাই করুন
এই চার লাইন চালালে কী ছাপা হবে?
a = 10
b = a
a = 99
print(a, b)- A10 99
- B10 10
- C99 99
- D99 10
কোনটি পাইথনে বৈধ ভেরিয়েবলের নাম?
- Aclass
- Bitem-2
- C2nd_item
- Ditem_2
এই প্রোগ্রামটি চালালে TypeError আসে। ঠিক কী ভুল, আর সমাধান কী?
age = "22"
next_year = age + 1
print("Next year:", next_year)- A`next_year` নামটি ব্যবহারের আগে ঘোষণা করা হয়নি
- B`age`-এ স্ট্রিং রাখা হয়েছে, সংখ্যা নয় — `age = 22` লিখতে হবে, অথবা `int(age) + 1` করতে হবে
- C`age + 1`-এর জায়গায় `age + "1"` লিখলেই ২৩ পাওয়া যাবে
- D`print`-এ কমার বদলে `+` দিতে হবে
উত্তর দিতে অ্যাকাউন্ট লাগবে
উত্তর মিলিয়ে দেখতে সাইন ইন করুন
প্রশ্নগুলো উপরে আছে, আর মাথায় মাথায় উত্তর ভেবে নেওয়াই আসল কাজ। সঠিক উত্তর, ব্যাখ্যা আর তিন ধাপের ইঙ্গিত দেখতে সাইন ইন করুন।
নিজে করুন
shipping.py নামে একটা ফাইল লিখুন, যেখানে থাকবে:
- চারটি ভেরিয়েবল — একটি
int, একটিfloat, একটিstr, একটিbool— সবগুলোর নাম snake_case-এ এবং অর্থপূর্ণ - অন্তত একটি হিসাব, যেটি দুটো ভেরিয়েবল ব্যবহার করে তৃতীয় একটা ভেরিয়েবল বানায়
- চারটি ভেরিয়েবলের টাইপ
type()দিয়ে ছাপা - একটা লাইন, যেটি প্রথমে একটা ভেরিয়েবলে মান রাখে, তারপর সেটাই বদলে দেয় — আর দুই ধাপেই মানটা ছাপে
তারপর ইচ্ছে করে ভাঙুন: একটা str ভেরিয়েবলের সাথে + 1 করে চালান। এররের মেসেজটা পুরো পড়ুন, বিশেষ করে শেষ লাইনটা। এই মেসেজটা আপনি সামনে বহুবার দেখবেন — আজ একবার নিজে ডেকে আনলে পরে চেনা লাগবে।
এই মিশনে আরও কিছু আছে
উপরে যা পড়েছেন সেটাই সম্পূর্ণ মিশন — কিছু কেটে রাখা হয়নি। প্রো এর সাথে যোগ করে:
- ভেতরে আসলে কী ঘটে — পাইথন কীভাবে এটা চালায়
- অনুশীলনীর সম্পূর্ণ সমাধান, ধাপে ধাপে ব্যাখ্যাসহ
- কঠিন অতিরিক্ত অনুশীলনী
- এই বিষয়ে ইন্টারভিউতে যা জিজ্ঞেস করা হয়, আর তার আদর্শ উত্তর
ধাপ ৬ / ৬
কঠিন করা — অধ্যায়ের কুইজ
সহজ থেকে কঠিন — দশটি প্রশ্ন, শেষেরগুলো ইচ্ছে করেই কঠিন।
সাইন ইন করে কুইজ দিন