قسمت سوم برنامه نویسی مقدماتی با پایتون - عملگرها
نوشته شده توسط دیما
نویسنده سایت
در این قسمت میخواهیم با مفهوم عملگرها، نحوه ی استفاده و کاربرد آنها در زبانهای برنامه نویسی بهخصوص در پایتون آشنا شویم.
عملگرها اصولاً برای انجام عملیات خاصی استفاده می شوند. با عملگر ها قبلاً در ریاضی آشنا شده اید. عملگر های جمع، تفریق، ضرب و یا تقسیم که برای انجام عملیات مورد نظر خود از آنها استفاده می کنیم. در زبانهای برنامه نویسی نیز از این عملگر ها برای انجام عملیات خاص بر روی متغیر ها و مقادیر استفاده می شود.
در پایتون نیز این عملگر ها وجود دارند و به دسته های زیر تقسیمبندی می شوند:
عملگرهای حسابی در پایتون
عملگرهای حسابی با مقادیر عددی برای انجام عملیات ریاضی رایج استفاده می شوند. مثالهایی از این نوع عملگرها را در ادامه مشاهده می کنید.
برای استفاده از عملگر های جمع، تفریق، ضرب و تقسیم به صورت زیر انجام می شود.
x + y x – y x * y x / y
توجه: منظور از x و y در مثال بالا، استفاده از دو متغیر با نام های x و y است که دارای مقادیر عددی می باشند.
نکته: حاصل عملیات تقسیم بالا، به صورت اعشاری خواهد بود. توجه داشته باشید که در صورت تقسیم عدد به صفر با خطای زیر مواجه خواهید شد.
ZeroDivisionError: division by zero
برای انجام عملیات توان از عملگر ** استفاده می شود:
x ** y
برای بدست آوردن باقیمانده ی تقسیم دو مقدار:
x % y
برای تقسیم دو مقدار و بدست آوردن حاصل به صورت عدد صحیح:
x // y
مثال:
print(5%2)
عملگرهای انتساب در پایتون
با استفاده از عملگرهای انتساب میتوان مقادیر مختلف را به متغیرها اختصاص داد. عملگر = نیز از نوع عملگرهای انتساب می باشد.
در ادامه، انواع عملگر های انتساب به همراه یک مثال از نحوه ی استفاده از آن عملگر و خروجی آن پس از استفاده از عملگر را خواهید دید.
برای انتساب مقادیر به متغیر ها از عملگر = استفاده می شود. بدین صورت که متغیر مورد نظر با هر مقداری که از قبل داشته باشد، با مقدار جدیدی که به آن انتساب می دهیم، مقدار میگیرد. به مثال زیر توجه کنید.
x = 5 x = 6 print(x) # output => 6
در مثال بالا متغیر x ابتدا مقدار ۵ را داشته و سپس با مقدار جدید ۶ مقداردهی میشود و در نهایت متغیر x با استفاده از تابع print، مقدار ۶ رو چاپ می نماید. با استفاده از عملگر انتساب میتوان مقدار یک متغیر دیگر را نیز به متغیر مورد نظر انتساب داد.
x = 5 y = 6 x = y print(x) # output => 6
عملگر بعدی =+ می باشد. این عملگر بدین معناست که مقدار فعلی متغیر را با مقدار جدید جمع نموده و سپس مقدار نتیجه را درون متغیر مورد نظر قرار دهد.
x = 5 x += 3 print(x) # output => 8
خط دوم در مثال بالا را میتوان به صورت x = x + 3 نیز نوشت. این خط بدین معناست که مقدار متغیر x را با عدد ۳ جمع کند و در آخر حاصل جمع که برابر با ۸ میباشد را درون متغیر x قرار دهد.
مثال بالا را نیز میتوان برای سایر اعمال ریاضی مانند تفریق، ضرب، تقسیم، باقیمانده و توان نیز بکار برد.
x = 5 y = 5 x -= 1 y = y - 1 print(x) print(y) # output 4 4 x = 5 y = 5 x *= 2 y = y * 1 print(x) print(y) # output 10 10 x = 4 y = 4 x /= 2 y = y / 2 print(x) print(y) # output 2.0 2.0 x = 4 y = 4 x //= 2 y = y // 2 print(x) print(y) # output 2 2 x = 4 y = 4 x %= 2 y = y % 2 print(x) print(y) # output 0 0 x = 3 y = 3 x **= 2 y = y ** 2 print(x) print(y) # output 9 9
در بین عملگرهای انتساب همچنین دو عملگر &= و |= نیز وجود دارند. این دو عملگر با استفاده از مقایسه ی منطقی بیتهای دودویی مقادیر، مقدار جدید خود را بدست می آورند. به مثال زیر توجه کنید.
x = 4 y = 5 y &= x # output => 4
در مثال بالا، ابتدا مقدار متغیر x به صورت دودویی تبدیل شده(0100)، سپس مقدار متغیر y به صورت دودویی تبدیل شده(0101) و در آخر پس از مقایسه ی منطقی بیت به بیت هر کدام از این مقادیر، خروجی مشخص خواهد شد.
نکته: منظور از مقایسه منطقی & بدین معناست که از عملگر and استفاده می شود. عملگر منطقی & بدین صورت عمل میکند که در صورتی که هر دو مقادیر مقدار 1 یا True داشته باشند، خروجی 1 یا True را برمیگرداند. در غیر اینصورت مقدار 0 یا False را برمیگرداند. برای درک بهتر به تصویر زیر توجه نمایید.
بدین ترتیب عملگر |= نیز مانند عملگر قبل میباشد با این تفاوت که عمل مقایسه ی منطقی or را انجام می دهد. منظور از مقایسه منطقی | یا or بدین معناست که از عملگر or استفاده می شود. بدین صورت که اگر هر کدام از مقادیر مقدار 1 یا True داشته باشند، خروجی 1 یا True را برمیگرداند و در صورتی که هر دو مقادیر 0 یا False باشد. خروجی 0 یا False خواهد بود. به تصویر زیر توجه نمایید.
عملگر ^= مانند عملگر xor در زبانهای برنامه نویسی یا در گیت های منطقی در الکترونیک عمل میکند. این عملگر بدین صورت عمل میکند که در صورتی که اگر دو ورودی این عملگر یکسان نباشد مقدار 1 یا True را برمیگرداند، در غیر اینصورت مقدار 0 یا False را برخواهد گرداند.
به مثال زیر توجه کنید. به نظر شما خروجی تکه کد زیر چه می باشد؟
x = 2 #0010 x ^= 3 #0011 print(x) # output => ???
عملگرهای >>= و <<= برای شیفت دادن بیتهای دودویی مقادیر استفاده می شوند. این عملگر ها بدین صورت عمل میکنند که یا در سمت چپ مقدار 0 را به تعداد مشخص اضافه کرده و به همان مقدار از سمت راست مقدار دودویی متغیر کم میکنند(>>=) و یا در سمت راست مقدار 0 را به تعداد مشخص اضافه میکنند(<<=). به مثال زیر توجه نمایید.
x = 5 #0101 = 5 x >>= 2 #0001 = 1 print(x) # output => 1 x = 5 #0101 = 5 x <<= 2 #010100 = 20 print(x) # output => 20
نکته: در اعداد دودویی ترتیب اولویت بیتها به صورت ۱، ۲، ۴، ۱۶ و … میباشد(n - 2^n از صفر شروع شده و تا بی نهایت می رود.) و بیتهایی که رقم یک دارند برابر با ترتیب مورد نظرشان خواهند شد. برای مثال عدد دودویی 010100 به صورت (۲۰)۴+۱۶ محاسبه می شود.
عملگرهای مقایسهای در پایتون
عملگرهای مقایسهای برای مقایسه ی دو مقدار یا دو عبارت استفاده می شوند. این عملگرها مانند عملگرهای مقایسهای در ریاضی عمل میکنند. عملگر های (<,>,<=,>=) برای مقایسه کوچکتر یا بزرگتر بودن یک مقدار نسبت به مقدار دیگر استفاده می شوند. برای مقایسه برابر بودن یا عدم برابری دو مقدار از عملگرهای (== و !=) استفاده می شود.
x = 3 y = 8 print(xTrue x = 3 y = 3 print(x != y) # output => False
عملگرهای منطقی در پایتون
عملگرهای منطقی برای امکان استفاده از چندین عبارت شرطی در کنار هم استفاده می شوند.
فرض کنید دو متغیر سن و وزن را داریم. در صورتی که بخواهیم افرادی که سن بالای ۳۰ سال و وزن کمتر از ۸۰ دارند را پیدا کنیم، باید از عملگر منطقی and استفاده نماییم تا بتوانیم هر دو عبارت شرطی را با هم داشته باشیم. به مثال زیر توجه کنید.
(افرادی که بالای ۳۰ سال سن دارد) و (افرادی که وزن کمتر از ۸۰ دارند)
همان «و» بین این عبارت شرطی، عمگلر and نامیده میشود. برای استفاده از این عملگر باید به صورت زیر عمل کنیم.
age = 28 weight = 80 print(age >= 30 and weight <= 80)
در مثال بالا ابتدا عبارت شرطی اول(age > 30) بررسی میشود. در صورتی که این شرط درست باشد آنگاه ادامه ی بررسی انجام می شود. توجه داشته باشید در عملگر and در صورتی که عبارت شرطی اول یا عبارت شرطی سمت چپ عملگر and درست نباشد یا False باشد، نتیجه ی کل عبارت شرطی False خواهد شد و ادامه ی بررسی عبارات شرطی دیگر پس از عملگر and در همان خط، دیگر بررسی نمی شوند. یعنی اگر متغیر وزن بیشتر از ۳۰ نباشد، دیگر مقایسه مقدار متغیر وزن کمتر از ۸۰ بررسی نمیشود و نتیجه کل عبارت شرطی False خواهد بود. به همین ترتیب خروجی تکه کد قبل False خواهد بود.
برای بررسی درست بودن حداقل یکی از عبارات شرطی از عملگر or استفاده می کنیم. برای مثال فرض میکنیم که بخواهیم افرادی که سن بالای ۳۰ سال یا وزن کمتر از ۸۰ دارند را پیدا کنیم.
(افرادی که بالای ۳۰ سال سن دارد) یا (افرادی که وزن کمتر از ۸۰ دارند)
در این صورت تکه کد قبل به صورت زیر تغییر خواهد کرد. از آنجاییکه عبارت شرطی اول(age >= 30) درست نیست یا False است و عبارت (weight <= 80) به دلیل کمتر مساوی بودن مقدار متغیر وزن از عدد ۸۰، باعث میشود که عبارت شرطی دوم درست یا True شود و در نتیجه خروجی برابر با True گردد.
age = 28 weight = 80 print(age >= 30 or weight <= 80)
نکته: نتیجه ی بررسی دو عملگر and و or مانند دو تصویر قبل خواهد بود. یعنی برای and باید هر دو شرط True باشند تا مقدار خروجی True شود و برای عملگر or باید حداقل یکی از عبارات True باشد تا نتیجه ی عبارت شرطی True گردد.
عملگر دیگر از عمگرهای منطقی، عملگر نقیض(not) می باشد. این عملگر نتیجه یک عبارت شرطی را بر عکس میکند. یعنی اگر عبارت شرطی True باشد، آنگاه آن را False میکند و برعکس اگر عبارت شرطی False باشد آن را True خواهد کرد.
print( not(1 == 1) ) # output => False
عملگرهای شناسایی در پایتون
عملگرهای شناسایی عموما برای مقایسه اشیاء(در آینده بیشتر آشنا خواهید شد) با یکدیگر استفاده می شوند.
برای اینکه بتوانیم علاوه بر مقایسه دو متغیر از نظر مقدار، از لحاظ مکانشان در حافظه نیز مقایسه کنیم، از عملگر is استفاده می کنیم. یعنی علاوه بر اینکه دو متغیر مقدار یکسانی نیز دارند، در یک مکان در حافظه نیز قرار گرفته اند.
x = ["apple",1] y = ["apple",1] z = x print(x is z) # output => True print(x == y) # output => True print(x is y) # output => False
عمگر is در مثال بالا زمانی که دو متغیر یک آبجکت باشند مقدار True را بر میگرداند. بر عکس این عملگر هم عملگر is not است که برای بررسی عدم یکی بودن دو آبجکت استفاده می شود.
x = ["apple",1] y = ["apple",1] print(x is not y) # output => True
عملگرهای عضویت در پایتون
عملگرهای عضویت برای بررسی عضویت(in) یا عدم عضویت(not in) یک مقدار یا عنصر درون یک مجموعه از عناصر می باشد.
بررسی عضویت در مجموعه با استفاده از عملگر in:
x = ["apple", "banana"]
print("banana" in x)
# output => True
در خط دوم مثال بالا، بررسی میشود که آیا رشته ی”banana” از عناصر مجموعه ی x میباشد یا خیر. در صورت عضو بودن مقدار True و در صورت عضو نبودن مقدار False برمیگردد.
بررسی عدم عضویت در مجموعه با استفاده از عملگر not in:
x = ["apple", "banana"]
print("orange" not in x)
# output => True
عملگرهای بیتی در پایتون
با بعضی عملگرهای بیتی در بخش عملگرهای انتساب آشنا شده اید. این عملگر ها، عملیات خود را با مقایسه بیت به بیت متغیر های خود انجام می دهند.
عملگر & که مانند آن را در عملگر &= نیز دیده بودید، عملیات خود را با مقایسه ی بیتهای نظیر به نظیر متغیر های خود انجام می دهد.
- عملگر | برای مقایسه بیتهای نظیر به نظیر با استفاده از عمل یا, ”or”.
- عملگر ^ برای مقایسه بیتهای نظیر به نظیر با استفاده از عمل یای انحصاری یا ”XOR”.
- عملگر ~ برای معکوس کردن بیتها استفاده می شود.
- عملگر های << و >> نیز برای شیفت دادن بیتها، همانطور که در بخش عملگرهای انتساب توضیح داده شد عمل میکنند.
برای مثال میتوانید با تغییر عملگرهای زیر به عملگر مورد نظر، تغییرات و خروجی های آنها را مشاهده نمایید.
x = 9 print(x << 1) # output => ??? print(~1) # output => ??? print(x & 0) # output => ??? print(x | x) # output => ???
اهمیت ترتیب عملگرها
در میان عملگرها ممکن است بعضی از عملگرها در مقایسه با بعضی دیگر، دارای اولویت بالاتری باشند. به زبان سادهتر یعنی، در هنگام محاسبه نتیجه ی نهایی عملگر ها، ابتدا نتیجه ی عملگری که دارای اولویت بالاتری است، محاسبه میشود و سپس عملگر های دیگر اعمال می شوند. به مثال زیر توجه نمایید:
print(10 + 2 * 3)
به نظر شما نتیجه ی دستور بالا چه خواهد بود؟ خروجی مورد نظر ۳۶ خواهد بود یا ۱۶؟
برای همین باید به اولویت عملگر ها در هنگام اجرا توجه کرد. در لیست زیر اولویت عملگر ها از بالاترین اولویت به پایینترین اولویت آمده است.
1. پرانتز ها ()
2. **
3. مثبت واحد(+x)، نفی واحد(-x)، نفی بیتی(~x)
4. *, /, //, %
5. جمع و تفریق( +, -)
6. <<, >>
7. &
8. ^
9. |
10. ==, !=, <, <=, >, >=, is, is not
11. not
12. and
13. or
توصیه: به دلیل سخت بودن حفظ ترتیب این عملگر ها، توصیه میشود که برای انجام عملیات مورد نظر، آنها را درون پرانتر نوشته تا از اشتباه در هنگام محاسبه نهایی جلوگیری شود. به مثال زیر توجه نمایید.
print( (10+2) * 3 ) # output => 36