سرفصل‌های آموزشی
آموزش پایتون
آشنایی با عملگرها در زبان برنامه‌نویسی پایتون

آشنایی با عملگرها در زبان برنامه‌نویسی پایتون

پیش از این گفتیم که یکی از مشخصه‌های مشترک تمامی زبان‌های برنامه‌نویسی، انجام اَعمال پردازشی روی داده‌ها است و حال باید ببینیم پردازش روی داده‌ها از چه طریقی انجام خواهد شد. عملیات پردازش روی داده‌ها به واسطهٔ به‌کارگیری عملگرها و توابع پیش‌فرض پایتون امکان‌پذیر است که در این آموزش به معرفی عملگرها پرداخته و در آموزش‌های بعدی توابع را بررسی خواهیم کرد.

(برای آموزش ویدیویی این مبحث، می توانید به دوره‌ی آموزش مقدماتی پایتون در سایت سکان آکادمی مراجعه کنید.)

به خاطر دارید زمانی که با مفهوم متغیر در زبان برنامه‌نویسی پایتون آشنا شدیم از نماد = برای انتساب یک آبجکت به متغیر مد نظر استفاده کردیم و گفتیم این نماد بیانگر یک Operator (عملگر) است که عملیات انتساب را روی دو  Operand (عملوند) که در سمت چپ و راست آن قرار دارند انجام می‌دهد. علاوه بر نماد = نمادهای دیگری نیز به عنوان عملگر برای مفسر پایتون تعریف شده‌اند که هر یک عملیات خاصی را روی داده‌ها اجرا می‌کنند که در ادامه برای آشنایی با عملگرهای مختلف، به بررسی انواع عملیاتی که آن‌ها انجام می‌دهند خواهیم پرداخت.

اعمال ریاضیاتی (Mathematical Operations)

در فرآیند توسعهٔ نرم‌افزار یکی از پرکاربردترین دیتا تایپ‌ها اعداد هستند و قاعدتاً انجام عملیات مقدماتی ریاضیاتی مانند جمع، تفریق، ضرب و تقسیم روی این نوع داده‌ها به کرات صورت می‌گیرد و از همین روی و برای راحتی کار یکسری عملگر محاسباتی (Arithmetic Operator) برای مفسر پایتون تعریف شده‌اند که تقریباً شبیه به همان نمادهایی هستند که ما در ریاضیات برای انجام این عملیات از آن‌ها استفاده می‌کنیم که در ادامه به معرفی آن‌ها خواهیم پرداخت.

+ برای انجام عملیات جمع (Addition) استفاده می‌شود به این صورت که عملوندهای سمت چپ و راست خود را با هم جمع می‌کند و حاصل عملیات را ریترن می‌کند. مثال‌های زیر را که در حالت تعاملی IDLE اجرا شده‌اند در نظر بگیرید:

>>> 3 + 5
8
>>> 3.0 + 5.0
 8.0
>>> 3j + 5j
8j
>>> 3 + 5.0
8.0

همان‌طور که مشخص است، در ابتدا با استفاده از عملگر + دو عدد صحیح را با هم جمع کردیم و مفسر پایتون حاصل این عملیات را به صورت یک عدد صحیح نمایش داده است. در مثال دوم و سوم هم به ترتیب مجموع دو عدد اعشاری و مختلط محاسبه شده است اما مثال چهارم اندکی متفاوت است چرا که دیتا تایپ عملوندها در آن یکسان نیست و در این مثال مجموع یک عدد صحیح و یک عدد اعشاری محاسبه شده و حاصل به صورت یک عدد اعشاری نمایش داده شده است!

شاید این سؤال برای‌تان پیش بیاید که «چرا حاصل جمع این دو عدد به صورت یک عدد صحیح نمایش داده نشده است؟» که در پاسخ به این پرسش می‌توان گفت زمانی که مفسر پایتون به یک عبارت محاسباتی نظیر این مثال برخورد می‌کند، یک سلسله مراتب برای انواع داده‌های عددی آن قائل می‌شود به این صورت که اولویت را به ترتیب به نوع دادهٔ مختلط، اعشاری، صحیح و بولی می‌دهد و از همین روی برای محاسبهٔ جواب، نوع داده‌ای را انتخاب می‌کند که بالاترین اولویت را دارا است و انواع دیگر را به آن دیتا تایپ تبدیل می‌کند. در مثال چهارم هم چون اولویت 5.0 که یک عدد اعشاری است بالاتر از اولویت عدد صحیح 3 است، مفسر پایتون 3 را به صورت عدد صحیح 3.0 در نظر می‌گیرد و آن را با 5.0 جمع می‌کند و حاصل را به صورت یک عدد اعشاری با مقدار 8.0 نمایش می‌دهد.

    نکته

