পাইথন প্রোগ্রামিং ল্য়াংগুয়েজ-৮ - SMH Amiri

সর্বশেষ লিখাসমূহ

পাইথন প্রোগ্রামিং ল্য়াংগুয়েজ-৮

 


পাইথন ভ্যারিয়েবল

ভ্যারিয়েল হচ্ছে কম্পিউটার মেমরির মধ্যে অবস্থিত একটি জায়গা/স্থান যা সচরাচর তথ্য(Data)/মান(value) সংরক্ষণের জন্য ব্যবহৃত হয়।

মেমরির মধ্যে অবস্থিত বিভিন্ন স্থানকে আলাদাভাবে বুঝানোর জন্য ভ্য্যারিয়েবলের নামসমূহ ইউনিক(একটি হতে অন্যটি ভিন্ন) হতে হবে। পাইথনে আইডেন্টিফায়ার যে নিয়মে লিখতে হয় ভ্যারিয়েবলের নামও ঐ একই নিয়মে লিখতে হয়।

ব্যবহারের পূর্বে পাইথনে ভ্যারিয়েবল ডিক্লেয়ার(declare) করার প্রয়োজন হয় না। আমারা সাধারণভাবেই ভ্যারিয়েবলে ভ্যালু(value) এসাইন করি এবং এটি বিদ্যমান/জমা থাকে। এমনকি আমাদেরকে ভ্যারিয়েবলের টাইপও ডিক্লেয়ার করতে হয় না। আমারা যখন ভ্যালু এসাইন করি তখন এটি ডেটা/তথ্যের উপর ভিত্তিকরে নিজ থেকেই টাইপ নির্ধারণ করে।

ভ্যারিয়েবল এসাইনমেন্ট

ভ্যারিয়েবলে ভ্যালু এসাইন করার জন্য আমরা এসাইনমেন্ট অপারেটর (=) ব্যবহার করি। যেকোনো বৈধ্য(valid) ভ্যারিয়েবলের মধ্যে যেকোনো টাইপের ভ্যালু রাখা যায়।

 int_num= 10
float_num= 5.4
str_var= "SATT"

উপরের উদাহরণে তিনটি এসাইনমেন্ট স্টেটমেন্ট লেখা হয়েছে। ভ্যরিয়েবল int_num এ পূর্ণসংখ্যা(integer) 10 এসাইন করা হয়েছে।

একইভাবে, ভ্যরিয়েবল float_num এবং str_var-এর মধ্যে যথাক্রমে দশমিক সংখ্যা(floating point number) 5.4 এবং স্ট্রিং(অক্ষরের ক্রম) "SATT" এসাইন করা হয়েছে।


মাল্টিপল এসাইনমেন্ট

পাইথনে অনেক এসাইনমেন্ট একই স্টেটমেন্টে রাখা যেতে পারে। যেমন-

int_num, float_num, str_var= 10, 5.4, "SATT"

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

x = y = z = "Bangladesh"

এখানে একই স্ট্রিং "Bangladesh" কে তিনটি ভিন্ন ভ্যারিয়েবলের মধ্যে এসাইন করা হয়েছে।

পাইথন ডেটা টাইপ

পাইথনে প্রত্যেকটি ভ্যালুর ডেটা টাইপ থাকে। পাইথনে যেহেতু সবকিছুই অবজেক্ট, সুতরাং ডেটা টাইপ হচ্ছে প্রকৃতপক্ষে ক্লাস এবং ভ্যারিয়েবলগুলো এই সমস্ত ক্লাসের ইন্সট্যান্স(instance) বা অবজেক্ট।

পাইথনে ডেটার বিভিন্ন টাইপ রয়েছে। নিম্নে কিছু গুরুত্বপূর্ণ টাইপ সম্মন্ধে সংক্ষিপ্তভাবে আলোচনা করা হলোঃ


পাইথন নাম্বার

পূর্ণ সংখ্যা, দশমিক সংখ্যা এবং জটিল সংখ্যা(Integers, floating point numbers এবং complex numbers) পাইথন নাম্বার ক্যাটাগরির মধ্যে পড়ে। এগুলোকে int, float এবং complex ক্লাস হিসাবে নির্ধারণ করা হয়।

একটি ভ্যারিয়েবল অথবা ভ্যালু কোন ক্লাসের অন্তর্গত তা জানার জন্য আপনি type() ফাংশন ব্যবহার করতে পারেন এবং একটি অবজেক্ট কোন ক্লাসের অন্তর্গত তা চেক করার জন্য isinstance() ফাংশন ব্যবহার করতে পারেন।

num = 5
print(num, "is of type", type(num))

num= 5.0
print(num, "is of type", type(num))

num= 1+2j
print(num, "is complex number?", isinstance(1+2j,complex))

কম্পিউটার মেমোরির উপর ভিত্তিকরে পূর্ণ সংখ্যা যেকোনো দৈর্ঘ্যের হতে পারে।

