نحوه استفاده از عملگر %

 تاریخ انتشار :
/
  وبلاگ


عملیات مدول در پایتون با استفاده از عملگر % انجام می شود که عملگر “modulo” نیز نامیده می شود. هنگامی که دو عدد بر یکدیگر تقسیم می شوند، عملیات مدول باقیمانده را تعیین می کند. این یک عملیات ریاضی پایه است و عملگر % در پایتون یک ابزار همه کاره با تعدادی کاربرد است. در این وبلاگ، ما در مورد ویژگی های استفاده از عملگر % پایتون و برخی از کاربردهای متعدد آن بحث خواهیم کرد. بیایید دریابیم که در این وبلاگ به چه چیزی خواهیم پرداخت:

  1. کاربرد اصلی:

استفاده از عملگر % آسان است. هم سود سهام و هم تقسیم کننده یا عددی که سود سهام بر آن تقسیم می شود، عملوندهای لازم هستند. در نتیجه تقسیم، اپراتور باقیمانده را برمی گرداند. در اینجا یک تصویر ساده است:

سود سهام = 17

مقسوم علیه = 5

باقیمانده = تقسیم کننده % سود سهام

چاپ (باقی مانده) # خروجی: 2

در این حالت 17 (مقدار سود سهام) بر 5 (مقدار تقسیم کننده) تقسیم می شود. نتیجه این تقسیم 3 با باقیمانده 2 است. بنابراین به متغیر باقی مانده مقدار 2 اختصاص داده می شود.

چاپ (باقی مانده) # خروجی: 2:

در نهایت، کد مقدار متغیر باقیمانده را با استفاده از تابع print() چاپ می کند. نتیجه 2 خواهد بود که باقیمانده تقسیم 17 بر 5 است.

به طور خلاصه، زمانی که 17 با عملگر % بر 5 تقسیم شود، کد باقیمانده را محاسبه می کند و نتیجه (2) را به متغیر باقی مانده اختصاص می دهد. سپس مقدار متغیر باقیمانده را چاپ می کند که 2 را خروجی می کند.

  1. ماژول تعیین اعداد زوج/فرد

برای تعیین زوج یا فرد بودن یک عدد، اغلب از عملگر % استفاده می شود. باقیمانده یک عدد صحیح مثبت تقسیم بر دو یا 0 برای اعداد زوج یا 1 برای اعداد فرد است. در اینجا یک تصویر است:

دف زوج است(عدد):

عدد برگشتی % 2 == 0

عدد 1 = 10

عدد 2 = 15

print(is_even(number1)) # خروجی: True

print(is_even(number2)) # خروجی: False

دف زوج است (عدد):

این خط تابعی به نام is_even را تعریف می کند که یک آرگومان به نام عدد می گیرد. هدف این تابع تعیین زوج بودن یا نبودن عدد داده شده است.

عدد برگشتی % 2 == 0:

دستور return در تابع هسته منطق است. از عملگر %، که به عنوان عملگر مدول نیز شناخته می شود، برای محاسبه باقی مانده زمانی که عدد بر 2 تقسیم می شود، استفاده می کند. اگر باقیمانده 0 باشد، به این معنی است که عدد بر 2 بخش پذیر است و بنابراین زوج است. در این حالت تابع True را برمی گرداند. در غیر این صورت، اگر باقیمانده 0 نباشد، عدد بر 2 بخش پذیر نیست و آن را به عددی فرد تبدیل می کند. در این حالت تابع False را برمی گرداند.

عدد 1 = 10:

در این خط به متغیر number1 مقدار 10 داده می شود که یک عدد زوج است.

شماره 2 = 15:

به متغیر number2 مقدار 15 داده می شود که یک عدد فرد است.

print(is_even(number1)) # خروجی: True:

کد تابع is_even را با عدد 1 (که 10 است) به عنوان آرگومان فراخوانی می کند. تابع True را برمی گرداند زیرا 10 یک عدد زوج است و خروجی True خواهد بود.

print(is_even(number2)) # خروجی: False:

کد تابع is_even را با عدد 2 (که 15 است) به عنوان آرگومان فراخوانی می کند. تابع False را برمی گرداند زیرا 15 یک عدد زوج نیست (عددی فرد است) و خروجی False خواهد بود.

به طور خلاصه، کد تابعی به نام is_even را تعریف می کند که تعیین می کند که آیا یک عدد از عملگر مدول % استفاده می کند یا خیر. سپس استفاده از تابع را با بررسی زوج یا فرد بودن عدد 1 و 2 و چاپ نتایج مربوطه نشان می دهد: درست برای عدد 1 ( زوج ) و نادرست برای عدد 2 (فرد ).

3. ماژول بررسی سال کبیسه

به جز سال هایی که بر 100 بخش پذیرند و بر 400 بخش پذیر نیستند، سال کبیسه در تقویم میلادی سالی است که بر 4 بخش پذیر باشد.

def is_leap_year(year):

