লিখেছেন: কাজী মুশফিকুর রহমান || সফটওয়্যার প্রকৌশলী, টেকনিয়াস (সফটওয়্যার নির্মাণ প্রতিষ্ঠান) || তারিখঃ 23 নভে., 2024
পাইথনে ভ্যারিয়েবল কে কন্টেইনার বা পাত্র এর সাথে তুলনা করা যায়। পাত্র এর মধ্যে যেমনি মালামাল স্টোর করে রাখা যায়, তেমনি ভ্যারিয়েবল এর মধ্যে ভ্যালু স্টোর করে রাখা যায়। নিচে চিত্রের সাহায্যে ভ্যারিয়েবল দেখানো হলো, যেখানে a একটি ভ্যারিয়েবল, যার মধ্যে ভ্যালু 5 এসাইন করা হয়েছে (স্টোর করে রাখা হয়েছে)। পাত্র রাখতে যেভাবে একটি জায়গা এর প্রয়োজন হয়, একইভাবে এই ভ্যারিয়েবলটি এর জন্য ও মেমরিতে একটি জায়গা এর দরকার হবে, যে প্রক্রিয়া এর মাধ্যমে এই কাজটি সম্পন্ন হয় তাকে মেমরি অ্যালোকেশন বলা হয়।
ভ্যারিয়েবল ব্যবহার করার পূর্বে ডিক্লেয়ার করার প্রয়োজন হয়না এবং তাদের ডাটা টাইপ ও ডিফাইন (উল্লেখ) করা লাগে না। তবে কাস্টিং এর মাধ্যমে তাদের ডাটা টাইপ ডিফাইন করা যেতে পারে। কোনো কমান্ড ছাড়াই এটা ডিক্লেয়ার করা যায়, যখনই ভ্যারিয়েবল এ কোন ভ্যালু এসাইন করা হয়, তখনই এটা ক্রিয়েট (তৈরী) হয় এবং এই কাজটি সম্পন্ন হয় একটি সিঙ্গেল এসাইনমেন্ট অপারেটর (=) এর মাধ্যমে। ভ্যারিয়েবল কেইস সেনসিটিভ, যখন আপনি এটা কে ছোট হাতের অক্ষরে ডিক্লেয়ার করবেন, তখন বড় হাতের অক্ষরে এক্সেস করতে পারবেন না, বরং আপনাকে হুবহু ছোট হাতের অক্ষরই যথাযথ বানানসহ ব্যবহার করতে হবে, অন্যথায় পাইথন আপনাকে এরর দেখাবে।
পাইথন এ বিভিন্ন রকমের ভ্যারিয়েবল ব্যবহার হয়। তাদের মধ্যে নাম্বার একটি ভ্যারিয়েবল। এটি আবার ইন্টিজার নাম্বার (পূর্ণ সংখ্যা, যেমন: 1, 2, 3) এবং ফ্লোটিং পয়েন্ট নাম্বার (ভগ্নাংশ, যেমন: 1.1, 2.0, 3.3) হতে পারে। অনুরূপভাবে স্ট্রিং ও একটি ভ্যারিয়েবল, তবে এ ক্ষেত্রে ভ্যালু এসাইন করতে হয় সিঙ্গেল (‘’) অথবা ডাবল কোটেশন (“”) এর মধ্যে।
নিচে বিভিন্ন রকমের ভ্যারিয়েবল সম্পর্কে সংক্ষেপে আলোচনা করা হলো:
নাম্বার (Number)
পাইথন দুই ধরণের নাম্বার সাপোর্ট করে : ইন্টিজার নাম্বার (পূর্ণ সংখ্যা, যেমন: 1, 2, 3) এবং ফ্লোটিং পয়েন্ট নাম্বার (ভগ্নাংশ, যেমন: 1.1, 2.0, 3.3)। এটি কমপ্লেক্স নাম্বার (complex number) ও সাপোর্ট করে, তবে এখানে আমি এটি নিয়ে আলোচনা করব না।
ইন্টিজার নাম্বার ডিক্লেয়ার করার সিনট্যাক্স:
ভ্যারিয়েবল এর নাম = ভ্যালু
প্রথমে, যেকোনো একটি ভ্যারিয়েবল এর নাম, তারপর ‘=’ চিহ্ন (এসাইনমেন্ট অপারেটর), তারপর ভ্যালু।
কোড:
integer = 2
print (integer)
আউটপুট:
2
উপরের কোডটি তে integer একটি ভ্যারিয়েবল, এর মধ্যে 2 এসাইন করা হয়েছ (যা একটি পূর্ণ সংখ্যা), এবং 2 হচ্ছে এই ভ্যারিয়েবল এর ভ্যালু।
ভ্যারিয়েবল এর ক্ষেত্রে ইংরেজি যেকোন অক্ষর ব্যবহার করা যায় (যেমন: a, b, c, d ইত্যাদি)। আপনি চাইলে উপরের ভ্যারিয়েবলটি (integer) কে নিচের মত করে ও ডিক্লেয়ার করতে পারেন:
a= 2
অথবা
b = 2
অথবা
c = 2
অথবা
d = 2
উপরের a, b, c, d হলো ভ্যারিয়েবল এবং 2 ((যা একটি পূর্ণ সংখ্যা) হচ্ছে তাদের ভ্যালু।
কোড:
integer = 2
print (Integer)
আউটপুট:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Integer' is not defined
উপরের কোডটি তে আমরা একটি এরোর দেখতে পাচ্ছি, এর কারণ হলো, পাইথন একটি কেইস সেনসিটিভ ল্যাঙ্গুয়েজ, যেহেতু integer ভ্যারিয়েবল কে আমি ছোট হাতের অক্ষরে ডিফাইন করেছি, কিন্তু প্রিন্ট করার সময় বড় হাতের অক্ষরে ব্যবহার করেছি, তাই পাইথন একটি এরর মেসেজ (NameError: name 'Integer' is not defined) দিয়েছে যে, Integer ভ্যারিয়েবলটি ডিফাইন করা হয়নি।
ফ্লোটিং পয়েন্ট নাম্বার (ভগ্নাংশ) ডিক্লেয়ার করতে নিচের পদ্ধতি গুলো ব্যবহৃত হয়:
ফ্লোটিং পয়েন্ট নাম্বার ডিক্লেয়ার করার সিনট্যাক্স:
ভ্যারিয়েবল এর নাম = ভ্যালু
প্রথমে, যেকোনো একটি ভ্যারিয়েবল এর নাম, তারপর ‘=’ চিহ্ন (এসাইনমেন্ট অপারেটর), তারপর ভ্যালু।
উল্লেখ্য যে, পাইথন এর ক্ষেত্রে ভ্যারিয়েবল এর টাইপ উল্লেখ (ডিফাইন) করার প্রয়োজন হয় না।
কোড:
floatNumber = 2.0
print(floatNumber)
আউটপুট:
2.0
উপরের কোডটি তে floatNumber একটি ভ্যারিয়েবল, এর মধ্যে 2.0 এসাইন করা হয়েছ (যা একটি ভগ্নাংশ) এবং 2.0 হচ্ছে এই ভ্যারিয়েবল এর ভ্যালু।
আপনি চাইলে উপরের ভ্যারিয়েবলটি (floatNumber) কে নিচের মত করে ও ডিক্লেয়ার করতে পারেন:
a= 2.0
অথবা
b = 2.0
অথবা
c = 2.0
অথবা
d = 2.0
উপরের a, b, c, d হলো ভ্যারিয়েবল এবং 2.0 (যা একটি ভগ্নাংশ) হচ্ছে তাদের ভ্যালু।
float() মেথড ব্যবহার করে ফ্লোটিং পয়েন্ট নাম্বার ডিক্লেয়ার করা:
float(), পাইথন এর একটি বিল্ট ইন ফাংশন, এটি ইন্টিজার নাম্বার কে ফ্লোটিং পয়েন্ট নাম্বার এ কনভার্ট করে। আপনি যদি এ ফাংশন এর মধ্যে (প্যারামিটার হিসেবে) পূর্ণ সংখ্যা দেন, তাহলে এটি আপনাকে ভগ্নাংশ রিটার্ন করবে।
কোড:
floatNumber = float(2)
print(floatNumber)
আউটপুট:
2.0
উপরের কোডটি তে float() ফাংশন এর মধ্যে একটি পূর্ণ সংখ্যা (2) দেয়া হয়েছে, কিন্তু এটি এই পূর্ণ সংখ্যা কে ভগ্নাংশে (2.0) কনভার্ট করেছে।
স্ট্রিং
কোনো ব্যক্তির নাম কে সিঙ্গেল কোটেশন (‘’) অথবা ডাবল কোটেশন (‘’) এর মধ্যে রাখলেই সেটি স্ট্রিং হয়ে যায়। যেমন: আমার নাম Mushfiq কে name নামক ভ্যারিয়েবল এর মধ্যে এসাইন করলাম, সুতরাং এটি একটি স্ট্রিং হয়ে গেল। কোড টি রান করলে নিচের মত আউটপুট দিবে।
সিঙ্গেল কোটেশন (‘’) ব্যবহার করে স্ট্রিং:
কোড:
name = 'Mushfiq
print(name)
আউটপুট:
Mushfiq
উপরের কোডটি তে Mushfiq একটি স্ট্রিং যেটি name নামক ভ্যারিয়েবল এর মধ্যে স্টোর হয়ে আছে।
# অথবা, ডাবল কোটেশন (‘’) ব্যবহার করে স্ট্রিং:
কোড:
name = “Mushfiq”
print(name)
আউটপুট:
Mushfiq
উপরের দুইটি কোড একই আউটপুট দেয়।
ভ্যারিয়েবল এর নামকরণ
বিষয় এর সাথে মিল রেখে ভ্যারিয়েবল এর নামকরণ করা ভাল
পাইথন এ ভ্যারিয়েবল এর নাম সংক্ষিপ্ত হতে পারে (যেমন: a, b, c, d ইত্যাদি), আবার বর্ণনামূলক ও হতে পারে (যেমন: age, first_name, last_name, designation, biography, hobby ইত্যাদি)। তবে রিয়েল লাইফ প্রজেক্ট এ বর্ণনামূলক নাম দেয়া ভালো, যাতে করে কোড এর স্ট্যান্ডার্ড ধরে রাখা যায় এবং কমিউনিটি এর সকলের জন্য সহজে বোধগম্য হয়। যে ভ্যারিয়েবল কে যে উদ্দেশ্যে ডিক্লেয়ার করা হয়, সেই বিষয় এর সাথে মিল রেখেই তাদের নামকরণ করা ভালো। যেমন ধরুন, আমি আমার ব্যাক্তিগত তথ্য (পদবি, নাম, ঠিকানা, বিভাগ, শখ ইত্যাদি) প্রিন্ট করার জন্য একটি পাইথন প্রোগ্রাম লিখব। এখন, আমি চাইলে আমার ব্যাক্তিগত তথ্য কে যথাক্রমে এই ভারিয়াবলগুলো (title, name, address, department, hobby) এর মধ্যে অথবা এই ভারিয়াবলগুলো (a, b, c, d, e) এর মধ্যে স্টোর করতে পারি। তবে প্রথম পদ্ধতিটাই উত্তম, কারণ এক্ষেত্রে বিষয় এর সাথে ভ্যারিয়েবল এর নামের একটি মিল থাকে এবং পাঠকরা সহজে বুঝতে পারে।
এখন, আমি আমার ব্যাক্তিগত তথ্য প্রিন্ট করার জন্য একটি পাইথন প্রোগ্রাম লিখব।
কোড:
title = 'Kazi'
name = 'Mushfiqur Rahman'
address = 'kashiani, Gopalganj'
department = 'Computer Science & Engineering'
designation = 'Software Engineer, Techneous'
hobby = 'Computer programing'
full_name = title + " " + name
print('Title: ', title)
print('Name: ', name)
print('Full name: ', full_name)
print('Address: ', address)
print('Department: ', department)
print('Designation: ', designation)
print('Hobby: ', hobby)
উপরের উদাহরণ এর প্রথম লাইন এ title ভ্যারিয়েবল এর মধ্যে আমি ভ্যালু 'Kazi' স্টোর করেছি, দ্বিতীয় লাইন এ name ভ্যারিয়েবল এর মধ্যে ভ্যালু 'Mushfiqur Rahman' স্টোর করেছি, তৃতীয় লাইন এ address ভ্যারিয়েবল এর মধ্যে ভ্যালু 'kashiani, Gopalganj' স্টোর করেছি, চতুর্থ লাইন এ department ভ্যারিয়েবল এর মধ্যে ভ্যালু 'Computer Science & Engineering' স্টোর করেছি, পঞ্চম লাইন এ designation ভ্যারিয়েবল এর মধ্যে ভ্যালু 'Software Engineer, Techneous' স্টোর করেছি, ষষ্ঠ লাইন এ hobby ভ্যারিয়েবল এর মধ্যে ভ্যালু 'Computer programing' স্টোর করেছি, সপ্তম লাইন এ title এবং name কে যোগ করে full_name ভ্যারিয়েবল এর মধ্যে স্টোর করেছি, এবং পরবর্তী লাইনগুলো তে জাস্ট তথ্যগুলো প্রিন্ট করেছি। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
Title: Kazi
Name: Mushfiqur Rahman
Full name: Kazi Mushfiqur Rahman
Address: kashiani, Gopalganj
Department: Computer Science & Engineering
Designation: Software Engineer, techneous
Hobby: Computer programing
আমি চাইলে উপরের কোডটি নিচের মত করে লিখতে পারতাম। তবে উপরের কোডটি স্ট্যান্ডার্ড এবং পাঠকদের জন্য সহজে বোধগম্য, কারণ বিষয় এর সাথে ভ্যারিয়েবলের এর নামের মিল রয়েছে। নিচের কোডটিতে আমি আমার ব্যাক্তিগত তথ্য কে যথাক্রমে ৭ টি ভ্যারিয়েবল (a, b, c, d, e, f, ab) এর মধ্যে স্টোর করেছি। এ কোডটি ও কাজ করছে এবং উভয় কোডটি (উপরের কোডটি এবং নিচের কোডটি) একই আউটপুট দিচ্ছে। তবে পার্থক্য হলো, নিচের কোড এর ভ্যারিয়েবল গুলো এর সাথে বিষয়ের কোনো মিল নেই। সাধারণত কোড এর স্ট্যান্ডার্ড ধরে রাখতে রিয়েল লাইফ প্রজেক্ট এ এভাবে ভ্যারিয়েবল ডিক্লেয়ার করা হয় না, বরং বিষয়ের সাথে মিল রেখেই ভ্যারিয়েবল গুলো ডিক্লেয়ার করা হয়।
কোড:
a = 'Kazi'
b = 'Mushfiqur Rahman'
c = 'kashiani, Gopalganj'
d = 'Computer Science & Engineering'
e = 'Software Engineer, Techneous'
f = 'Computer programing'
ab = title + " " + name
print('Title: ', a)
print('Name: ', b)
print('Full name: ', ab)
print('Address: ', c)
print('Department: ', d)
print('Designation: ', e)
print('Hobby: ', f)
এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
Title: Kazi
Name: Mushfiqur Rahman
Full name: Kazi Mushfiqur Rahman
Address: kashiani, Gopalganj
Department: Computer Science & Engineering
Designation: Software Engineer, techneous
Hobby: Computer programing
ভ্যারিয়েবল এর নামকরণ এর নিয়মাবলী
এখন, আমরা উদাহরণসহ ভ্যারিয়েবল এর নামকরণ এর নিয়মাবলী শিখব:
আলফাবেট (ইংরেজি অক্ষর) দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করা
ইংরেজি তে ২৬ টি অক্ষর রয়েছে, এই অক্ষর গুলো এর মধ্যে যেকোন টাই ভ্যারিয়েবল হিসাবে ব্যবহৃত হতে পারে, চাই সেটা ছোট হাতের অক্ষর (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z) হোক অথবা বড় হাতের অক্ষর (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z) হোক। নিচের উদাহারণ গুলো লক্ষ করুন, তাহলে ব্যাপারটি স্পষ্ট হয়ে যাবে।
কোড:
a = 5
A = 20
b = 10
B = 25
x = 11
X = 100
print('a: ', a)
print('A: ', A)
print('b: ', b)
print('B: ', B)
print('x: ', x)
print('X: ', X)
এখানে, ভ্যারিয়েবল হিসাবে আমি ছোট হাতের এবং বড় হাতের উভয় অক্ষরই (a, A, b, B, x, X) ব্যবহার করেছি, এবং কোডটি ঠিকমত কাজও করছে। তবে রিয়েল লাইফ প্রজেক্ট এ ভ্যারিয়েবল কে সাধারণত ছোট হাতের অক্ষরে ডিক্লেয়ার করা হয়, অর্থাৎ, Name, Age, Address এর পরিবর্তে name, age, address এভাবে ডিক্লেয়ার করা হয়। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
a: 1
A: 20
B: 10
B: 25
X: 11
X: 100
আন্ডারস্কোর ক্যারেক্টার ( _ ) ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা
পাইথন এ আন্ডারস্কোর ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা যায়, তবে অন্যান্যা পাংচুয়েশন গুলো (?, !, ‘’, “”, ; , : , - , (),ইত্যাদি ) এক্ষেত্রে ব্যবহৃত হয়না। আপনি চাইলে শব্দের শুরুতে ( _country ), শব্দের শেষে ( city_ ), অথবা দুই শব্দের মাঝখানে ( full_message ) আন্ডারস্কোর ব্যবহার করতে পারেন। এমনকি শুধু আন্ডারস্কোরকে ও ভ্যারিয়েবল হিসাবে ডিক্লেয়ার করতে পারেন ( _ = 1)। তবে রিয়েল লাইফ প্রজেক্টে দুই শব্দের মাঝখানে (full_message) আন্ডারস্কোর ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা হয়। এখন, উদাহরণসহ আমরা আন্ডারস্কোর এর ব্যবহার দেখব।
# শব্দের শুরুতে আন্ডারস্কোর ( _ ) ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা।
কোড:
_country = 'Bangladesh'
print(_country)
উপরের কোড এ country শব্দের শুরুতে আন্ডারস্কোর ব্যবহার করে আমি একটি ভ্যারিয়েবল ডিক্লেয়ার করেছি ( _country ), এবং এর মধ্যে ভ্যালু 'Bangladesh' এসাইন করেছি। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
Bangladesh
# শব্দের শেষে আন্ডারস্কোর ( _ ) ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা।
কোড:
city_ = 'Dhaka'
print(city_)
উপরের কোড এ city শব্দের শেষে আন্ডারস্কোর ব্যবহার করে আমি একটি ভ্যারিয়েবল ডিক্লেয়ার করেছি ( city_ ), এবং এর মধ্যে ভ্যালু 'Dhaka' এসাইন করেছি। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
Dhaka
# দুই শব্দের মাঝখানে আন্ডারস্কোর ( _ ) ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা। রিয়েল লাইফ প্রজেক্টে এই পদ্ধতিটি বেশি ব্যবহৃত হয়।
কোড:
full_message = 'We live in Dhaka city of Bangladesh'
print(full_message)
উপরের কোড এ দুই শব্দ (full and message) এর মাঝখানে আন্ডারস্কোর ব্যবহার করে আমি একটি ভ্যারিয়েবল ডিক্লেয়ার করেছি (full_message), এবং এর মধ্যে ভ্যালু 'We live in Dhaka city of Bangladesh' এসাইন করেছি। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
We live in Dhaka city of Bangladesh
# শুধু আন্ডারস্কোর ( _ ) ব্যবহার করে ভ্যারিয়েবল ডিক্লেয়ার করা। রিয়েল লাইফ প্রজেক্টে ল্যাংগুয়েজ ট্রান্সলেশন এর ক্ষেত্রে শুধু আন্ডারস্কোর ( _ ) কে ভ্যারিয়েবল হিসাবে ব্যবহার করা হয়।
কোড:
_ = 1
print('Underscore: ', _)
উপরের কোড এ শুধু আন্ডারস্কোর কে আমি একটি ভ্যারিয়েবল হিসাবে ডিক্লেয়ার করেছি ( _ ), এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
1
ভ্যারিয়েবল নাম্বার (যেমন: 1, 2, 3, 4, 5 ইত্যাদি ) দিয়ে শুরু হতে পারে না
পাইথন এ কোন ভ্যারিয়েবল নাম্বার (যেমন: 1number) দিয়ে শুরু হতে পারে না। তবে ভ্যারিয়েবল এর শেষে (যেমন: number1) অথবা মাঝে (যেমন: n1n2) নাম্বার ব্যবহার করা যায়। এখন, উদাহরণসহ আমরা এর ব্যবহার দেখব।
# একটি ভ্যারিয়েবল নাম্বার (যেমন: 1number) দিয়ে শুরু হতে পারে না।
কোড:
1number = 1
Print(1number)
উপরের কোডটি তে আমি একটি ভ্যারিয়েবল 1number ডিক্লেয়ার করেছি যেটি শুরু হয়েছে নাম্বার দিয়ে। এখন কোডটি রান করলে পাইথন একটি এরর মেসেজ দিবে (SyntaxError: invalid syntax)। এই মেসেজ এর মাধ্যমে পাইথন আমাদের কে এ কথা বলতে চাই যে, আমাদের ভ্যারিয়েবল টি (1number) ডিক্লেয়ার করা ঠিক হয়নি। কারণ এটি শুরু হয়েছে নাম্বার দিয়ে, আর ভ্যারিয়েবল এর নামকরণ এর নিয়মানুসারে নাম্বার দিয়ে কোন ভ্যারিয়েবল শুরু হতে পারে না। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
File "<stdin>", line 1
1number = 1
^
SyntaxError: invalid syntax
# ভ্যারিয়েবল এর শেষে (যেমন: number1) নাম্বার ব্যবহার করা যায়।
কোড:
number1 = 1
number2 = 2
print(number1)
print(number2)
উপরের কোডটি তে আমি দুটি ভ্যারিয়েবল (number1 এবং number2) ডিক্লেয়ার করেছি, যেগুলো শেষ হয়েছে নাম্বার দিয়ে। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
1
2
# ভ্যারিয়েবল এর মাঝে (যেমন: n1n2) নাম্বার ব্যবহার করা যায়।
কোড:
n1n2 = 3
print(n1n2)
উপরের কোডটি তে আমি একটি ভ্যারিয়েবল (n1n2) ডিক্লেয়ার করেছি, যার মাঝে নাম্বার ব্যবহৃত হয়েছে। এখন কোডটি রান করলে আমরা নিচের আউটপুট টি পাব।
আউটপুট:
3
0