দশমিক সংখ্যা ১৫ দশমিক পর্যন্ত নিখুঁত হতে পারে। দশমিক বিন্দুর মাধ্যমে পূর্ণ এবং দশমিক অংশকে পৃথক করা হয়। উদাহরণস্বরূপ- এখানে 5 একটি পূর্ণ সংখ্যা এবং 5.0 একটি দশমিক সংখ্যা।

জটিল সংখ্যার গঠন হচ্ছে x + yj। যেখানে, x বাস্তব অংশ এবং y কাল্পনিক অংশ। নিচে জটিল সংখ্যার কিছু উদাহরণ দেওয়া হলোঃ

>>> a = 1234567890123456789
>>> a
1234567890123456789
>>> b = 0.1234567890123456789
>>> b
0.12345678901234568
>>> c = 1+2j
>>> c
(1+2j)

লক্ষ্য করলে দখেবেন float ভ্যারিয়েবল b এর শেষে 9 বাদ পড়েছে।



পাইথন লিস্ট

লিস্ট হচ্ছে আইটেম/উপাদানের ক্রমিক অর্ডার। এই ডেটা টাইপটি পাইথনে সবচেয়ে বেশি ব্যবহৃত হয়। লিস্টে ব্যবহৃত সকল উপাদান একই টাইপের হওয়া জরুরী নয়।

পাইথনে লিস্ট ডিক্লেয়ার করা একেবারেই সহজ। লিস্ট ডিক্লেয়ার করতে [ ] ব্রাকেট ব্যবহার করা হয় এবং কমা চিহ্নের মাধ্যমে এর উপাদানগুলোকে আলাদা করা হয়। যেমন-

>>> list_example = [5, 'java', 'python']

পাইথনে 0(শূন্য) দিয়ে ইনডেক্স শুরু হয় । লিস্ট থেকে কোনো একটি উপাদান বা উপাদানের রেঞ্জ খুঁজে বের করতে আমরা স্লাইসিং অপারেটর [ ] ব্যবহার করি।

num = [10,20,30,40,50,60,70,80]

# num[3] = 40
print("num[3] = ", num[3])

# num[0:4] = [10, 20, 30, 40]
print("num[0:4] = ", num[0:4])

# num[4:] = [50, 60, 70, 80]
print("num[4:] = ", num[4:])

লিস্ট মিউটেবল(mutable) অর্থাৎ লিস্টের উপাদান পরিবর্তন করা যায়।

>>> num = [1,2,3]
>>> num[2]=4
>>> num
[1, 2, 4]

পাইথন টাপল

একইভাবে টাপলও লিস্টের ন্যায় উপাদানের ক্রমিক অর্ডার। শুধু পার্থক্য হচ্ছে টাপল ইমিউটেবল(immutable) অর্থাৎ টাপলকে পরিবর্তন করা করা যায় না।

ডেটাকে সুরিক্ষিত রাখতেই মূলত টাপল(Tuple) ব্যবহৃত হয় এবং এটি ডাইনামিক্যালি পরিবর্তন না হওয়ায় লিস্টের তুলনায় দ্রুত কাজ করে।

এটাকে প্যারেন্থেসিস() এর মাধ্যমে সংজ্ঞায়িত করা হয় এবং এর উপাদানগুলো কমা চিহ্নের মাধ্যমে পৃথক করা হয়।

>>> t_example = (2,'Python', 3+4j)

স্লাইসিং অপারেটর [] এর মাধ্যমে আমরা টাপলের উপাদানগুলোকে খুঁজে বের করতে পারি কিন্তু পরিবর্তন করতে পারি না ।

t = (2,'Python', 3+4j)

# t[1] = 'Python'
print("t[1] = ", t[1])

# t[0:3] = (5, 'program', (1+3j))
print("t[0:3] = ", t[0:3])

# Generates error
# Tuples are immutable
t[0] = 10

পাইথন স্ট্রিং

