ভ্যারিয়েবল, ডাটা টাইপ ও ডাটা ইনপুট

ভ্যারিয়েবল

চলুন, সবাই মিলে ছেলেবেলায় ফিরে যাই। সেই দিনগুলির কথা কি মনে আছে, আমাদের যখন নতুন নতুন বীজগণিত শিখেছিলাম? নাহ, সেইদিনগুলি ভোলার নয়। আজ আবার সেই বীজগণিতের একটা অংক (ম্যাথ) করা যাক।

যদি a = 5 হয় ও b = 10 হয় তবে ab = ?

দেয়া আছে,
        a = 5
        b = 10

অতএব,
        ab = 5 * 10
           = 50

যদি জিজ্ঞেস করা হয় আমাদের, যে এখানে a ও b আসলে কি? তাহলে আমরা সবাই চিৎকার করে বলে উঠব এরা হল চলক। আমরা কমবেশি সবাই চলক সম্পর্কে ধারণা রাখি। এই চলককেই ইংরেজিতে ভ্যারিয়েবল বলে।

ভ্যারিয়েবল হল অনেকটা বক্সের মত। বক্সে যেমন পানি রাখা যায়, জিনিসপাতি রাখা যায় তেমনি করে ভ্যারিয়েবলেও অনেক কিছু (ভ্যালু) রাখা যায়। ভ্যারিয়েবল ও এর মানের মাঝখানে = চিহ্ন থাকে। এই চিহ্নের বামপাশে থাকে ভ্যারিয়েবল আর ডানপাশে থাকে ভ্যালু। ডানপাশে যে ভ্যালু দেয়া হয় তা বামপাশের ভ্যারিয়েবলে স্টোর হয়ে যায়, একে অ্যাসাইনমেন্ট বলে। তবে আদতে স্টোরটা হয় কম্পিউটার মেমরিতে। প্রতিটা ভ্যারিয়েবলের মেমরি অ্যাড্রেস ভিন্ন বা ইউনিক হয়।

>>> x = 5
>>> x
5
>>> x = 12
>>> x
12
>>> x = 10.34
>>> x
10.34
>>> x = 'Python'
>>> x
'Python'

উপরে আমরা x এর ভিতরে বিভিন্ন স্টেটমেন্টে বিভিন্ন জিনিস স্টোর করেছি। যখনই নতুন একটা ভ্যালু দিয়েছি তখনই আগের ভ্যালুটা রিপ্লেস হয়ে গেছে। একে রি-অ্যাসাইনমেন্ট বলে।

পাইথনে ভ্যারিয়েবল লেখার কিছু নিয়ম-কানুন আছে। একটা ভ্যারিয়েবল A থেকে Z পর্যন্ত যেকোন বড় হাতের অক্ষর অথবা a থেকে z পর্যন্ত যেকোন ছোট হাতের অক্ষর অথবা আন্ডারস্কোর চিহ্ন _ দিয়ে শুরু হতে পারবে। এরপরে যেকোন লেটার, ডিজিট (0 থেকে 9 পর্যন্ত) বা আন্ডারস্কোর ব্যবহার করতে পারব আমরা। তবে @ $ % এর মত কিছু চিহ্ন ব্যবহার করতে পারব না আমরা। আরেকটা রেস্ট্রিকশন হল, পাইথনের রিজার্ভড কী-ওয়ার্ডগুলোও ব্যবহার করতে পারব না। নিচে রিজার্ভড কী-ওয়ার্ডগুলো একটা টেবিলে সাজিয়ে দিলাম। মুখস্থ করার কোন দরকার নাই। আস্তে আস্তে এমনিতেই মাথায় গেঁথে যাবে।

কী-ওয়ার্ড কী-ওয়ার্ড কী-ওয়ার্ড
and exec not
as finally or
assert for pass
break from print
class global raise
continue if return
def import try
del in while
elif is with
else lambda yield
except

পাইথনে ভ্যারিয়েবল বা যেকোন আইডেন্টিফায়ার কিন্তু কেস সেন্সিটিভ (পাইথন কেস সেন্সিটিভ ল্যাঙ্গুয়েজ)। মানে পাইথনে ছোট হাতের a আর বড় হাতের A এক জিনিস নয়, একেবারেই ভিন্ন জিনিস।

