ভ্যারিয়েবল, ডেটা টাইপ ও গাণিতিক অপারেশন

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

text_to_print = "Hello World"
print(text_to_print)

এটি রান করলে আমরা পূর্বের মতো স্ক্রিনে Hello World লেখা দেখতে পাবো। এখানে text_to_print হচ্ছে একটি ভ্যারিয়েবল, যেখানে আমি Hello World কথাটি জমা রাখলাম। তারপরে সেটি প্রিন্ট করলাম। ভ্যারিয়েবলের নাম দেওয়ার কিছু নিয়মকানুন আছে, যেগুলো বিভিন্ন টেক্সট বইতে দেওয়া আছে। আমরা এখন সেইসব নিয়ম মুখস্থ করতে যাবো না, বরং প্রোগ্রাম লিখতে লিখতে আর সেই সঙ্গে ভুল করতে করতে আমরা শিখবো। এখন text_to_print না লিখে আমরা অন্য কোনো নামও ব্যবহার করতে পারতাম, যেমন a, b, c, s ইত্যাদি। কিন্তু আমাদের খেয়াল রাখতে হবে যেন ভ্যারিয়েবলের নাম অর্থপূর্ণ হয়, মানে ভ্যারিয়েবলের নাম দেখে যেন বুঝতে পারা যায় যে, সেটি কী কাজে ব্যবহৃত হচ্ছে।

এখন আমরা টার্মিনালে পাইথন চালু করে আরো কিছু প্রোগ্রাম লিখবো। প্রথম প্রোগ্রাম হচ্ছে দুইটি সংখ্যা যোগ করার প্রোগ্রাম। দুইটি সংখ্যা রাখার জন্য আমরা number1 ও number2 নামে দুইটি ভ্যারিয়েবল ব্যবহার করবো। আর তাদের যোগফল রাখবো result নামে আরেকটি ভ্যারিয়েবলে। তারপরে সেটি প্রিন্ট করবো।

>>> number1 = 10
>>> number2 = 5
>>> result = number1 + number2
>>> print(result)
15

আমরা উপরে একটি গাণিতিক অপারেশন করলাম, যেটি হচ্ছে যোগ (+)। তেমনি আমরা বিয়োগ (-), গুণ (*) ও ভাগের (/) কাজও করতে পারি। যারা কেবল প্রোগ্রামিং শিখছে, তাদের প্রতি আমার পরামর্শ হচ্ছে যে, আমি বইতে যেসব কাজ করে দেখাচ্ছি, এগুলো কেবল পড়লে হবে না, সেই সঙ্গে কম্পিউটারে নিজে করে দেখতে হবে। তাহলে প্রোগ্রামিং শেখা সহজ হবে।

আমরা number1 = 10 যে লিখলাম, সেটি বোঝায় যে, number1 নামের ভ্যারিয়েবলে আমরা 10 সংখ্যাটি রাখতে চাচ্ছি। এখন আমরা যদি এরপর number1 ভ্যারিয়েবলে অন্য কিছু রাখতে চাই, সেটিও সম্ভব। নিচের উদাহরণ লক্ষ করলে বিষয়টি পরিষ্কার হবে :

>>> number1 = 10
>>> print(number1)
10
>>> number1 = 15
>>> number1 = 18
>>> print(number1)
18
>>> number1 = "hello"
>>> print(number1)
hello
>>>

আমরা দেখতে পাচ্ছি যে, একটি ভ্যারিয়েবলে আমরা বিভিন্ন রকম জিনিস রাখতে পারি, তবে সর্বশেষ যেটি রাখবো, প্রোগ্রাম কেবল সেটিই মনে রাখবে। আমরা একটি ভ্যারিয়েবলকে একটি গ্লাসের সঙ্গে তুলনা করতে পারি। একটি গ্লাসে আমি পানি রাখতে পারি। আবার সেই গ্লাসে দুধ রাখতে পারি, শরবত রাখতে পারি কিংবা অন্য কোনো পানীয়। একটি গ্লাস একটি নির্দিষ্ট সময়ে যেকোনো এক প্রকার তরল পদার্থ ধারণ করবে। তেমনি একটি ভ্যারিয়েবল একটি ডেটা ধারণ করবে।

এখন আরেকটি প্রোগ্রাম লেখার চেষ্টা করি।

>>> number1 = "hello"
>>> number2 = 2
>>> result = number1 + number2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module> 
TypeError: Can't convert 'int' object to str implicitly

