আগের অধ্যায় গুলোতে আমরা একটা ভ্যারিয়েবলে কোন ভ্যালু এসাইন করতে সমান চিহ্ন (=) ব্যবহার করেছি। এই সমান চিহ্ন হচ্ছে একটা অপারেটর, যাকে বলা হয় এসাইন অপারেটর। এছাড়া প্রথম অধ্যায় আমরা যোগ, বিয়োগ, গুণ, ভাগ, ইত্যাদি করা শিখেছি। এগুলোও হচ্ছে অপারেটর। এগুলোকে বলা হয় এরিথম্যাটিক অপারেটর। এরিথম্যাটিক অপারেটর, এসাইন অপারেটর ছাড়াও আরো অনেক ধরণের অপারেটর রয়েছে। এ অধ্যায় আমরা সেগুলো সম্পর্কে জানব।
অপারেটর গুলো যে ভ্যারিয়েবল বা যে ডেটার উপর কাজ করে, তাকে আমরা বলি অপারেন্ড (Operand)। যেমন 4 + 5 এ 4 এবং 5 হচ্ছে অপারেন্ড এবং + হচ্ছে অপারেটর।
কিছু কিছু অপারেটরের জন্য একটা অপারেন্ড লাগে। কিছু কিছু অপারেটরের জন্য লাগে দুই বা তার অধিক অপারেন্ড।
পাইথন প্রোগ্রামিং এ যে অপারেটর গুলো নিয়ে কাজ করা যায়, সেগুলো হচ্ছেঃ
- অ্যারিথমেটিক অপারেটর (Arithmetic Operators)
- এসাইনমেন্ট অপারেটর (Assignment Operators)
- রিলেশনাল বা কম্পারিজন অপারেটর (Relational or Comparison Operators)
- লজিক্যাল অপারেটর ( Logical Operators)
- বিটওয়াইজ অপারেটর (Bitwise Operators)
- মেম্বারশিপ অপারেটর (Membership Operators)
- আইডেন্টিটি অপারেটর (Identity Operators)
অ্যারিথমেটিক অপারেটর
পাটি গণিতে আমরা যে সব অপারেটর ব্যবহার করেছি যেমন যোগ, গুন, ভাগ ইত্যাদি। সে গুলোই হচ্ছে অ্যারিথম্যাটিক অপারেটর (Arithmatic Oparetors)। পাইথনের অ্যারিথমেটিক অপারেটর গুলো হচ্ছেঃ
অপারেটর | ব্যাবহার |
+ | যোগ |
– | বিয়োগ |
* | গুণ |
/ | ভাগ |
% | মডুলাস |
** | এক্সপোনেন্ট বা পাওয়ার |
// | ফ্লোর ডিভিশন |
অ্যারিথমেটিক অপারেটর গুলোর প্রয়োগ
এর আগের প্রোগ্রাম গুলোতে আমরা এই অ্যারিথম্যাটিক অপারেটর গুলো ব্যবহার করেছি। এগুলো গণিতে আমরা যেভাবে কাজ করে, সেভাবে পাইথন প্রোগ্রামিং এ ও কাজ করবে। এগুলো সহজে কিভাবে প্রোগ্রামে কাজে লাগানো যা, তা আমরা ছোট খাটো অংক করে দেখতে পারি। পাইথনে সহজেই আমরা যোগ, বিয়োগ, গুণ, ভাগ করে ফেলতে পারি।
যোগঃ
x = 50 y = 11 z = x + y print(z)
বিয়োগঃ
x = 50 y = 11 z = x - y print(z)
বা এভাবেঃ
x = 50 y = 11 print ( x – y)
গুনঃ
x = 50 y = 11 z = x * y print(z)
ভাগঃ
x = 50 y = 11 z = x / y print(z)
রিমাইন্ডার বা ভাগশেষ
যোগ, বিয়োগ, গুণ, ভাগ চিহ্ন এরপর আমরা আরকেটা চিহ্ন এর সাথে পরিচিত হব। আর তা হচ্ছে মডুলাস (%) বা মড। আমরা একে শতকরা বা পার্সেন্ট চিহ্ন হিসেবে জানতাম। প্রোগ্রামিং এ এর কাজ হচ্ছে ভাগ শেষ বের করা। যেমনঃ
x = 50 y = 11 z = x % y print(z)
যা আউটপুট দিবে 6।
৫০ কে ১১ দিয়ে ভাগ দিলে ভাগশেষ থাকে ৬। কিভাবে, তা সহজে আমরা বের করে ফেলতে পারি। যেমন ১১ কে ৪ দিয় গুন করলে হয় ৪৪। ৫০ থেকে ৪৪ গেলে থাকে ৬। আমরা ছোটবেলায় যেভাবে ভাগশেষ বের করতাম, সেভাবে কাগজে কলমে করে দেখতে পারি।
ঋণাত্মক সংখ্যার ক্ষেত্রে একটু অন্যরকম আউটপুট দিবে। ভাজক যদি ঋণাত্মক সংখ্যা হয়, তাহলে ভাগশেষ ও ঋণাত্মক হবে। নিচের প্রগ্রামটি দেখিঃ
print(15 % 4) print(-15 % 4) print(15 % -4) print(-15 % -4)
আউটপুট হচ্ছেঃ
3 1 -1 -3
আমরা জানি ঋণাত্মক সংখ্যার ক্ষেত্রে যত উপরের দিকে যায়, তত সংখ্যার মান কমতে থাকে। এই জন্য -15 % 4 এর ক্ষেত্রে আমরা ভাগশেষ পেয়েছি 1। কারণ -16 থেকে -15 বড়। তো ছোট যে সংখ্যা -১৬, তার সাথে এক যোগ করলে হবে -১৫। এ জন্য print(-15 % 4) এর ক্ষেত্রে আমরা পেয়েছি 1। বুঝতে অসুবিধে হলে ক্যালকুলেটর অথবা কাগজে কলমে হিসেব করে দেখা যেতে পারে।
মডুলাস অ্যারিথমেটিক
মড ( Mode – %) কে বলা হয় মডুলাস অপারেটর। একটু আগে জেনেছি যে এর মানে মূলত ভাগশেষ ভ্যালু। এই Mode (%) নিয়ে কাজ করার একটা সুন্দর নাম রয়েছে, যাকে বলে Modulus Arithmetic। মডের এর অনেক কাজ রয়েছে। প্রতিদিন ব্যবহার করি, এমন একটা উদাহরন দেওয়া যাক।
আমরা প্রতিদিন যে সময় হিসেব করি, তা একটা মডুলাস অ্যারিথম্যাটিক বা মডুলাস পাটীগণিত। আমরা যদি ১২ ঘন্টার ঘড়ির কথা চিন্তা করি, তাহলে দেখব ১২ এর পর ১৩ না হয়ে ১ টা ধরি আমরা। আর ঘড়ির এই হিসাবকে বলা যায় ১২ এর মডুলাস অ্যারিথম্যাটিক। আমরা করি কি, ঘন্টাকে ১২ দিয়ে ভাগ করে দি। ১ টা বাজলেও ১২ দিয়ে ভাগ করি। ২ টা বাজলেও। তেমনি ১৫টা বাজলেও। তো যখন ১৫টা বাজে, তখন আমরা মুলত দেখি (১৫%১২) = ৩ বা তিনটা। আস্তে আস্তে আমরা এরকম অনেক গুলো মডুলাস অ্যারিথম্যাটিক নিয়ে কাজ করতে পারব।
মূলত মডের কাজ হচ্ছে একটা লিমিট সেট করে দেওয়া। ঐ লিমিট ক্রস করলে আবার প্রথম থেকে কাউন্ট শুরু করা। ঘড়ির টাইমের ক্ষেত্রে যেমন হয়, তেমনি।
২৪ ঘন্টার ঘড়ি গুলোতে ২৪ হচ্ছে সর্বোচ্চ ভ্যালু। তো ২৪ এর পর ২৫ না হয়ে হয় (২৫%২৪) = ১।
১৫%৪ = কত হবে?
১৫%৪ এটার উত্তর হবে ৩ কারন ১৫ কে ৪ দ্বারা ভাগ করলে ভাগশেষ থাকে ৩।
৪.১.২ এক্সপোনেন্ট অপারেটর
যদি আমরা লিখি 10*6 তাহলে পাবো 60। একটা এসটেরিক্স (*) হচ্ছে সাধারণ গুণ করার অপারেটর। কিন্তু যদি লিখি 10**6 মানে দুইটা এসটেরিক্স ব্যবহার করি, তাহলে এর মানে হছে 10 to the power 6 বা 106। এবং যার মান হবে 1000000। অর্থাৎ a**b এর মানে ab। নিচের প্রোগ্রামটা রান করে দেখতে পারি।
print(4**3)
যা আউটপুট দিবেঃ 64
ফ্লোর ডিভিশন
7 কে 2 দ্বারা ভাগ করতে আমরা লিখি 7/2। আর এর মান পাবো 3.5। কিন্তু যখন 7//2 লিখব, তখন মান পাবো 3। এটাকে বলে ফ্লোর ডিভিশন। এটি ভাগফল হিসেবে ভগ্নাংশের কাছাকাছি পূর্ণ সংখ্যা রিটার্ণ করে।
এটি ধণাত্ত্বক ভাজ্য অথবা ভাজকের ক্ষেত্রে দশমিকের পরের সংখ্যা বাদ দিয়ে পূর্ণ সংখ্যা রিটার্ণ করে। আবার যদি ভাজ্য অথবা ভাজক ঋণাত্ত্বক হয়, তাহলে পরবর্তী ঋণাত্ত্বক সংখ্যা রিটার্ণ করবে। যেমন print(-11//3) ক্ষেত্রে রিটার্ণ করবে -4।
print(7//2) print(-11//3) print(-11//-3) print(11//-3)
আউটপুট পাবোঃ
3 -4 3 -4
এসাইনমেন্ট অপারেটর (Assignment operator)
ভ্যারিয়েবলে কোন ভ্যালু এসাইন করা হচ্ছে এসাইনমেন্ট অপারেটরের কাজ। আগের অধ্যায় গুলোতে আমরা কিভাবে একটা ভ্যারিয়েবলে এসাইন করা হয়, তা শিখেছি। আমরা আগে শুধু একটা মাত্র এসাইনমেন্ট অপারেটর Equal to (=) এসাইনমেন্ট অপারেটর ব্যবহার করেছি। এটি ছাড়াও আরো অনেক গুলো এসাইনমেন্ট অপারেটর রয়েছে। যেমনঃ
- যোগ করে এসাইন (Add & assign) : +=
- বিয়োগ করে এসাইন (Subtract & assign) : -=
- গুণ করে এসাইন (Multiply & assign) : *=
- ভাগ করে এসাইন (Divide & assign) : /=
- মড করে এসাইন (Modulus & assign) : %=
- এক্সপোনেন্ট ভ্যালু নিয়ে এসাইন (Exponent & assign) : **=
- ফ্লোর ভ্যালু নিয়ে এসাইন (Floor & assign) : //=
যোগ করে এসাইন করা ( Add & assign) : +=
যোগ করে এসাইন করাকে বলতে বলা যায় add & assign। এটাকে সাধারণত এভাবে লেখা হয়ঃ
x += y
যা মূলত x = x + y এর সমান। দ্রুত লেখার জন্য বা কোড কমানোর জন্য সর্ট ফরমে লেখা হয়।
মনে করি x=3 , y=5.
যদি লেখা হয়: x+=y তাহলে x এর মান হবে x = x+y অর্থাৎ x = 8। আমরা যদি নিচের প্রোগ্রামটা রান করে দেখি, তাহলে আউটপুট পাবো 8।
x=3 y=5 x+=y print(x)
x = x+y লেখা এবং x+=y লেখা একই অর্থ বহন করে।
বিয়োগ করে এসাইন (Subtract & assign) : -=
দুইটা ভ্যালু বিয়োগ করে একটা ভ্যারিয়েবলে রাখার সর্ট ফরম হচ্ছে এই বিয়োগ করে এসাইন বা Subsctact & Assign। যাকে সাধারণত নিচের মত করে লেখা হয়।
x -= y
যার পূর্ণরূপ হচ্ছেঃ
x = x - y
মনে করি x = 8 , y = 5।
যদি লেখা হয়ঃ x -= y তাহলে x এর মান হবে x = x – y অর্থাৎ x = 3।
x = 8 y = 5 x -= y print(x)
উপরের প্রোগ্রামটা রান করিয়ে দেখলে আমরা আউটপুট পাবোঃ 3
গুণ করে এসাইন (Multiply & assign) : *=
গুণ করে এসাইনকে বলতে পারি Multiply & Assign। যা নিচের মত করে লেখা হয়ঃ
x *= y
যার পূর্ণরূপ হচ্ছেঃ
x = x * y
নিচের প্রোগ্রামটি রান করে দেখিঃ
x = 8 y = 5 x *= y print(x)
x এর ভ্যালু প্রিন্ট করলে আমরা পাবো 40;
ভাগ করে এসাইন (Divide & assign) : /=
ভাগ করে এসাইনকে বলতে পারি Divide & Assign। যা নিচের মত করে লেখা হয়ঃ
x /= y
যার পূর্ণরূপ হচ্ছেঃ
x = x / y
নিচের প্রোগ্রামটি রান করে দেখিঃ
x = 12 y = 3 x /= y print(x)
x এর ভ্যালু প্রিন্ট করলে আমরা পাবো 4.0।
মড করে এসাইন (Modulus & assign) : %=
মড করে এসাইন এর ক্ষেত্রে এর ডান পাশের অপারেন্ড এর মড ভ্যালু বাম পাশের ভ্যারিয়েবলে এসাইন করে।
যা নিচের মত করে লেখা হয়ঃ
x //= y
যার পূর্ণরূপ হচ্ছেঃ
x = x // y
ধরে নেই x = 11, y = 3। নিচের প্রোগ্রামটি রান করে দেখিঃ
x = 11 y = 3 x %= y print(x)
Mode (%) মানে আমরা জানি ভাগশেষ। তাই আমরা এখানে x কে y দিয়ে ভাগ করলে যে ভাগশেষ থাকবে, তাই পাবো। এখানে x এর ভ্যালু পাবো 2।
এক্সপোনেন্ট ভ্যালু নিয়ে এসাইন (Exponent & assign) : **=
এক্সপোনেন্ট ভ্যালু নিয়ে এসাইন এর ক্ষেত্রে বাম পাশের ভ্যালুর সূচক হিসেবে ডান পাশের ভ্যালুটি ব্যবহার হয়। এবং এই এক্সপোনেন্ট বা সূচক মান নিয়ে বাম পাশের ভ্যারিয়েবলে এসাইন করা হয়।
যা নিচের মত করে লেখা হয়ঃ
x **= y
যার পূর্ণরূপ হচ্ছেঃ
x = x ** y
আরো সহজ ভাবে বললে x = xy
ধরে নেই x = 2, y = 3। তাহলে x **= y এর মানে হবে x = 23। নিচের প্রোগ্রামটি রান করে দেখিঃ
x = 2 y = 3 x **= y print(x)
যেখানে আমরা আউটপুট পাবো ৮।
ফ্লোর ভ্যালু নিয়ে এসাইন (Floor & assign) : //=
ফ্লোর ইকুয়াল টু অপারেটরের কাজ হচ্ছে এর অপারেন্ডের ভ্যালু দুইটাকে ভাগ করে তার ফ্লোর ভ্যালু নিয়ে তা বাম পাশের ভ্যারিয়েবলটিতে এসাইন করে।
x //= y
যার পূর্ণরূপ হচ্ছেঃ
x = x // y
আমরা জেনেছি দুইটা ভাগ চিহ্ন (//) হচ্ছে ফ্লোর ডিভিশন। যা ভাগফল হিসেবে ভগ্নাংশের কাছাকাছি একটা পূর্ণ সংখ্যা রিটার্ণ করে।
x = 7 y = 2 x //= y print(x)
এখানে x এর মান প্রিন্ট করলে আমরা পাবো 3।
অন্যান্য এসাইনমেন্ট অপারেটর
উপারের এসাইনমেন্ট অপারেটর গুলো ছাড়াও পাইথনে নিচের অপারেটর গুলো সাপোর্ট করে। সংক্ষেপে সেগুলোর ব্যবহার দেওয়া হলো।
&= বিটওয়াজ AND এবং এসাইনঃ x &= y যার পূর্ণরুপ x = x & y
|= বিটওয়াইজ OR এবং এসাইনঃ x |= y যার পূর্ণরুপ x = x | y
^= বিটওয়াইজ xOR এবং এসাইনঃ x ^= y যার পূর্ণরুপ x = x ^ y
>>= বিটওয়াইজ রাইট শিফট এবং এসাইনঃ x >>= y যার পূর্ণরুপ x = x >> y
<<= বিটওয়াইজ লেফট শিফট এবং এসাইনঃ x <<= y যার পূর্ণরুপ x = x << y
লজিক্যাল অপারেটর (Logical Operator)
পাইথন প্রোগ্রামিং এ তিনটি লজিক্যাল অপারেটর রয়েছে। নিচের টেবিল দেখিঃ
অপারেটর | অর্থ |
and | লজিক্যাল অ্যান্ড (Logical and) |
or | লজিক্যাল অর (Logical or) |
not | লজিক্যাল নট (Logical not) |
and অপারেটর
দুই বা ততোধিক অপারেন্ডের মধ্যে সব গুলোর সত্যতা যাচাই করার জন্য and অপারেটর ব্যবহার করা হয়।
যেমনঃ
a = True b = True print(a and b)
যা আউটোপুট দিবে True।
এখানে a এবং b দুইটাই সত্য। তাই a and b এর মান ও সত্য। যদি এদের যে কোন একটা মিথ্যে হয়, তাহলে a and b এর মানও মিথ্যে হবে।
a = True b = False print(a and b)
আমরা চাইলে যে কোন এক্সপ্রেশনের সত্যতা এভাবে যাচাই করতে পারি। মনে করি x, y, z তিনটি ভ্যারিয়েবল। এখন (x < y) and (y < z) হচ্ছে একটি এক্সপ্রেশন। এখন এই পুরো এক্সপ্রেশন এর মান সত্য হবে যদি (x < y) এবং (y < z) সত্য হয়। (x < y) এবং (y < z) এর যে কোন একটি মিথ্যা হলে (x < y) and (y < z) এর মান মিথ্যে হবে। নিচের প্রোগ্রামটি দেখিঃ
যার আউটপুট পাবো True।
এখানে x এর মান 4, y এর মান 6। এর মানে (x < y) এক্সপ্রেশনটি সত্য। একই ভাবে (y < z) এক্সপ্রেশনটির মানও সত্য। কারণ y এর ভ্যালু z এর ভ্যালু থেকে ছোট।
এখন যদি আমরা z = 3 সেট করে প্রোগ্রামটি রান করি, তাহলে আউটপুট পাবো False।
x = 4 y = 6 z = 3 print((x < y) and (y < z))
কারণ হচ্ছে তখন (y < z) এক্সপ্রেশনটি মিথ্যে হয়ে যায়। আর তাই পুরো (x < y) and (y < z) এক্সপ্রেশনটিও মিথ্যে হয়ে যায়।
or অপারেটর
দুই বা এর অধিক এক্সপ্রেশনের সত্যতা যাচাই এর জন্য or অপারেটর ব্যবহার করা হয়। এখানে যে কোন একটি এক্সপ্রেশন সত্য হলেই পুরো স্টেটমেন্ট সত্য হবে। যেমনঃ
a = True b = False print(a and b)
যার আউটপুট পাবো True।
এখানে a সত্য, b ও মিথ্যে। or অপারেটরের ক্ষেত্রে যে কোন একটা সত্য হলেই পুরা এক্সপ্রেশন সত্য হয়। তাই a or b এর মান ও সত্য। যদি দুইটাই মিথ্যে হয়, তাহলে a or b এর মানও মিথ্যে হবে।
a = False b = False print(a and b)
মনে করি x, y, z তিনটি ভ্যারিয়েবল। এখন (x <y ) or (y < z) হচ্ছে একটি এক্সপ্রেশন। এখন এই পুরো এক্সপ্রেশনের মান সত্য হবে যদি (x < y) অথবা (y < z) এর যে কোন একটি সত্য হয়। (x < y) এবং (y < z) দুটি একসাথে মিথ্যা হলে (x < y) or (y < z) এর মান মিথ্যে হবে। নিচের প্রোগ্রামটি দেখিঃ
x = 4 y = 6 z = 3 print((x < y) or (y < z))
যার আউটপুট পাবো True।
এখানে (y < z) এক্সপ্রেশনটি কিন্তু সত্য নয়। কারণ y এর মান z এর মান থেকে ছোট নয়, বড়। এরপরও আমরা আউটপুট True পেয়েছি কারণ (x < y)
not অপারেটর
কোন একটা সত্য ভ্যালুকে মিথ্যে অথবা একটা মিথ্যে ভ্যালুকে সত্য করার জন্য not অপারেটর ব্যবহার করা হয়। যেমনঃ
a = True b = False print(not a) print(not b)
আউটপুট পাবো
False True
এই লজিক্যাল অপারেটর গুলো পরবর্তীতে লজিক্যাল কন্ডিশনে আমরা ব্যবহার করব।
রিলেশনাল বা কম্পারিজন অপারেটর
কোন কিছুর তুলনা করার জন্য কম্পারিজন (Comparison) অপারেটর ব্যবহার করা হয়। এটাকে রিলেশনাল (Relational) অপারেটরও বলা হয়।
পাইথন প্রোগ্রামিং এর কম্পারিজন অপারেটর গুলোঃ
অপারেটর | অর্থ |
== | Equal to |
!= | Not Equal to |
< | Less than |
<= | Less than or equal to |
> | Greater then |
>= | Greater than or equal to |
ইকুয়াল টু অপারেটর
দুটি সমান চিহ্ন (==) দিয়ে Equal to operator প্রকাশ করে। যাকে ইকুয়ালিটি অপারেটরও বলে।
x = 5 y = 6 print(x == y)
যা আউটপুট দিবে False।
এখানে x এর মান 5। y এর মান 6। x==y দিয়ে x এবং y এর মান সমান কিনা, তা যাচাই করি। কিন্ত x এবং y এর মান সমান নয়। সুতরাং x==y এক্সপ্রেশনটি মিথ্যে এবং এর মান হবে False।
সত্য হতে হলে দুইটা মানই সমান হতে হবে। এখন ভ্যারিয়েবল ভ্যালু সমান দিয়ে প্রোগ্রাম রান করে দেখলে দেখব আউটপুট দিবে True।
এখানে মনে রাখতে হবে যে এসাইনমেন্ট অপারেট মানে একটি সমান চিহ্ন (=) এবং ইকুয়ালিটি অপারেটর মানে দুইটি সমান চিহ্ন (==) সম্পূর্নই ভিন্ন। ভ্যারিয়েবলের মধ্যে কোন ভ্যালু এসাইন করার এসাইনমেন্ট অপারেটর (=) ব্যবহার করা হয়। আর দুইটা এক্সপ্রেশন এর মান সমান কিনা, তা দেখার জন্য ইকুয়ালিটি অপারেটর (==) ব্যবহার করা হয়। এখানে একটার স্থানে আরেকটা কোন অবস্থাতেই বসানো যাবেনা। তাহলে প্রোগ্রামে ভুল আসবে।
নট ইকুয়াল টু অপারেটর
একটি !(উচ্চারণ নট) ও একটি সমান চিহ্ন দিয়ে Not equal to অপারেটর (!=) বুঝায়। যাকে নন ইকুয়ালিটি অপারেটরও বলে। নিচের প্রোগ্রামটি দেখিঃ
x = 5 y = 6 print(x != y)
যা আউটপুট দিবে True। নন ইকুয়ালিটি অপারেটর দিয়ে দুইটি এক্সপ্রেশন অসমান কিনা, তা যাচাই করা হয়। এখানে যেহেতু x এবং y দুইটাই অসমান, তাই (x != y) এর মান পেয়েছি True। দুইটা ভ্যালু যদি সমান করে দেই, তাহলে আবার পাবো False। নিচের প্রোগ্রামটি রান করে দেখতে পারিঃ
x = 5 y = 5 print(x != y)
অন্যান্য রিলেশনাল অপারেটর
দুইটা এক্সপ্রেশনের মধ্যে প্রথমটা দ্বিতীয়টা থেকে ছোট কিনা তা যাচাই করার জন্য লেস দ্যান অপারেটর (<) ব্যবহার করা হয়। আবার প্রথমটা দ্বিতীয়টা থেকে বড় কিনা তা যাচাই করার জন্য লেস দ্যান অপারেটর (<) ব্যবহার করা হয়। যেমনঃ
x = 5 y = 6 print(x < y) print(x > y)
আটপুট পাবোঃ
True False
যেহেতু x এর মান y থেকে ছোট, তাই (x < y) সত্য এবং আউটপুট পেয়েছি True। দ্বিতীয় ক্ষেত্রে আউটপুট পেয়েছি False। কারণ x এর মান y থেকে যেহেতু বড় নয়। একটা মজার ব্যাপার খেয়াল করব যখন দুইটা ভ্যালুই সমান হবেঃ
x = 5 y = 5 print(x < y) print(x > y)
আউটপুট পাবো
False False
এখানে (x < y) এর ক্ষেত্রে যাচাই করা হচ্ছে x এর মান y থেকে ছোট কিনা, যেহেতু ছোট নয়, তাই আউটপুট পেয়েছি False। একই ভাবে (x > y) এর ক্ষেত্রে যাচাই করা হচ্ছে x কি y থেকে বড় কিনা, কিন্তু যেহেতু x এর মান y থেকে বড় না, তাই এখানেও False পাচ্ছি। আর এ সমস্যা সমাধানের জন্য সমান অথবা ছোট বা সমান অথবা বড় যাচাই করার জন্য আরো দুইটা অপারেটর রয়েছে। নিচের প্রোগ্রামটি দেখিঃ [python] x = 5 y = 5 print(x <= y) print(x >= y) [/python] এক্ষেত্রে আউটপুট পাবোঃ [python] True True [/python] কারন দুইটা এক্সপ্রেশনই সত্য। ছোট অথবা সমান যেমন সত্য, বড় অথবা সমানও সত্য। একটা ভ্যালু পরিবর্তন করে দেখিঃ [python] x = 5 y = 6 print(x <= y) print(x &>= y) [/python] এখন আউটপুট পাবোঃ [python] True False [/python] এ ক্ষেত্রে এখন যখন আমরা যাচাই করেছি ছোট অথবা সমান কিনা, তখন সত্য এসেচ্ছে। আর যখন যাচাই করেছি বড় অথবা সমান কিনা, তখন মিথ্যে এসেছে। রিলেশনাল এবং লজিক্যাল অপারেটরের কয়েকটি উদাহরন নিচে দেওয়া হল: মনে করি x, y, z তিনটি ভ্যারিয়েবল। x এর মান 5, y এর মান 6 এবং z এর মান 7।
এক্সপ্রেশন | মান |
x < y | True |
x == 5 | True |
y == 4 | False |
(x + y) > z | True |
(x + y) <= z | False |
x != y | True |
(x < y) & (y == 6) | True |
(x < y ) & (z !=y) | True |
(x > y) | ( z != y) | True |
(x > y) & (z != y) | False |
(x < y) & (z == y) | False |
(x < y ) | (z == y) | True |
প্রোগ্রাম লিখে যাচাই করে দেখতে পারি আমরা চাইলেঃ
x = 5 y = 6 z = 7 print(x < y) print(x == 5) print(y == 4) print((x + y) > z) print((x + y) <= z) print(x != y) print((x < y) & (y == 6)) print((x < y) & (z !=y)) print((x > y) | ( z != y)) print((x > y) & (z != y)) print((x < y) & (z == y)) print((x < y) | (z == y))
যা আউটপুট দিবেঃ True, True, False, True, False, True, True, True, True, False, False, True। পড়ার সুবিধার্থে এক লাইনে সব লিখেছি।
বিটওয়াইজ অপারেটর
পাইথনে সহজেই আমরা বিটওয়াইজ অপারেশন করতে পারি। নিচে বিটওয়াইজ অপারেটর গুলোর লিস্ট দেওয়া হলোঃ
এক্সপ্রেশন | মান |
& | বাইনারি অ্যান্ড (Binary AND) |
| | বাইনারি অর (Binary OR) |
^ | বাইনারি এক্সক্লুসিভ অর (Binary XOR) |
~ | বাইনারি নট(Binary NOT) |
<< | বাইনারি লেফট শিফট (Binary Left Shift) |
>> | বাইনারি রাইট শিফট (Binary Right Shift) |
আমরা জানি কম্পিউটারের সকল ডেটা মেমরিতে সংরক্ষিত থাকে। আর ডেটা গুলো সংরক্ষিত থাকে বিট আকারে। অর্থাৎ 0 অথবা 1 আকারে। কোন ভ্যারিয়েবলের বাইনারি রূপ দেখতে চাইলে আমরা bin() ফাংশন ব্যবহার করতে পারি। যেমন নিচের প্রোগ্রামটি দেখিঃ
x = 99 print(bin(x))
যা আউটপুট দিবেঃ
0b1100011
এখানে প্রথমে থাকা 0b দিয়ে বেজ বাইনারি বুঝিয়েছে। 99 এর বাইনারি রূপ হচ্ছে 1100011।
বাইনারি অ্যান্ড
9 এর বাইনারি রূপ হচ্ছে 1001। আর দশের বাইনারি রূপ হচ্ছে 1010। ধরি a =9, b=10 এরপর এ দুইটার উপর আমরা বিভিন্ন বিটওয়াইজ অপারেশন করতে পারি। যেমন বাইনারি আন্ড অপারেশন করতে চাইলেঃ
a = 9 b = 10 c = a & b print(bin(c))
যা আউটপুট দিবেঃ 0b1000
বাইনারি অর
a = 9 b = 10 c = a | b print(bin(c))
যা আউটপুট দিবেঃ 0b1011
বাইনারি XOR:
a = 9 b = 10 c = a ^ b print(bin(c))
যা আউটপুট দিবেঃ 0b11
বাইনারি NOT
বাইনারি নটের কাজ হচ্ছে এর বিট গুলো 0 থাকলে 1 করা, 1 থাকলে 0 করা এবং চিহ্ন পরিবর্তন করা।
a = 9 c = ~a print(bin(c))
যা আউটপুট দিবেঃ -0b1010
আরেকটু ভাল ভাবে বুঝতে চাইলে নিচের প্রোগ্রামটা রান করে দেখতে পারিঃ
a = 9 c = ~a print(bin(c)) print(bin(a))
যার আউটপুট পাবো এমনঃ
-0b1010 0b1001
লক্ষ্য করলে দেখতে পাবো যে 0 থাকলে 1 হয়েছে, 1 থাকলে 0 হয়েছে এবং চিহ্ন পরিবর্তন হয়ে গিয়েছে।
বাইনারি লেফট শিফট (Binary Left Shift)
বাইনারিতে লেফট শিফটি দিয়ে গুণের কাজ করা হয়। ২ ঘর লেফট শিফট নেওয়া মানে হচ্ছে 22 বা 4 দিয়ে গুণ করা। 3 ঘর লেফট শিফট মানে হচ্ছে 23 বা 8 দিয়ে গুণ করা। 4 ঘর লেফট শিফট মানে হচ্ছে 24 বা 16 দিয়ে গুণ করা ইত্যাদি।
a = 9 c = a << 2 print(bin(c)) print(c)
যার আউটপুট হচ্ছেঃ
0b100100 36
দ্বিতীয় লাইনে আমরা দশমিক সংখ্যাটা প্রিন্ট করে দেখেছি এর মান কত। আমরা জেনেছি 2 ঘর লেফট শিফট মানে হচ্ছে 22 বা 4 দিয়ে গুণ করা। 9 কে 4 দিয়ে গুণ করলে আমরা পাবো 36। আরেকটা উদাহরণ দেখিঃ
a = 9 c = a << 5 print(bin(c)) print(c)
যার আউটপুট হচ্ছেঃ
0b100100000 288
এখানে আমরা 5 ঘর রাইট শিফট করেছি। 5 ঘর রাইট শিফট মানে হচ্ছে 25 বা 32 দিয়ে গুণ করা। 9 কে 32 দিয়ে গুণ করলে পাবো 288।
বাইনারি রাইট শিফট (Binary Right Shift)
বাইনারিতে রাইট শিফট দিয়ে ভাগের কাজ করা হয়। ২ ঘর রাইট শিফট মানে হচ্ছে 22 বা 4 দিয়ে ভাগ করা। 3 ঘর লেফট শিফট মানে হচ্ছে 23 বা 8 দিয়ে ভাগ করা। 4 ঘর লেফট শিফট মানে হচ্ছে 24 বা 16 দিয়ে ভাগ করা ইত্যাদি।
a = 9 c = a >> 2 print(bin(c)) print(c)
আউটপুট পাবোঃ
0b10 2
এক্ষেত্রে দশমিকের পরের অংশ বাদ দিয়ে দেওয়া হচ্ছে।
মেম্বারশিপ অপারেটর
মেম্বারশিপ অপারেটর দিয়ে কোন লিস্টে কোন আইটেম আছে কি না, তা যাচাই করা হয়। পাইথনে দুইটা মেম্বারশিপ অপারেটর রয়েছেঃ
- in
- not in
list = [1, 2, 3, 4, 5 ]
উপরে একটা লিস্ট রয়েছে। এখন আমরা নিচের মত করে কোড লিখতে পারিঃ
items = [1, 2, 3, 4, 5] if 2 in items: print(‘item exist in the list’) else: print(‘item is not exist in the list’)
আউটপুট পাবোঃ
item exist in the list
এছাড়া একটি আইটেম লিস্টে না থাকলেও আমরা তা যাচাই করতে পারিঃ
items = [1, 2, 3, 4, 5 ] if 6 not in items: print(‘item is not exist in the list’)
আমরা আউটপুট পাবোঃ
item is not exist in the list
if else এর সম্পর্কে আমরা এখনো পরিচিত হইনি। কন্ট্রোল স্ট্যাটমেন্ট অধ্যায়ে আমরা পরিচিত হব। এখানে বুঝার সুবিধার্থে ব্যবহার করা হয়েছে।
আইডেন্টিটি অপারেটর
আইডেন্টিটি অপারেটর দিয়ে দুইটা অবজেক্টের মেমরি লোকেশন একই কিনা, তা যাচাই করা হয়। পাইথনে দুইটা আইডেন্টিটি অপারেটর রয়েছেঃ
- is
- is not
আমরা যদি একই ভ্যালু দুইটা ভ্যারিয়েবলের রাখি, মেমরি সেভ করার জন্য ভ্যারিয়েবল দুইটাই একই মেমরি লোকেশনে পয়েন্ট করা থাকে। যেমনঃ
a = 20 b = 20 if a is b: print("a and b have same identity") else: print("a and b do not have same identity") [python] উপরের প্রোগ্রাম রান করলে দেখব আউটপুট দিচ্ছেঃ [python] a and b have same identity
আমরা চাইলে মেমরি লোকেশন বের করতে পারি। যেমনঃ
a = 20 b = 20 print(id(a)) print(id(b))
দেখব দুইটা একই আইডি বা একই লোকেশন।
দুইটাতে আলাদা ভ্যালু সেট করে রান করে দেখতে পারি কি আউটপুট দিচ্ছে।
a = 20 b = 21 if a is b: print("a and b have same identity") else: print("a and b do not have same identity")
উপরের প্রোগ্রাম রান করে দেখলে দেখব আউটপুট দিচ্ছেঃ
a and b have different identity
এখন যদি এই দুইটা ভ্যারিয়েবলের লোকেশন যাচাই করি, দেখব ভিন্ন ভিন্ন লোকেশনঃ
a = 20 b = 21 print(id(a)) print(id(b))
আউটপুট পাবো কিছুটা এমনঃ
140304040729488 140304040729520
এখানে এক সময় এক এক ভ্যালু প্রিন্ট করবে।