ডাটা টাইপ

আগের উদাহরণে ফিরে আসি, সেখানে a = 5 দিয়ে বুঝানো হয়, a এর ভিতরে 5 আছে। যেহেতু 5 হল পূর্ণসংখ্যা, সেজন্য a হল একটি পূর্ণসংখ্যার ভ্যারিয়েবল অথবা প্রোগ্রামিংয়ের ভাষায় ইন্টিজার টাইপ ভ্যারিয়েবল। ইন্টিজারের বাংলা হল পূর্ণসংখ্যা। এখন যদি বলা হয়, a = 3.1416 তাহলে a কোন টাইপের ভ্যারিয়েবল? যদি আমরা সবাই বলে থাকি - a হল দশমিক বা ফ্লোট টাইপের ভ্যারিয়েবল তাহলে বুঝেছি ব্যাপারটা। এখন উপরের অংকটা আমরা পাইথনে করব:

>>> a = 5
>>> b = 10
>>> a * b
50

একই উত্তর আসল। ইতিমধ্যে আমরা print() মেশিন বা ফাংশনটা সম্পর্কে জেনেছি। এখন আমরা আরেকটা ফাংশন সম্পর্কে জানব। আমাদের নতুন ফাংশনটা হল type()। এই ফাংশনের ভিতর কোন ভ্যারিয়েবলকে দিয়ে দিলে সেটা কোন টাইপের তা জানা যায়। চলুন দেখা যাক:

>>> a = 5
>>> type(a)
<class 'int'>
>>> b = 10
>>> type(b)
<class 'int'>
>>> type(a * b)
<class 'int'>

আমরা দেখতে পাচ্ছি, type(a) স্টেটমেন্ট চালিয়ে আমরা আউটপুট পেয়েছি <class 'int'>। এই আউটপুটটা পুরোপুরি বোঝার কোন দরকার আপাতত নেই। আমরা শুধু int কথাটা উপর জোর দেব। এই int মানে হল ইন্টিজার। এখন আমরা এক নজরে পাইথনের কমন ডাটা টাইপগুলো দেখব:

>>> a = 1
>>> type(a)
<class 'int'>
>>> b = 3.1416
>>> type(b)
<class 'float'>
>>> c = "Hello World!"
>>> type(c)
<class 'str'>
>>> d = True
>>> type(d)
<class 'bool'>
  • int: ইন্টিজার টাইপের ভ্যারিয়েবল বুঝায়। ইন্টিজার মানে পূর্ণসংখ্যা। পূর্ণসংখ্যা তো আমরা সবাই চিনি, যেমন: ১, ২, ১০০, ৫০১ ইত্যাদি।

  • float: ফ্লোট টাইপের ভ্যারিয়েবল বুঝায়। ফ্লোট মানে হল দশমিক সংখ্যা বা ভগ্নাংশ। ৩.১৪১৬, ২০.০, ৮৭৬.৭৬৯ সবই হল দশমিক সংখ্যা।

  • str: স্ট্রিং টাইপের ভ্যারিয়েবল বুঝায়। স্ট্রিং সম্পর্কে আগে একবার জেনেছি। এক কথায় বলতে গেলে সিঙ্গেল কোট বা ডাবল কোটের ভিতরে যাই থাকে তাকেই স্ট্রিং বলে। স্ট্রিং হল টেক্সট বা কোন লেখা।

  • bool: বুলিয়ান টাইপের ভ্যারিয়েবল বুঝায়। এটা একটা মজার জিনিস। বুলিয়ান টাইপের ভ্যারিয়েবলের মান হয় True হবে না হয় False হবে। সোজা কথায়, বুলিয়ান টাইপের ভ্যারিয়েবল দিয়ে সত্য-মিথ্যা প্রকাশ করা হয়।

সাধারণত আমরা এই চার ধরনের ভ্যারিয়েবলই বেশি ব্যবহার করব। তবে এগুলো বাদেও long, complex, unicode, list, tuple, set, dict ইত্যাদি নানা প্রকার ভ্যারিয়েবলের ব্যবহার রয়েছে পাইথনে।