এখানে যোগ করার সময় পাইথন বলছে যে, একটি এরর হয়েছে। এররটি কী? এখন দেখে আমাদের খুব বেশি বোঝার কথা নয়। কারণ আমরা কেবল প্রোগ্রামিং শেখা শুরু করেছি।

প্রতিটি ভ্যারিয়েবলেই আমরা যে ডেটা রাখি, তার একটি নির্দিষ্ট ধরন রয়েছে। যেমন 10 হচ্ছে একটি পূর্ণসংখ্যা (ইংরেজিতে integer)। “hello” হচ্ছে একটি স্ট্রিং (string)। তো ভ্যারিয়েবলের টাইপ পাইথন কিভাবে বুঝে? সে ডেটা দেখে একটা ধারণা করে নেয়, আমাদেরকে নিজ থেকে বলে দিতে হয় না। আমরা চাইলে কোনো ভ্যারিয়েবলে সংরক্ষিত ডেটার টাইপ দেখতে পারি।

>>> v = 10
>>> type(v)
<class 'int'>
>>> v = "10"
>>> type(v)
<class 'str'>
>>> v = 10.0
>>> type(v)
<class 'float'>

ওপরে আমরা তিন ধরনের ডেটা টাইপ দেখতে পাচ্ছি - int, str ও float। এগুলোর পূর্ণ রূপ হচ্ছে integer, string ও float। integer হচ্ছে যেকোনো পূর্ণসংখ্যা, আর float হচ্ছে যেকোনো বাস্তব সংখ্যা বা দশমিক যুক্ত সংখ্যা। আর string শব্দের অর্থ আমাদের কাছে দড়ি (বা রশি) মনে হলেও এটি আসলে একটি ডেটা টাইপ যেখানে এক বা একাধিক অক্ষর (সংখ্যা, চিহ্ন বা বর্ণ) থাকে। স্ট্রিংয়ে আমাদের হয় সিঙ্গেল কোটেশন চিহ্ন ব্যবহার করতে হবে (যেমন : 'abc'), অথবা ডবল কোটেশন চিহ্ন ব্যবহার করতে হবে (যেমন : “abc”)। সিঙ্গেল কোটেশন দিয়ে শুরু, কিন্তু ডবল কোটেশন দিয়ে শেষ কিংবা তার উল্টোটি করা যাবে না। আবার খালি স্ট্রিংও সম্ভব (যেমন : “” বা '')। আমরা এখন স্ট্রিংয়ের আরো কিছু উদাহরণ দেখবো।

>>> s = "100"
>>> print(s)
100
>>> s = "abcd1234-09232<>?323"
>>> print(s)
abcd1234-09232<>?323
>>> s = 'abc 123'
>>> print(s)
abc 123
>>> s = ''
>>> print(s)

>>> s = ""
>>> print(s)

>>>

আমরা যখন কোনো গাণিতিক অপারেশন করি, যেমন যোগ-বিয়োগ-গুণ-ভাগ, তখন যেই দুটি সংখ্যার ওপর গাণিতিক অপারেশন করা হয়, তাদেরকে একই ডেটা টাইপের হতে হয়, আর না হলে পাইথন নিজে চেষ্টা করে তাদেরকে একই ডেটা টাইপে রূপান্তর করে তারপরে গাণিতিক অপারেশন করতে। যেমন, আমরা যদি একটি ইন্টিজার ও একটি ফ্লোট ভ্যারিয়েবল যোগ করি, তাহলে যোগফল হবে ফ্লোট। কিন্তু ইন্টিজার ও স্ট্রিংয়ের যোগের বেলাতে পাইথন স্ট্রিংয়ের সঙ্গে ইন্টিজার যোগ করতে পারবে না।

>>> a = 1
>>> b = 2.5
>>> c = a + b
>>> print(c)
3.5
>>> 
>>> a = 1
>>> b = "2"
>>> c = a + b
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>>

এখন আমরা টার্মিনালে আরো কিছু কোড লিখে কিছু গাণিতিক অপারেটরের ব্যবহার দেখে নেব। এগুলো মুখস্থ করার প্রয়োজন নেই। ঠিকঠাক চর্চা করলে এমনিতেই মনে থাকবে আর মনে না থাকলে বই বা ইন্টারনেট ঘেঁটে দেখে নিলেও হবে।