স্ট্রিং হচ্ছে ইউনিকোড ক্যারেক্টার এর ক্রম(sequence of Unicode characters)। এটা প্রকাশের জন্য আমরা সিঙ্গেল অথবা ডাবল কোটেশন ব্যবহার করতে পারি এবং মাল্টি-লাইন স্ট্রিং এর জন্য আমরা ট্রিপল কোট(''' অথবা """) ব্যবহার করতে পারি।

>>> s = "This is a string"
>>> s = '''a multiline

লিস্ট এবং টাপল এর ন্যায় স্ট্রিং এর ক্ষেত্রেও আমরা স্লাইসিং অপারেটর [] ব্যবহার করতে পারি। স্ট্রিং ইমিউটেবল, অর্থাৎ পরিবর্তন হয় না।

s = 'Hello world!'

# s[4] = 'o'
print("s[4] = ", s[4])

# s[6:11] = 'world'
print("s[6:11] = ", s[6:11])

# এরর উৎপন্ন হবে
# পাইথনে স্ট্রিং পরিবর্তন হয় না।
s[5] ='d'

পাইথন সেট

সেট হচ্ছে ইউনিক উপাদানের সংগ্রহ। এটাকে ব্রাসেস{ } এর মাধ্যমে সংজ্ঞায়িত করা হয় এবং এর মধ্যে উপাদানগুলোকে কমা দ্বারা পৃথক করা হয়। সেট এর উপাদানসমূহের ক্রম ঠিক থাকে না।

উদাহরণস্বরূপঃ

a = {5,2,3,1,4}

# সেট ভ্যারিয়েবল প্রিন্ট করা
print("a = ", a)

# data type of variable a
print(type(a))

বীজগণিতের মত পাইথনেও আমরা দুটি সেটের মধ্যে ইউনিয় এবং ইন্টারসেকশন করতে পারি। সেটের ভ্যালুসমূহ ইউনিক।

উদাহরণস্বরূপঃ

>>> a = {1,2,2,3,3,3}
>>> a
{1, 2, 3}

সেটের উপাদানসমূহের ক্রম ঠিক না থাকায় ইন্ডেক্সিং এর কোনো অর্থ নাই। সুতরাং স্লাইসিং অপারেটর[] কাজ করে না।

উদাহরণস্বরূপঃ

>>> a = {1,2,3}
>>> a[1]
Traceback (most recent call last):
  File "", line 301, in runcode
  File "", line 1, in 
TypeError: 'set' object does not support indexing

পাইথন ডিকশনারি

ডিকশনারি(Dictionary) হচ্ছে উপাদান/আইটেমসমূহের key-value জোড়ায় জোড়ায় সংগ্রহ।

আমরা যখন প্রচুর পরিমাণ ডেটা নিয়ে কাজ করি তখন এটি ব্যবহৃত হয়। ডিকশনারি থেকে নিখুঁতভাবে ডেটা পুনরুদ্ধার(retrieving) করা যায়। ভ্যালু পুনরুদ্ধার করতে অবশ্যই key জানতে হবে।

পাইথনে ব্রাসেস{} এর মধ্যে key:value জোড় তৈরি করে এবং প্রত্যেক জোড় কে কমা(,) চিহ্ন দিয়ে আলাদা করে একটি ডিকশনারি তৈরি করা হয়। key এবং value যেকোনো টাইপের হতে পারে।

উদাহরণস্বরূপঃ

উদাহরণস্বরূপঃ

>>> d = {1:'value','key':2}
>>> type(d)

ডিকশনারির উপাদানসমূহকে আপনি লিস্টের মতই এক্সেস করতে পারবেন। লিস্টে যেমন থার্ড ব্র্যাকেট এর মধ্যে ইনডেক্স দিয়ে উক্ত ইনডেক্সের ভ্যালু পুনরূদ্ধার করতে পারতেন, তেমনি এক্ষেত্রেও ইনডেক্স এর পরিবর্তে key ব্যবহার করে সংশ্লিষ্ট ভ্যালু অ্যাক্সেস করতে পারবেন।

উদাহরণস্বরূপঃ

d = {1:'value','key':2}
print(type(d))

print("d[1] = ", d[1]);

print("d['key'] = ", d['key']);

# Generates error
print("d[2] = ", d[2]);

ডেটা টাইপ রূপান্তর(Conversion between data type)

টাইপ কনভার্সন ফাংশন যেমন- int(), float(), str() ইত্যাদি ব্যবহার করে আপনি ডেটা টাইপ পরিবর্তন করতে পারবেন অর্থাৎ এক ধরণের ডেটা থেকে অন্য ধরণের ডেটায় রূপান্তর করতে পারবেন।

উদাহরণস্বরূপঃ

>>> float(10)
10.0

দশমিক থেকে পূর্ণ সংখ্যায় রূপান্তর করলে দশমিক অংশ বাদ যায় কারণ এটি শূন্যর কাছাকাছি একটি মান ফেরত দেয়।

উদাহরণস্বরূপঃ

>>> int(5.5)
5
>>> int(-5.5)
-5

স্ট্রিং এ এবং স্ট্রিং থেকে রূপান্তরের সময় সামঞ্জস্যপূর্ণ ভ্যালু ব্যবহার করতে হবে।

উদাহরণস্বরূপঃ

>>> float('5.6')
5.6
>>> str(20)
'20'
>>> int('1p')
Traceback (most recent call last):
  File "", line 301, in runcode
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: '1p'

আপনি এক ক্রমকে অন্য ক্রমেও রূপান্তর করতে পারবেন।

উদাহরণস্বরূপঃ

>>> set([1,2,3, 4])
{1, 2, 3, 4 }
>>> tuple({5,6,7, 8})
(5, 6, 7, 8)
>>> list('bangla')
['b', 'a', 'n', 'g', 'l', 'a']

উদাহরণস্বরূপঃ

>>> dict([[1,2],[3,4]])
{1: 2, 3: 4}
>>> dict([(3,9),(4,16)])
{3: 9, 4: 16}