Numeric Datatypes (int & float) in Bengali

পাইথনে সংখ্যা নিয়ে খেলা: Integer (int) এবং Float (float) ডেটা টাইপের খুঁটিনাটি

পাইথনে সংখ্যা নিয়ে খেলা: Integer (int) এবং Float (float) ডেটা টাইপের খুঁটিনাটি

আগের পোস্টে আমরা পাইথনের বিভিন্ন ডেটা টাইপের সাথে পরিচিত হয়েছি। আজ আমরা সেই তালিকার প্রথম এবং সবচেয়ে মৌলিক বিভাগ—Numeric Types—নিয়ে গভীরে ডুব দেব। সংখ্যা ছাড়া প্রোগ্রামিং প্রায় অসম্ভব, তাই এই ডেটা টাইপগুলো বোঝা অত্যন্ত জরুরি।

Numeric বিভাগের অধীনে মূলত চারটি ডেটা টাইপ রয়েছে: int, float, bool, এবং complex। এই পোস্টে আমরা প্রথম দুটি, অর্থাৎ Integer (int) এবং Float (float), নিয়ে বিস্তারিত আলোচনা করব।

চলুন, শুরু করা যাক!


১. Integer (`int`): পূর্ণসংখ্যার জগৎ

Integer বা int হলো যেকোনো পূর্ণসংখ্যা, অর্থাৎ যে সংখ্যায় কোনো দশমিক বিন্দু নেই।

ক) ঘোষণা এবং ইনিশিয়ালাইজেশন (Declaration & Initialization)

পাইথনে একটি Integer ভেরিয়েবল তৈরি করা খুবই সহজ। শুধু একটি ভেরিয়েবলের নাম দিন এবং তাতে একটি পূর্ণসংখ্যা অ্যাসাইন করুন।

# একটি Integer ভেরিয়েবল তৈরি করা
my_number = 550
print(my_number)
print(type(my_number)) # আউটপুট: <class 'int'>
খ) ধনাত্মক এবং ঋণাত্মক (Positive & Negative)

Integer ডেটা টাইপ ধনাত্মক (positive) এবং ঋণাত্মক (negative)—উভয় ধরণের সংখ্যাই সমর্থন করে।

positive_num = 550
negative_num = -99
print(positive_num)
print(negative_num)
গ) ডেটার আকার (Data Size): কোনো সীমা নেই!

অন্যান্য প্রোগ্রামিং ভাষা যেমন C++ বা Java-তে Integer সংখ্যার একটি নির্দিষ্ট সীমা থাকে। কিন্তু পাইথনের একটি অসাধারণ বৈশিষ্ট্য হলো, এখানে Integer-এর আকারের কার্যত কোনো সীমা নেই। আপনি যত বড় সংখ্যা চান, তত বড় সংখ্যাই একটি Integer ভেরিয়েবলে রাখতে পারেন।

# একটি অনেক বড় সংখ্যা
big_integer = 98765432109876543210
print(big_integer)
ঘ) মেমরি ব্যবহার (Memory Size)

পাইথনে একটি Integer ভেরিয়েবল কতটুকু মেমরি নেবে, তা নির্ভর করে সংখ্যাটির আকারের উপর। সংখ্যা যত বড় হবে, মেমরিও তত বেশি লাগবে। আমরা sys মডিউলের getsizeof() ফাংশন ব্যবহার করে এটি পরীক্ষা করতে পারি।

import sys

num_small = 100
num_large = 98765432109876543210

print("num_small এর মেমরি:", sys.getsizeof(num_small), "বাইট")
print("num_large এর মেমরি:", sys.getsizeof(num_large), "বাইট")
ঙ) Integer হলো Immutable

Immutability বা অপরিবর্তনীয়তা পাইথনের একটি গুরুত্বপূর্ণ ধারণা। এর মানে হলো, একবার একটি Integer অবজেক্ট তৈরি হয়ে গেলে, সেটিকে আর পরিবর্তন করা যায় না।

my_number = 550
print("প্রথম আইডি:", id(my_number))

# এখন মান পরিবর্তন করা হলো
my_number = 600
print("নতুন আইডি:", id(my_number))

এখানে যখন আমরা my_number-এর মান 550 থেকে 600 করেছি, পাইথন কিন্তু মেমরিতে থাকা 550 সংখ্যাটিকে পরিবর্তন করেনি। বরং, সে মেমরিতে 600-এর জন্য একটি নতুন জায়গা তৈরি করেছে এবং my_number ভেরিয়েবলটিকে সেই নতুন জায়গার দিকে নির্দেশ (point) করে দিয়েছে।

২. Float (`float`): দশমিক সংখ্যার জগৎ

Float হলো যেকোনো দশমিক বিন্দুযুক্ত সংখ্যা।

ক) ঘোষণা এবং ইনিশিয়ালাইজেশন

কোনো সংখ্যায় দশমিক বিন্দু থাকলেই পাইথন সেটিকে float হিসেবে ধরে নেয়।

item_price = 199.50
exchange_rate = 0.011
print(item_price)
print(type(item_price)) # আউটপুট: <class 'float'>
খ) সায়েন্টিফিক নোটেশন (Floating Point Representation)

অনেক বড় বা অনেক ছোট Float সংখ্যাকে একটি বিশেষ পদ্ধতিতে লেখা যায়, যাকে সায়েন্টিফিক নোটেশন বলে। এখানে e বা E ব্যবহার করে 10-এর ঘাত (power) বোঝানো হয়। এর দুটি অংশ থাকে: Mantissa (মূল সংখ্যা) এবং Exponent (ঘাত)।

উদাহরণ: 375000 সংখ্যাটিকে আমরা 375 * 10³ হিসেবে লিখতে পারি। পাইথনে এটি হবে 375E3

গ) ধনাত্মক এবং ঋণাত্মক

float সংখ্যাও ধনাত্মক ও ঋণাত্মক হতে পারে। সায়েন্টিফিক নোটেশনে মূল সংখ্যা (mantissa) এবং ঘাত (exponent) উভয়ই ধনাত্মক বা ঋণাত্মক হতে পারে।

# বিভিন্ন ধরণের float সংখ্যা
num1 = 35.25
num2 = -0.75
num3 = -1.5E2   # মানে -1.5 * 100 = -150.0
num4 = 2.5e-3   # মানে 2.5 / 1000 = 0.0025

print(num1, num2, num3, num4)

উপসংহার

আজ আমরা পাইথনের দুটি মৌলিক সাংখ্যিক ডেটা টাইপ—int এবং float—সম্পর্কে বিস্তারিত জানলাম। আমরা শিখলাম:

  • int হলো সীমাহীন আকারের পূর্ণসংখ্যা।
  • float হলো দশমিক সংখ্যা এবং একে সায়েন্টিফিক নোটেশনেও লেখা যায়।
  • Integer একটি Immutable ডেটা টাইপ।
  • sys.getsizeof() দিয়ে মেমরি এবং id() দিয়ে মেমরি অ্যাড্রেস পরীক্ষা করা যায়।

এই ধারণাগুলো ভালোভাবে আয়ত্ত করা শক্তিশালী এবং নির্ভুল প্রোগ্রাম লেখার জন্য অপরিহার্য। পরবর্তী পোস্টে আমরা bool এবং complex ডেটা টাইপ নিয়ে আলোচনা করব।