ভাগ করা -
>>> 5 / 2 
2.5 
বিয়োগ করা - 
>>> 5 - 2
3
গুণ করা -
>>> 5 * 2
10
নিচের কাজটিও ভাগ, তবে ভাগফলের কেবল ইন্টিজার অংশ পাওয়া যাবে
>>> 5 // 2
>>> 2
মডুলাস কিংবা ভাগশেষ -
>>> 5 % 2
1
বর্গ করা -
>>> 5 ** 2
25

এখন আমাদের আরেকটি বিষয় জেনে নিতে হবে। আমরা যে print() লিখে কোনোকিছু স্ক্রিনে দেখাচ্ছি, এখানে print() হচ্ছে একটি ফাংশন (function)। এই ফাংশনের ভেতরে আমরা যা পাঠাবো, ফাংশনটি তা স্ক্রিনে প্রিন্ট করবে বা দেখাবে। এখন ফাংশনের ভেতরে যা পাঠানো হয়, তাকে বলে ফাংশনের আর্গুমেন্ট (argument)। print() ফাংশনটি কিভাবে কাজ করবে, সেটি কিন্তু আমাদের জানতে হবে না, পাইথনের যে সফটওয়্যার প্রোগ্রামটি চালায়, সেখানে ওই ফাংশনের কাজ বলা আছে। তাই একে আমরা বলতে পারি বিল্ট-ইন (built-in) ফাংশন। print() ফাংশনটি কিন্তু এক বা একাধিক আর্গুমেন্ট নিতে পারে। সেক্ষেত্রে আর্গুমেন্টগুলোকে কমা চিহ্ন দিয়ে পৃথক করে দিতে হবে।

>>> a = 1
>>> b = 1.2
>>> c = "hello"
>>> print(a, b, c)
1 1.2 hello
>>> print(a, b, c, "world")
1 1.2 hello world
>>>

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

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

name = input("What is your name? ")
print("Welcome to Python,", name, "!")

এখন টার্মিনালে python welcome.py লিখে এন্টার কি চাপলে নিচের লাইন প্রিন্ট হবে :

What is your name?

তারপরে নিজের নাম টাইপ করে এন্টার চাপতে হবে : What is your name? Tamim Shahriar Subeen।

তাহলে নিচের মতো আউটপুট আসবে :

Welcome to Python, Tamim Shahriar Subeen !

আমরা এতক্ষণ যা শিখলাম, সেগুলো দিয়ে এখন আরেকটি প্রোগ্রাম লিখবো।

number1 = input("Please type an integer and press enter: ")
number2 = input("Please type another integer and press enter: ")

print("number1 + number2 =", number1+number2)

ওপরের কোড আমরা arithmetic.py নামক ফাইলে সেভ করে রান করবো : python arithmetic.py কমান্ড দিয়ে।

Please type an integer and press enter: 3
Please type another integer and press enter: 6
number1 + number2 = 36

কিন্তু ফলাফল তো আসার কথা 9। তাহলে এখানে কী হচ্ছে? input() ফাংশনটি সবসময় স্ট্রিং রিটার্ন করে। তাই number1 ও number2 এখানে স্ট্রিং। আর দুটি স্ট্রিংকে আমরা যদি যোগ করি, তাহলে সেগুলো পাশাপাশি বসে আরেকটি নতুন স্ট্রিং তৈরি করবে। তাই ভ্যারিয়েবলগুলোকে ইন্টিজারে রূপান্তর করতে হবে। এজন্য আমরা int() ফাংশন ব্যবহার করতে পারি। এটিও একটি বিল্টইন ফাংশন।

number1 = input("Please type an integer and press enter: ")
number2 = input("Please type another integer and press enter: ")
number1 = int(number1)
number2 = int(number2)
print("number1 + number2 =", number1+number2)

এখন প্রোগ্রাম রান করলে ঠিকঠাক আউটপুট আসবে।

অনুশীলনী:

  • উপরের প্রোগ্রামটি পরিবর্তন করতে হবে যেন সকল প্রকারের গাণিতিক অপারেশন দেখানো যায় (+, -, *, /, %, //, **)।

  • এই অধ্যায় পড়ার সময় নিশ্চয়ই মনে অনেক প্রশ্ন জেগেছে। সেগুলোর উত্তর নিজে নিজে খুঁজে বের করার চেষ্টা করতে হবে (বিভিন্ন প্রোগ্রাম লিখে)।

results matching ""

    No results matching ""