قبلاً گفتیم که دیتا تایپ بولی در واقع زیرمجموعه‌ای از اعداد صحیح است که False معادل با مقدار 0 و True معادل با مقدار 1 است و از همین روی انجام عملیات ریاضیاتی روی داده‌های بولی مجاز است به طوری که مثلاً می‌توان حاصل عبارت False + True را که مترادف عبارت 1 + 0 است را به دست آورد که برابر با 1 است.

- برای انجام عملیات تفریق (Subtraction) استفاده می‌شود به این صورت که مقدار عملوند سمت راست را از عملوند سمت چپ کسر می‌کند و حاصل عملیات را ریترین می‌کند:

>>> 5 - 3
2
>>> 1.7 - 3.5
-1.8

لازم به یادآوری است که عملگرهای + و می‌توانند تنها با یک عملوند در سمت راست خود ظاهر شوند که در این صورت عملگر + علامت مثبت یا منفی عملوند خود را تغییر نخواهد داد اما عملگر عملوندی با مقدار مثبت را به منفی و عملوندی با مقدار منفی را به مثبت تغییر می‌دهد:

>>> a = -3
>>> +a
-3
>>> -a
3

* برای انجام عملیات ضرب (Multiplication) استفاده خواهد شد که در ریاضی با نماد × مشخص می‌شود به این صورت که با ضرب عملوندها در دو سمت خود، حاصل عملیات را ریترن می‌کند:

>>> 3 * 5
15
>>> False * True
0
>>> 4 * 0.3
1.2

/ برای انجام عملیات تقسیم (Division) استفاده می‌گردد که در ریاضی با نماد ÷ مشخص می‌شود به این صورت که با تقسیم مقدار عملوند سمت چپ بر مقدار عملوند سمت راست، خارج‌قسمت تقسیم را به عنوان حاصل عملیات ریترن می‌کند که برای درک بهتر این موضوع، مثال‌های زیر را در نظر می‌گیریم:

>>> 4 / 2
2.0
>>> 5 / 3
1.6666666666666667

همان‌طور که مشخص است، مفسر پایتون حاصل تقسیم اعداد صحیح را به صورت اعشاری نمایش می‌دهد در صورتی که در نسخه‌های قبلی پایتون این مقادیر را رُند می‌کرد و حاصل را به صورت یک عدد صحیح نشان می‌داد. در صورتی که بخواهیم خارج‌قسمت را بدون ارقام اعشاری به دست آوریم، می‌توانیم از عملگر // استفاده می‌کنیم که در ادامه بیشتر در مورد کارکرد این عملگر توضیح خواهیم داد.

// برای انجام عملیات تقسیم رُند (Floordiv) استفاده می‌شود بدین صورت که برای تقسیم عملوندهایی که مقدار عددی مثبت هستند، عملوند سمت چپ بر مقدار عملوند سمت راست تقسیم شده و سپس قسمت اعشاری عدد حذف می‌شود و در نهایت حاصل عملیات در خروجی ریترن می‌شود اما اگر چنانچه یکی از عملوندها مقدار عددی منفی باشد، حاصل عملیات رُند شده و در خروجی نمایش داده می‌شود. برای درک بهتر عملکرد این عملگر، به حاصل تقسیم‌های زیر توجه کنید:

>>> 4 // 2
2
>>> 5 // 3
1
>>> -3//2
-2

% برای انجام عملیات محاسبهٔ باقیمانده از یک عبارت تقسیم (Modulo) استفاده می‌شود به این صورت که مقدار عملوند سمت چپ را بر مقدار عملوند سمت راست خود تقسیم می‌کند و باقیماندهٔ تقسیم را ریترن می‌کند. به طور مثال، خروجی کدهای زیر را ببینید:

>>> 5 % 2
1
>>> 4 % 2
0

** برای انجام عملیات به توان رساندن (Exponentiation) استفاده می‌شود. برای مثال، وقتی که می‌خواهیم عدد 2 را 4 بار در خودش ضرب کنیم به جای نوشتن عبارت 2×2×2×2 در ریاضی آن را به اختصار به صورت 24 می‌نویسیم، در زبان پایتون آن را به صورت زیر عملی می‌کنیم:

>>> 2 ** 4
16

همان‌طور که می‌بینید، عملگر ** مقدار عملوند سمت چپ را به توان عملگر سمت راست می‌رساند و مقدار ۱۶ را ریترن می‌کند.

اعمال دنباله‌ای (Sequence Operation)

دیتا تایپ استرینگ یکی از انواع داده‌های دنباله‌ای در زبان پایتون است که در آینده در مورد آن‌ها بیشتر خواهیم آموخت اما در این بخش از دوره قصد داریم به بررسی بعضی از عملگرهایی بپردازیم که برای دنباله‌ها، به ویژه استرینگ، کاربرد دارند.

+ برای پیوند دنباله‌ها استفاده می‌شود. به طور مثال کدهای زیر را در نظر بگیرید:

>>> "Sokan" + "Academy" + "." + "com"
'SokanAcademy.com' 
>>> first_name = "Narges"
>>> space = " "
>>> last_name = "Asadi"
>>> teacher_name = first_name + space + last_name
>>> teacher_name
'Narges Asadi'

همان‌طور که می‌بینید، در مثال اول با استفاده از عملگر + چهار رشتهٔ «Academy» ،«Sokan»، «.» و «com» به هم پیوند می‌خورند و خروجی آن یک استرینگ با مقدار «SokanAcademy.com» است. در مثال دوم هم مقدار دو متغیر first_name و space به همراه last_name با استفاده از عملگر + به هم پیوند خورده و حاصل آن در متغیر teacher_name ذخیره شده است. در عین حال، برای پیوند استرینگ‌ها می‌توان آن‌ها را بدون استفاده از عملگر + تنها در کنار هم قرار داد به طوری که داریم:

 >>> "Sokan" "Academy" "." "com"
'SokanAcademy.com'

دقت کنید که نمی‌توان متغیرها را به صورت زیر و بدون استفاده از عملگر + در کنار هم قرار داد. در واقع، در کد زیر توجه کنید که چگونه با قرار دادن متغیرها در کنار هم بدون استفاده از عملگر + مفسر اعلام خطا می‌کند:

>>> teacher_name = first_name  space  last_name
SyntaxError: invalid syntax

* برای تکرار دنباله‌ها استفاده می‌شود. به طور مثال کد زیر را در نظر بگیرید:

>>> "db" * 5
'dbdbdbdbdb'
>>> 5 * "db"
'dbdbdbdbdb'

همان‌طور که می‌بینید، عملگر * دادهٔ استرینگی را که در یک طرف آن قرار دارد (و مهم هم نیست که در کدام طرف باشد) را به مقدار عدد صحیحی تکرار می‌کند که در سمت دیگر آن قرار دارد و این در حالی است که اگر مقدار این عملوند صفر یا عددی منفی باشد، خروجی نهایی استرینگی تهی خواهد بود:

>>> "db" * -1
''
>>> "db" * 0
''

اعمال انتساب یا جایگزینی (Assignment Operation)

پیش از این با عملگر انتساب آشنا شدیم که با نماد = مشخص می‌شد و دیدیم که این عملگر چگونه عملوند سمت راست خود، که می‌تواند حاصل یک عبارت نیز باشد، را به عملگر سمت چپ منتسب می‌کند مضاف بر اینکه با شیوهٔ انتساب‌های چندگانه نیز آشنا شدیم. مثال‌های زیر نمونه‌هایی از کاربرد عملگر انتساب هستند:

>>> a, b, c = 1, 2, 3
>>> d = a + b + c

زمانی که با متغیرها کار می‌کنیم، قادر خواهیم بود تا عملگر انتساب را با سایر عملگرهایی پیش از این با آن‌ها آشنا شدیم ترکیب کنیم تا مفسر پایتون عملیات جدیدی را به این صورت اجرا کند که ابتدا بدون در نظر گرفتن = عملگر دیگر را روی عملوندهای سمت چپ و راست اثر دهد، آن‌گاه حاصل عملیات را به عملوند سمت چپ، که یک متغیر است، منتسب کند. برای مثال دستورات زیر را مد نظر قرار دهید:

>>> a = 8
>>> b = 5
>>> a += 1
>>> a
9
>>> a -= 2
>>> a
7
>>> a /= b
>>> a
1.4
>>> a = 8
>>> a %= b
>>> a
3
>>> b //= 2
>>> b
2
>>> b **= b
>>> b
4
>>> a  =  "a"
>>>b 
>>> a = "a"
>>> b = "b"
>>> a += b
>>> a
'ab'
>>> a *= 4
>>> a
'abababab'

اعمال مقایسه‌ای (Comparison Operation)

در صنعت توسعهٔ نرم‌افزار مواقع بسیار زیادی برای برنامه‌نویس پیش خواهد آمد که نیاز دارد تا چند چیز را با یکدیگر مقایسه کند که در چنین شرایطی نیازمند عملگرهای مقایسه‌ای هستیم که در ادامه با آن‌ها آشنا خواهیم شد.

== برابری (Equality) عملوندهای سمت چپ و راست خود را بررسی می‌کند و در صورت برابر بودن مقدار True و در غیر این صورت مقدار False را ریترن می‌کند به طوری که در مثال‌های زیر کاربرد این عملگر را می‌بینیم:

>>> 1 == 1
True
>>> 1 == 1.0
True
>>> 1 == 2
False
>>> "a" == "A"
False

همان‌طور که می‌بینید، در حین مقایسه مفسر پایتون ارزش عدد صحیح 1 و عدد اعشاری 1.0 را یکسان در نظر می‌گیرد مضاف بر اینکه می‌بینیم مفسر پایتون بین حروف کوچک و بزرگ تمایز قائل است و در صورتی که یک حرف کوچک را با معادل بزرگ آن مقایسه کنیم، مقدار False را در اختیارمان قرار می‌دهد.

    هشدار 
یکی از اشتباهاتی که معمولاً برنامه‌نویسان مبتدی انجام می‌دهند این است که از عملگرهای انتساب (=) و برابری (==) به اشتباه به جای هم استفاده می‌کنند. بنابراین شناخت کارکرد هر یک از این عملگرها و نتیجهٔ عملیاتی که آن‌ها انجام می‌دهند در استفادهٔ به‌جا و درست از آن‌ها نقش مهمی دارد.

=! نابرابری یا تمایز (Difference) عملوندهای سمت چپ و راست خود را بررسی می‌کند و بر خلاف عملگر == در صورت برابر بودن مقدار False و در غیر این صورت مقدار True را ریترن می‌کند به طوری که در مثال‌های زیر کاربرد این عملگر را به خوبی می‌بینیم:

>>> 1 != 1
False
>>> 1 != 1.0
False
>>> 1 != 2
True
>>> "a" != "A"
True

> در صورتی که مقدار عملوند سمت چپ کوچک‌تر از مقدار عملوند سمت راست آن باشد مقدار True را باز می‌گرداند و در غیر این صورت مقدار False را ریترن می‌‌کند:

>>> 3 < 7
True
>>> 7 < 3
False

< در صورتی که مقدار عملوند سمت چپ بزرگ‌تر از مقدار عملوند سمت راست آن باشد مقدار True را باز می‌گرداند و در غیر این صورت مقدار False را ریترن می‌کند:

>>> 7 > 3
True
>>> 7 < 3
False

=> در صورتی که مقدار عملوند سمت چپ کوچک‌تر یا مساوی مقدار عملوند سمت راست آن باشد مقدار True را باز می‌گرداند و در غیر این صورت مقدار False را ریترن می‌کند:

>>> 5 <= 5
True
>>> 5 <= 8
True

=< در صورتی که مقدار عملوند سمت چپ بزرگ‌تر یا مساوی مقدار عملوند سمت راست آن باشد مقدار True را ریترن می‌کند و در غیر این صورت مقدار False را باز می‌گرداند:

>>> 5 >= 5
True
>>> 8 >= 5
True
>>> 5 >= 8
False

دقت کنید که در زمان استفاده از عملگرهایی مانند =+، =<، == و چیزهایی از این دست که از دو نماد تشکیل شده‌اند، بین دو نماد از کاراکتر فاصله (اِسپیس) استفاده نکنید چرا که در این صورت با خطای سینتکسی مواجه خواهید شد:

>>> 3 > = 2
SyntaxError: invalid syntax

همان‌طور که در کد بالا مشاهده می‌شود، به دلیل وجود فاصله مابین علامت‌های = و < مفسر پایتون از ما خطای سینتکسی گرفته است.

online-support-icon