ডাটা ইনপুট

উপরে আমরা একটা অংক করেছি। সেখানে বলাই ছিল a এর মান 5 আর b এর মান 10। তাই খুব সহজেই আমরা ম্যাথটি করে ফেলতে পেরেছি। এখন যদি বলা হয় যে, ইউজার নিজে ডাটা দিতে পারবে তখন কি হবে? মানে, ইউজার বিভিন্ন সময় বিভিন্ন ডাটা দেবে আর পাইথনের সাহায্যে আমরা প্রতিবার তাদের গুণফল আউটপুট দেব। বেশ চিন্তার কথা!

এইজন্য আমরা নতুন একটা ফাংশনের কাজ শিখব। এই নতুন ফাংশনটা হল input()। এই ফাংশনটার কাজ হল ইউজারের কাছ থেকে ডাটা নিয়ে কোন ভ্যারিয়েবলে সংরক্ষণ করা। উদাহরণ হিসাবে দেখানো যায়:

>>> a = input()
10
>>> a
'10'

এখানে ইউজারের থেকে ডাটা নিয়ে a ভ্যারিয়েবলের ভিতরে সংরক্ষণ করা হয়েছে। পরে আমরা a এর আউটপুট চেক করে দেখেছি। এখন উপরের অংকটা আবার করা যাক। তবে এইবার ডাটা সাপ্লাই দেবে ইউজার।

>>> a = input()
10
>>> b = input()
40
>>> a* b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'
>>>

রেজাল্ট আসার কথা 400 কিন্তু সেখানে কতগুলো হাবিজাবি জিনিস এসেছে। এই হাবিজাবি জিনিসগুলোর ময়নাতদন্ত করা যাক।

আসলে, পাইথন এখানে একটা এরর থ্রো করেছে। যখন পাইথন ইন্টারপ্রিটার প্রোগ্রামে কোন ভুল বা সমস্যা খুঁজে পায় তখন সমস্যার ধরন অনুসারে বিভিন্ন এরর থ্রো করে। আমাদের এখানে যে এরর থ্রো করেছে সেটা হল TypeError। যখন টাইপে সমস্যা থাকে তখন এই TypeError থ্রো করা হয়।

চলুন, এরর মেসেজটা একটু খেয়াল করে দেখা যাক। can't multiply sequence by non-int of type 'str' এই লাইনটা দিয়ে কি বোঝানো হয়েছে? সহজ কথায়, দুইটা স্ট্রিং টাইপের ভ্যারিয়েবলকে গুণ করা সম্ভব না। কিন্তু ইউজার তো ইন্টিজার ডাটা ইনপুট দিয়েছে। তাহলে সমস্যা কোথায়? আরো একটু ময়নাতদন্ত করি:

>>> a = input()
10
>>> type(a)
<class 'str'>
>>> b = input()
40
>>> type(b)
<class 'str'>
>>> a* b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'

কি দেখতে পাচ্ছি আমরা? চমৎকার জিনিস! ডাটা ইনপুট দিলাম ইন্টিজার আর ভ্যারিয়েবলের ভিতর ঢুকল স্ট্রিং। তাহলে উপায়?

টাইপ কাস্টিং বা টাইপ কনভারশন

পাইথনে টাইপ কাস্টিং বলে একটা মজার জিনিস আছে। আসলে, সকল প্রোগ্রামিং ল্যাঙ্গুয়েজেই এই ফিচারটা রয়েছে। এর সাহায্যে এক টাইপের ভ্যারিয়েবলকে অন্য টাইপে কাস্ট করা হয়। কাস্ট করা হয় মানে ঐ টাইপের দেখানো হয়, আসলে ভ্যারিয়েবল যা ছিল তাই থাকে। আর এই টাইপ কাস্টিং করা হয় কতগুলো ফাংশনের সাহায্যে (আসলে ফাংশন না ক্লাস বলাই ভাল)। একনজরে আমরা দরকারি ফাংশনগুলো দেখব:

ফাংশন বর্ননা
int() ইন্টিজারে কাস্ট করে
float() ফ্লোটে কাস্ট করে
str() স্ট্রিংয়ে কাস্ট করে
tuple() টাপলে কাস্ট করে
list() লিস্টে কাস্ট করে
set() সেটে কাস্ট করে
dict() ডিকশনারিতে কাস্ট করে

এবার একটা উদাহরণ দেখা যাক।

>>> a = 5
>>> type(a)
<class 'int'>
>>> a = str(a)
>>> type(a)
<class 'str'>

আমরা প্রথমে a ভ্যারিয়েবলে 5 ইন্টিজার ভ্যালু অ্যাসাইন করেছি। অ্যাসাইন করা মানে ভ্যালু বা ডাটা রাখা। তারপর a এর টাইপ চেক করে দেখেছি, হুম int টাইপের। এরপর আমরা a কে str() ফাংশনের ভিতর চালান করে দিয়ে a কে স্ট্রিং হিসাবে কাস্ট করেছি। শুধু কাস্ট করেই ক্ষান্ত থাকিনি, কাস্ট করার পর সেই ভ্যালুকে আবার a তেই অ্যাসাইন করেছি। সবশেষে আবার a এর টাইপ চেক করে দেখেছি। এবার টাইপ str। সুতরাং আমরা টাইপ কাস্টিং বুঝতে পারলাম। এবার আমাদের অংকটা আবার করি:

>>> a = input()
10
>>> a = int(a)
>>> b = input()
40
>>> b = int(b)
>>> a * b
400

হুম, এবার কিন্তু আমরা আমাদের কাঙ্ক্ষিত আউটপুট পেয়েছি। এটাকে আরো সহজ করে লেখা যায়:

>>> a = int(input())
10
>>> b = int(input())
40
>>> a * b
400

এতে করে আমাদের প্রোগ্রামটা আরো ছোট হয়ে গেল। আসলে আমরা ইনপুট আর কাস্টিংকে একটা স্টেটমেন্টেই করে ফেলেছি। আমরা চাইলে a আর b এর মান দুই লাইনে ইনপুট না নিয়ে কিন্তু এক লাইনেও নিতে পারতাম। কিভাবে নিতে পারতাম? সেক্ষেত্রে আমাদেরকে দুইটা কাজ করতে হবে। এক হল: ইনপুট ডাটাগুলোর ভিতর স্পেস দিয়ে আলাদা করতে হবে আর দুই হল: split() ফাংশন ব্যবহার করতে হবে। উদাহরণ দিলে পরিষ্কার হয়ে যাবে:

>>> a, b = input().split()
10 40
>>> a
'10'
>>> b
'40'

আমাদের পাইথন শেখার এক পর্যায়ে আমরা বিভিন্ন অনলাইন জাজের প্রব্লেম সলভ করব। সেখানে আমাদেরকে এক লাইনে অনেকগুলো ডাটা ইনপুট নেয়া লাগতে পারে। তাই আমরা আগেই এটা শিখে রাখলাম।

আচ্ছা, শেষের উদাহরণে যে a ও b এর ভ্যালু নিলাম তাদের টাইপ কি? এভাবে ডাটা ইনপুট নিয়ে অংকটা কি করতে পারা যাবে? কি মনে হয়? কালিদাস পন্ডিত অভিশাপ দিয়ে গেছে, 'এই পুরো বই পড়ার পরেও যে এই প্রশ্নের উত্তর দিতে পারবে না সে চিরজীবন চিলেকোঠায় ভূত হয়ে থাকবে।' চেষ্টা শুরু করুন, তাহলে!

সহজ ভাষায় পাইথন ৩

বইটি পড়ার সময় প্রতিটি টপিক ধারাবাহিকভাবে বুঝে বুঝে পড়তে হবে এবং হাতে-কলমে অনুশীলন করতে হবে। কোন অংশ বুঝতে সমস্যা হলে ফেসবুক গ্রুপ পাইথন বাংলাদেশে সমস্যাটি পোস্ট করতে পারেন। এখান থেকে অতি দ্রুত সাহায্য-সহযোগীতা পাবেন আপনি।

results matching ""

    No results matching ""