মৌলিক

Python-এর অপারেটর: গণিত, // ও %, তুলনা, and/or/not এবং python round

হালনাগাদ: · Skillaria.Top

Python-এ / সবসময় float দেয়, // পূর্ণসংখ্যা ভাগ করে নিচের দিকে গোল করে, % অবশিষ্ট দেয়, ** ঘাত। round(x, n) n দশমিক ঘর পর্যন্ত গোল করে ব্যাংকার্স রাউন্ডিংয়ে: round(2.5) হয় 2, round(3.5) হয় 4; উপরে ও নিচে পূর্ণসংখ্যায় গোল করতে math.ceil ও math.floor, সংখ্যার মান পেতে abs।

Python-এর অপারেটর হলো চিহ্ন, যা মানকে নতুন মানে রূপান্তর করে: + যোগ করে, // পূর্ণ ভাগ করে, and শর্তগুলো যুক্ত করে। নিচে অপারেটরের সম্পূর্ণ তালিকা উদাহরণসহ দেওয়া হলো, / ও //-এর পার্থক্য, and, or, not-এর যুক্তি, এবং গোল করার উপায়: python round, math.ceil, math.floor ও abs। প্রতিটি উদাহরণ REPL-এ বসিয়ে যাচাই করতে পারবেন।

Python অপারেটরের তালিকা

অপারেটরগুলো কাজ অনুযায়ী ভাগ করা যায়। পুরো টেবিল মুখস্থ করার দরকার নেই: বাস্তব কোডে সবচেয়ে বেশি দেখা যায় গাণিতিক, তুলনা ও যুক্তির অপারেটর।

দলঅপারেটরউদাহরণ
গাণিতিক+ - * / // % **7 // 2 → 3
তুলনা== != < > <= >=3 < 5 → True
যৌক্তিকand or notnot True → False
অভিন্নতাis, is notx is None
অন্তর্ভুক্তিin, not in"a" in "cafe" → True
অ্যাসাইনমেন্ট= += -= *= /= //= %= **=total += 250
ওয়ালরাস:=if (n := len(s)) > 10:
বিট-ভিত্তিক& | ^ ~ << >>5 & 3 → 1

গাণিতিক অপারেটর

যোগ, বিয়োগ ও গুণ স্কুলের মতোই কাজ করে। রাশিতে অন্তত একটি float থাকলে ফলও float হয়: 2 + 1.0 দেয় 3.0। Python-এর পূর্ণসংখ্যা উপচে পড়ে না — 2 ** 100 নির্ভুলভাবে গণনা হয়, সংখ্যাটি যত বড়ই হোক।

>>> 250 + 120
370
>>> 12.5 * 3
37.5
>>> 2 ** 10
1024
>>> 2 ** 0.5
1.4142135623730951

Python-এ ঘাত: ** অপারেটর

ঘাতের জন্য দুটি তারকাচিহ্ন লেখা হয়, ^ নয়: Python-এ ^ মানে বিট-ভিত্তিক «এক্সক্লুসিভ OR», তাই 2 ^ 3 দেবে 1, 8 নয়। ভগ্নাংশ ঘাতে মূল পাওয়া যায়: 9 ** 0.5 হয় 3.0। আছে pow(x, y) ফাংশনও — একই কাজ, সঙ্গে তৃতীয় আর্গুমেন্টে অবশিষ্ট: pow(2, 10, 1000) দেবে 24।

অগ্রাধিকারের দিকে নজর দিন: ** আগে চলে একমুখী ঋণাত্মক চিহ্নের আগে, তাই -2 ** 2 হয় -4। ঋণাত্মক সংখ্যার বর্গ চাইলে বন্ধনী লিখুন: (-2) ** 2।

Python-এ ভাগ: /, // ও %

Python-এ দুই ধরনের ভাগ আছে, আর নতুনদের বিস্ময়ের প্রধান উৎস এটিই। সাধারণ ভাগ / সবসময় float দেয়, এমনকি পূর্ণ ভাগ হলেও। পূর্ণসংখ্যা ভাগ // দশমিক অংশ বাদ দেয়, আর % দেয় অবশিষ্ট।