سال بازگشت % 4 == 0 و ( سال % 100 != 0 یا سال % 400 == 0 )

سال 1 = 2000

سال 2 = 2021

print(is_leap_year(year1)) # خروجی: True

print(is_leap_year(year2)) # خروجی: False

def is_leap_year(year):

این خط تابعی به نام is_leap_year تعریف می کند که یک آرگومان به نام سال را می گیرد. هدف این تابع این است که مشخص کند آیا سال معین سال کبیسه است یا خیر.

سال بازگشت % 4 == 0 و ( سال % 100 != 0 یا سال % 400 == 0 )

عبارت بازگشتی در تابع حاوی منطقی است که تعیین می کند آیا سال یک سال کبیسه است یا خیر.

منطق از قوانین شناسایی سال های کبیسه در تقویم میلادی پیروی می کند:

یک سال کبیسه بر 4 بخش پذیر است.

اما اگر یک سال بر 100 بخش پذیر باشد، سال کبیسه نیست مگر اینکه بر 400 نیز تقسیم شود.

عبارت year % 4 == 0 بررسی می کند که آیا سال بر 4 بخش پذیر است یا خیر. اگر این شرط True باشد، قسمت اول عبارت اجرا می شود.

عبارت (سال % 100 != 0 یا سال % 400 == 0) یک شرط “یا” است، به این معنی که اگر هر یک از زیرشرط های آن True باشد به True ارزیابی می شود. شرایط فرعی به شرح زیر است:

سال % 100 != 0: با این کار بررسی می شود که سال بر 100 بخش پذیر نباشد. اگر این شرط True باشد، به این معنی است که سال یا بر 100 بخش پذیر نیست یا مضرب 100 نیست که شرط “سال کبیسه” را برآورده می کند.

سال % 400 == 0: بررسی می کند که آیا سال بر 400 بخش پذیر است یا خیر. اگر این شرط True باشد، به این معنی است که سال مضرب 400 است که شرط “سال کبیسه” را نیز برآورده می کند.

بنابراین، کل عبارت سال % 4 == 0 و (سال % 100 != 0 یا سال % 400 == 0) اگر سال کبیسه باشد True و اگر سال کبیسه نباشد نادرست خواهد بود.

print(is_leap_year(year1)) # خروجی: True

کد تابع is_leap_year را با year1 (که 2000 است) به عنوان آرگومان فراخوانی می کند. تابع True را برمی گرداند زیرا سال 2000 یک سال کبیسه است و خروجی True خواهد بود.

print(is_leap_year(year2)) # خروجی: False

کد تابع is_leap_year را با year2 (که 2021 است) به عنوان آرگومان فراخوانی می کند. تابع False را برمی گرداند زیرا سال 2021 یک سال کبیسه نیست و خروجی False خواهد بود.

کد تابعی به نام is_leap_year تعریف می کند که بر اساس قوانین تقویم میلادی تعیین می کند که آیا یک سال معین یک سال کبیسه است یا خیر. سپس با بررسی اینکه سال 1 و سال 2 سال کبیسه هستند یا نه و نتایج مربوطه را چاپ می کند، استفاده از تابع را نشان می دهد: درست برای year1 (یک سال کبیسه) و نادرست برای year2 (نه یک سال کبیسه).

4. رشته ها را با عملگر % قالب بندی کنید

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

format_string = “سلام %s! شما %d ساله هستید.’

نام = “جان”

سن = 30

formatted_string = format_string % (نام، سن)

print(string_formatted) # خروجی: “سلام جان! شما 30 ساله هستید.

format_string = “سلام %s! شما %d ساله هستید.’

در این خط یک رشته به متغیر format_string اختصاص داده می شود. رشته حاوی ظروف با برچسب %s و %d است. این ظروف به عنوان شکاف هایی عمل می کنند که در ادامه کد با مقادیر واقعی پر می شوند.

%s محفظه ای برای مقدار رشته است.

%d یک محفظه مقدار صحیح است.

نام = “جان”

در اینجا، به نام متغیر مقدار “جان” اختصاص داده می شود. این یک متغیر رشته ای است که برای جایگزینی ظرف %s در format_string استفاده می شود.

سن = 30

به متغیر سن مقدار 30 اختصاص داده می شود که یک عدد صحیح است. برای جایگزینی %d ظرف در format_string استفاده خواهد شد.

formatted_string = format_string % (نام، سن)

این خط مقادیر نام و سن را با format_string با استفاده از عملگر % ترکیب می کند. عملگر % در این زمینه برای قالب بندی رشته ها، به ویژه روش “قالب بندی رشته ای به سبک قدیمی” استفاده می شود.

اپراتور % انتظار دارد یک تاپل حاوی مقادیر در کانتینرها درج شود. در این حالت، تاپل حاوی نام و سن است، بنابراین عملگر % %s را با «جان» و %d را با 30 جایگزین می‌کند و در نتیجه رشته فرمت‌شده «سلام جان! شما 30 ساله هستید.»

print(string_formatted) # خروجی: “سلام جان! شما 30 ساله هستید.

در نهایت، رشته فرمت شده با استفاده از تابع print() در کنسول چاپ می‌شود و خروجی عبارت «سلام جان! شما 30 ساله هستید.»

5. کار با شاخص ها و تکرارهای حلقه با استفاده از Modulo

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

عناصر = [“apple”, “banana”, “orange”, “grape”]

برای i در محدوده (10):

آیتم = اقلام[i % len(items)]

مهر (اقلام)

در این کد، ما لیستی از عناصر حاوی میوه ها را داریم: “سیب”، “موز”، “پرتقال” و “انگور”. سپس کد از یک حلقه for برای 10 بار تکرار استفاده می کند. در طول هر تکرار، شاخص را با استفاده از i% len (اقلام) محاسبه می کند، که تضمین می کند که شاخص در محدوده لیست اقلام باقی می ماند. سپس مقدار این شاخص در کنسول چاپ می شود.

از آنجایی که حلقه for 10 بار تکرار می شود، آیتم ها را از لیست آیتم ها به صورت حلقه ای خروجی می دهد. نتیجه این خواهد بود:

یک سیب

موز

نارنجی

انگور

یک سیب

موز

نارنجی

انگور

یک سیب

موز

6. استفاده از عملگر % برای قالب بندی اعداد ممیز شناور

اعداد ممیز شناور دقیق را می توان با استفاده از عملگر % قالب بندی کرد. شکل زیر برای قالب بندی اعداد ممیز شناور است:

pi = 3.14159265359

formatted_pi = “مقدار pi: %.2f” % pi

print(formatted_pi) # خروجی: “مقدار pi: 3.14”

در این کد یک متغیر pi داریم که مقدار pi (تقریباً 3.14159265359) را ذخیره می کند. سپس کد از قالب بندی رشته با عملگر % برای ایجاد رشته formatted_pi جدید استفاده می کند.

تعیین کننده فرمت %f در رشته مقدار pi: %2f نشان می دهد که متغیر pi باید به عنوان یک عدد ممیز شناور با دو رقم اعشار در رشته درج شود.

هنگامی که از %pi در انتهای رشته استفاده می کنیم، %f را با مقدار pi که به دو رقم اعشار فرمت شده است جایگزین می کند. سپس رشته به دست آمده، “Value of pi: 3.14” در کنسول چاپ می شود. این به ما این امکان را می دهد که مقدار pi را با سطح خاصی از دقت در خروجی نمایش دهیم.

ماژول بسته بندی عدد صحیح

هنگامی که می خواهید یک مقدار را در یک محدوده خاص ذخیره کنید، عملگر % می تواند برای انجام بسته بندی اعداد صحیح استفاده شود. به عنوان مثال، ممکن است بخواهید اطمینان حاصل کنید که یک شاخص در محدوده یک لیست باقی می ماند:

def get_wrapped_index (index, list_length):

ایندکس % list_length را برگرداند

شاخص 1 = 8

شاخص 2 = 15

list_length = 5

print(get_wrapped_index (index1, list_length)) # خروجی: 3

print(get_wrapped_index (index2, list_length)) # خروجی: 0

در این کد تابعی به نام get_wrapped_index داریم که دو آرگومان index و list_length می گیرد. این تابع شاخص پیچیده شده را محاسبه و برمی گرداند، که تضمین می کند که شاخص در محدوده لیست باقی می ماند.

شاخص بازگشت خط % list_length از عملگر % (اپراتور ماژول) برای محاسبه باقی مانده زمانی که شاخص بر list_length تقسیم می شود، استفاده می کند. این باقیمانده نمایانگر ایندکس پیچیده شده در محدوده لیست است.

برای مثال، بیایید index1 = 8 و list_length = 5 را در نظر بگیریم:

باقیمانده 8 % 5 3 است، بنابراین تابع 3 را برمی گرداند، و اطمینان حاصل می کند که شاخص 8 در محدوده لیست قرار می گیرد و در محدوده لیست باقی می ماند. [0, 1, 2, 3, 4].

به همین ترتیب برای index2 = 15 و list_length = 5:

باقیمانده 15 % 5 0 است، بنابراین تابع 0 را برمی گرداند، که نشان می دهد شاخص 15 در اطراف قرار می گیرد و با شاخص 0 در لیست مطابقت دارد.

هنگامی که کد خروجی را برای هر دو حالت چاپ می کند، نتایج به صورت زیر خواهد بود:

3

0

ملاحظات عملکرد

اگرچه عملگر % عملی و انعطاف پذیر است، اما توجه به این نکته مهم است که در برخی شرایط روش های جایگزین، مانند عملیات بیتی یا استفاده از تابع divmod() ممکن است عملکرد بهتری را برای موارد خاص ارائه دهد. با این حال، عملگر % برای اکثر موارد استفاده معمول عملکرد خوبی دارد و همچنان یک ابزار محبوب و قابل اعتماد برای بسیاری از عملیات در پایتون است.