>>> 7 / 2
3.5
>>> 8 / 2
4.0
>>> 7 // 2
3
>>> 7 % 2
1

পূর্ণ ভাগ // ও অবশিষ্ট %: বাস্তব ব্যবহার

// ও % জোড়া মেলে «কয়টি পূর্ণ আর কী পরিমাণ বাকি» ধরনের সমস্যায়। কোর্সের খরচ ট্র্যাকারে টাকা নির্ভুলতা হারাতে না দিতে পয়সায় রাখা হয় এবং যোগফলটি টাকা ও পয়সায় ভাঙা হয়:

kopecks = 125050          # টাকা রাখা হচ্ছে পয়সায়
rub = kopecks // 100      # 1250 — পূর্ণ টাকা
kop = kopecks % 100       # 50 — অবশিষ্ট
print(rub, kop)           # 1250 50

print(40 // 7, "সপ্তাহ আর", 40 % 7, "দিন")   # 5 সপ্তাহ আর 5 দিন

দুটি কাজ একসঙ্গে দেয় অন্তর্নির্মিত divmod ফাংশন: divmod(125050, 100) দেয় (1250, 50) টাপল। জোড়-বিজোড় যাচাইয়েও অবশিষ্ট কাজে লাগে: n % 2 == 0 জোড় সংখ্যার জন্য সত্য।

ঋণাত্মক সংখ্যা: // নিচের দিকে গোল করে

// শুধু দশমিক অংশ বাদ দেয় না, বরং নিচের দিকে গোল করে — ঋণাত্মক অসীমের দিকে। ধনাত্মক সংখ্যায় পার্থক্য নেই, ঋণাত্মকে আছে। Python-এ অবশিষ্টের চিহ্ন ভাজকের চিহ্নের সমান, তাই a == (a // b) * b + a % b সবসময় সত্য।

>>> -7 // 2
-4
>>> -7 % 2
1
>>> int(-7 / 2)     # দশমিক অংশ বাদ, গোল নয়
-3

শূন্য দিয়ে ভাগ: কোন ত্রুটি

তিনটি অপারেটরের যেকোনোটি দিয়ে শূন্যে ভাগ করলে আসে ZeroDivisionError। পূর্ণসংখ্যা ও ভগ্নাংশ — দুটোতেই একই। try/except দিয়ে ধরা যায়, অথবা আগে থেকে ভাজক যাচাই করা যায়।

>>> 10 / 0
Traceback (most recent call last):
  ...
ZeroDivisionError: division by zero
>>> count = 0
>>> avg = 1500 / count if count else 0
>>> avg
0

তুলনা অপারেটর

তুলনা True বা False ফেরত দেয়। সমানতা যাচাই হয় দুটি == চিহ্নে, একটি = হলো অ্যাসাইনমেন্ট। স্ট্রিং তুলনা হয় অক্ষরের কোড অনুযায়ী, তাই "B" < "a" সত্য: বড় হাতের অক্ষর ছোট হাতের আগে আসে।

>>> 250 == 250.0
True
>>> 3 != 4
True
>>> 1 < 5 <= 10     # শৃঙ্খল: 1 < 5 and 5 <= 10
True
>>> 0.1 + 0.2 == 0.3
False

তুলনার শৃঙ্খল যেমন 0 <= x < 100 — Python-এর সুবিধাজনক বৈশিষ্ট্য: and লিখতে হয় না। আর শেষ লাইনটি ভগ্নাংশের ত্রুটি মনে করিয়ে দেয়: 0.1 + 0.2 দেয় 0.30000000000000004। ভগ্নাংশ তুলনা করুন math.isclose(a, b) দিয়ে, আর টাকা রাখুন পয়সায় বা Decimal-এ।

যৌক্তিক অপারেটর and, or, not

Python-এ যৌক্তিক অপারেটর লেখা হয় শব্দে, অন্য ভাষার && ও ||-এর বদলে। and সত্য হয় যখন দুই পাশই সত্য, or — যখন অন্তত একটি সত্য, not মান উল্টে দেয়।

aba and ba or bnot a
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

অগ্রাধিকার: আগে not, তারপর and, তারপর or। True or False and False হয় True, কারণ and আগে গণনা হয়। জটিল শর্তে বন্ধনী দিন — তাতে আপনার ও সহকর্মীর জন্য কোড স্পষ্ট হয়।

and ও or আসলে কী ফেরত দেয়

and ও or সবসময় True বা False দেয় না, বরং দুই অপারেন্ডের একটি ফেরত দেয়। or প্রথম সত্য মানটি দেয় (সত্য না থাকলে শেষটি), and — প্রথম মিথ্যা মানটি (না থাকলে শেষটি)। মিথ্যা হিসেবে গণ্য হয় 0, 0.0, খালি স্ট্রিং, খালি সংগ্রহ, None ও False।

>>> name = ""
>>> name or "অতিথি"
'অতিথি'
>>> 5 and 0
0
>>> not ""
True

মূল্যায়ন আলসে: বাঁ দিক থেকেই ফল বোঝা গেলে ডান দিক গণনা হয় না। তাই count == 0 হলে count and total / count শূন্য ভাগের ত্রুটি দেয় না। not অন্য দুটির মতো নয় — সবসময় bool দেয়।

is ও in অপারেটর

== মান তুলনা করে, আর is যাচাই করে দুটি নাম একই অবজেক্টকে নির্দেশ করছে কিনা। দুটি আলাদা খালি ঝুড়ি সমান, কিন্তু একই অবজেক্ট নয়। is প্রায় সবসময় লাগে শুধু None-এর জন্য: if x is None।

>>> a = [250, 120]
>>> b = [250, 120]
>>> a == b, a is b
(True, False)
>>> c = a
>>> c is a
True

সংখ্যা ও স্ট্রিং is দিয়ে তুলনা করবেন না: কখনো কখনো অভ্যন্তরীণ ক্যাশের কারণে তা কাজ করে, কিন্তু ফলাফল বাস্তবায়নের উপর নির্ভর করে, আর x is 5-এর মতো কোডে Python SyntaxWarning দেয়।

in অন্তর্ভুক্তি যাচাই করে: স্ট্রিংয়ে সাবস্ট্রিং, তালিকায় উপাদান, ডিকশনারিতে কী। not in উল্টো যাচাই।

>>> "coffee" in "coffee with milk"
True
>>> "food" in {"food": 450, "taxi": 300}
True
>>> 5 not in [1, 2, 3]
True

অ্যাসাইনমেন্ট অপারেটর ও ওয়ালরাস অপারেটর :=

যৌগিক অপারেটর +=, -=, *=, //= ইত্যাদি সংক্ষিপ্ত রূপ: total += 250 মানে total = total + 250। Python-এ ++ ও -- নেই: x++ লিখলে সিনট্যাক্স ত্রুটি হবে।

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

items = ["coffee", "taxi", "lunch", "movie"]
if (n := len(items)) > 3:
    print(f"অনেক খরচ: {n}")

while (line := input("পরিমাণ: ")) != "":
    print(int(line) * 2)

এটি ছাড়া len দুইবার ডাকতে হতো, বা অ্যাসাইনমেন্ট আলাদা লাইনে রাখতে হতো। অতিরিক্ত ব্যবহার করবেন না: লাইন পড়া কঠিন হয়ে গেলে সাধারণ অ্যাসাইনমেন্টই ভালো।

Python-এ গোল করা: round, ceil, floor

গোল করার জন্য Python-এ আছে অন্তর্নির্মিত round ফাংশন এবং math মডিউলের ফাংশন। এরা আলাদা কাজ করে, আর এগুলো গুলিয়ে ফেলা একটি সাধারণ ভুল।

ফাংশনকী করে2.5-2.52.7
round(x)নিকটতম মানে, মধ্যবিন্দু — জোড়ের দিকে2-23
math.floor(x)নিচের দিকে, ঋণাত্মক অসীমের দিকে2-32
math.ceil(x)উপরের দিকে, ধনাত্মক অসীমের দিকে3-23
math.trunc(x), int(x)দশমিক অংশ বাদ, শূন্যের দিকে2-22

Python round ফাংশন ও ব্যাংকার্স রাউন্ডিং

round(x, n) n দশমিক ঘর পর্যন্ত গোল করে; দ্বিতীয় আর্গুমেন্ট না দিলে ফল হয় পূর্ণসংখ্যা int। প্রধান ফাঁদ: Python-এর round «ব্যাংকার্স রাউন্ডিং» করে — মধ্যবিন্দু গোল হয় নিকটতম জোড় সংখ্যায়। তাই round(2.5) দেয় 2, আর round(3.5) — 4। এতে বড় হিসাবে গোলকরণের ভুল একদিকে জমে না।

>>> round(2.5), round(3.5)
(2, 4)
>>> round(3.14159, 2)
3.14
>>> round(1250, -2)     # শত পর্যন্ত
1200
>>> round(2.675, 2)     # 2.68 নয়: বাইনারিতে এটি 2.67499...
2.67

যদি স্কুলের চেনা «মধ্যবিন্দু উপরে» গোল দরকার হয়, যেমন রসিদে, তবে ROUND_HALF_UP মোডসহ Decimal ব্যবহার করুন। সংখ্যাটি স্ট্রিং হিসেবে দিন, যাতে float-এর ত্রুটি না আসে:

>>> from decimal import Decimal, ROUND_HALF_UP
>>> Decimal("2.5").quantize(Decimal("1"), ROUND_HALF_UP)
Decimal('3')
>>> Decimal("2.675").quantize(Decimal("0.01"), ROUND_HALF_UP)
Decimal('2.68')

কোর্সের আরেকটি নিয়ম: গোল করুন শুধু প্রদর্শনের সময়। সুন্দর আউটপুটের জন্য round লাগে না — f-স্ট্রিংই যথেষ্ট: f"{amount:.2f}" দুই ঘর দেখায়, কিন্তু সংখ্যাটি নিজে নির্ভুল থাকে।

math.ceil ও math.floor: উপরে ও নিচে গোল

math.ceil লাগে যখন «কম পড়া» গ্রহণযোগ্য নয়: কতটি বাস বুক করতে হবে, কয়টি পৃষ্ঠা লাগবে। math.floor — যখন শুধু পূর্ণ একক গোনা হয়। দুটি ফাংশনই int ফেরত দেয়।

import math

guests = 47
seats = 20
print(math.ceil(guests / seats))   # 3টি বাস
print(math.floor(9.99))            # 9
print(-(-guests // seats))         # 3 — math ছাড়া ceil, // কৌশলে

math মডিউলে আরও কাজের ফাংশন আছে: math.sqrt (বর্গমূল), math.isclose (ভগ্নাংশ তুলনা), math.pi, math.gcd। Python 3.15-এ এসেছে পূর্ণসংখ্যার গণিতের উপ-মডিউল math.integer (PEP 791): সেখানে comb, factorial, gcd, isqrt, lcm, perm আছে, আর পুরনো math.gcd ও অন্যগুলো কাজ করে চলে।

abs ফাংশন: সংখ্যার মান

abs(x) মডিউল ফেরত দেয় — শূন্য থেকে চিহ্নবিহীন দূরত্ব। ইমপোর্ট লাগে না, ফাংশনটি অন্তর্নির্মিত। পূর্ণসংখ্যা, ভগ্নাংশ এবং জটিল সংখ্যায়ও কাজ করে: 3+4j-এর জন্য দেয় ভেক্টরের দৈর্ঘ্য, 5.0।

>>> abs(-250)
250
>>> abs(-12.5)
12.5
>>> budget, spent = 5000, 5320
>>> abs(budget - spent)    # কতটা বিচ্যুত হয়েছি
320

সাধারণ ব্যবহার — দিক বাদ দিয়ে পার্থক্য এবং সহনশীলতা সহ তুলনা: abs(a - b) < 0.001। ভগ্নাংশের ক্ষেত্রে math.isclose নির্ভরযোগ্য, কারণ সেটি সংখ্যার মাপও বিবেচনা করে।

অপারেটরের অগ্রাধিকার

একটি রাশিতে একাধিক অপারেটর থাকলে Python অগ্রাধিকার অনুযায়ী চালায় — বেশি থেকে কম:

  1. **
  2. একমুখী -x, +x, ~x
  3. * / // %
  4. + -
  5. বিট-শিফট ও বিট-অপারেশন
  6. তুলনা, in, is
  7. not
  8. and
  9. or
  10. :=

তাই 2 + 3 * 4 হয় 14, আর (2 + 3) * 4 — 20। সন্দেহ হলে বন্ধনী দিন: অতিরিক্ত বন্ধনীতে ক্ষতি নেই, কিন্তু অগ্রাধিকারের ভুল খুঁজতে অনেক সময় যায়।

অপারেটরের সাধারণ ভুল

ভুলকী হয়সঠিক উপায়
if x = 5:SyntaxError: এটি অ্যাসাইনমেন্টif x == 5:
ঘাতের বদলে 2 ^ 3বিট-ভিত্তিক XOR, ফল 12 ** 3
8 / 2-এ পূর্ণসংখ্যা আশাপাওয়া যায় 4.08 // 2
x == 1 or 2সবসময় সত্য: or 2x in (1, 2)
round(2.5)-এ 3 আশাব্যাংকার্স রাউন্ডিং দেয় 2Decimal সহ ROUND_HALF_UP
"5" + 5TypeErrorint("5") + 5

সারসংক্ষেপ

মনে রাখুন: / সবসময় float দেয়, // নিচের দিকে গোল করে, % দেয় ভাজকের চিহ্নের অবশিষ্ট, আর ঘাত হলো **। যৌক্তিক and, or, not শব্দে লেখা হয় এবং আলসে মূল্যায়িত হয়; None যাচাইয়ে লাগে is। Python round জোড়ের দিকে গোল করে; উপরে ও নিচে গোল করতে আছে math.ceil ও math.floor, আর সংখ্যার মান দেয় abs। কোর্সে এই অপারেটরগুলো হাতে-কলমে শেখানো হয় খরচ ট্র্যাকারে, যেখানে টাকা রাখা হয় পয়সায়।

সাধারণ প্রশ্ন

Python-এ সংখ্যাকে দুই দশমিক ঘর পর্যন্ত কীভাবে গোল করবেন?

round(x, 2) ব্যবহার করুন। যদি শুধু সুন্দরভাবে দেখাতে চান, তবে f-স্ট্রিং f"{x:.2f}" নিন — তাতে সংখ্যার মান বদলায় না।

কেন Python-এ round(0.5) 0 দেয়?

কারণ round মধ্যবিন্দু গোল করে নিকটতম জোড় সংখ্যায়, আর 0 জোড়। একইভাবে round(1.5) ও round(2.5) দেয় 2।

Python-এ ভাগের পূর্ণ অংশ কীভাবে পাবেন?

// অপারেটর দিয়ে: 17 // 5 দেয় 3। ঋণাত্মক সংখ্যায় এটি নিচের দিকে গোল করে, তাই -17 // 5 দেয় -4; শূন্যের দিকে দশমিক অংশ বাদ দিতে int(-17 / 5) ব্যবহার করুন।

Python-এ কি টার্নারি অপারেটর আছে?

হ্যাঁ, এটি শর্তসাপেক্ষ এক্সপ্রেশন: মান_যদি_হ্যাঁ if শর্ত else মান_যদি_না, যেমন "জোড়" if n % 2 == 0 else "বিজোড়"।

Python-এর & ও and-এর পার্থক্য কী?

and একটি যৌক্তিক অপারেটর, যা আলসে মূল্যায়ন করে; & সংখ্যার বিট-ভিত্তিক AND এবং সেটের ছেদ। শর্তে if-এর সঙ্গে and ব্যবহার করুন।

ভিডিওতে বিষয়টি শিখুন

“Python 3.15: от новичка до профи” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।

কোর্সে যান