رشن | خدمات میزبانی وب

آموزش نمایش تعداد اعداد زوج یا فرد در یک مجموعه اعداد

فرض کنید که ما مجموعه‌ای از اعداد غیرترتیبی و تصادفی داریم که می‌خواهیم ببینیم چه تعداد از آن‌ها زوج و چه تعداد فرد هستند. مجموعه زیر را فرض کنید:

Python
numbers = [1, 4, 6, 9, 10, 1, 2, 12, 19, 21, 13, 17]

حالا می‌خواهیم با استفاده از پایتون ببینیم چه تعداد از آن‌ها عدد زوج هستند و چه تعداد فرد.

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


برای این که ببینیم عدد زوج هست یا خیر باید چک کنیم که باقی‌مانده تقسیم صفر هست یا یک. اگر صفر بود به معنای زوج بودن عدد و اگر هم یک بود به معنای فرد بودن هست.

هم‌چنین برای محاسبه تعداد اعداد زوج و فرد نیز لازم داریم تا دو متغیر تعریف کنیم و در یک حلقه بازگشتی یا recursive loop از آن استفاده می‌کنیم.

Python
numbers = [1, 4, 6, 9, 10, 1, 2, 12, 19, 21, 13, 17]
even_numbers = 0
odd_numbers = 0

حالا با استفاده از یک حلقه for باید تعداد را به این صورت مشخص کنیم:

Python
for n in numbers:
if n % 2 == 0:
even_numbers += 1
elif n % 2 != 0:
odd_numbers += 1

ابتدا چک می‌کنیم که عدد زوج هست یا خیر و در هر بار تکرار حلقه نیز به متغیر مربوطه یک مقدار اضافه می‌شود تا تعداد اعداد را در خودش ذخیره کند.

پس تا به این جای کار کد ما به این صورت شد:

Python
numbers = [1, 4, 6, 9, 10, 1, 2, 12, 19, 21, 13, 17]
even_numbers = 0
odd_numbers = 0
for n in numbers:
if n % 2 == 0:
even_numbers += 1
elif n % 2 != 0:
odd_numbers += 1

حالا برای نمایش تعداد باید از تابع print کمک بگیریم تا تعداد را نمایش دهیم، اما این تابع را کجا باید بنویسیم؟ در داخل شرط ها؟ در داخل حلقه و بیرون شرط؟ یا در بیرون حلقه؟ هر سه مورد را با هم تست می‌کنیم و خروجی‌ها را با هم می‌بینیم.

تابع print داخل شرط:

Python
numbers = [1, 4, 6, 9, 10, 1, 2, 12, 19, 21, 13, 17]
even_numbers = 0
odd_numbers = 0
for n in numbers:
if n % 2 == 0:
even_numbers += 1
print(f"there are {even_numbers} even numbers")
elif n % 2 != 0:
odd_numbers += 1
print(f"there are {odd_numbers} odd numbers")

خروجی:

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

تابع print داخل حلقه و بیرون شرط:

Python
numbers = [1, 4, 6, 9, 10, 1, 2, 12, 19, 21, 13, 17]
even_numbers = 0
odd_numbers = 0
for n in numbers:
if n % 2 == 0:
even_numbers += 1
elif n % 2 != 0:
odd_numbers += 1
print(f"there are {even_numbers} even numbers")
print(f"there are {odd_numbers} odd numbers")

خروجی:

این روش نسبت به بالا مزیتی که دارد در دو خط آخر می‌توانیم متوجه شویم چه تعداد عدد زوج و فرد داریم اما ۲۴ مرتبه این تابع را در خروجی می‌بینیم. عجیب است، نه؟ علت این هست که به ازای هر بار تکرار حلقه، هر دو تابع print خروجی می‌دهند که مثلا در عدد اول تعداد اعداد زوج برابر با ۰ بوده و فرد برابر با ۱ که این دو خط مربوط به محاسبه عدد ایندکس شماره ۰ یعنی عدد ۱ هست. عدد بعدی یعنی ۴ هم دو مرتبه چک می‌شود و الی آخر. این شیوه به نظرم برای زمانی مناسب هست که علاوه بر این که به ازای هر عدد چک می‌کنیم عدد زوج بوده یا فرد، مشخص می‌کنیم که تا آن عدد چند تا عدد زوج یا فرد پیدا شده که البته با مورد قبلی یعنی تابع print داخل شرط به نوعی هم‌پوشانی دارد.

تابع print در بیرون حلقه:

Python
numbers = [1, 4, 6, 9, 10, 1, 2, 12, 19, 21, 13, 17]
even_numbers = 0
odd_numbers = 0
for n in numbers:
if n % 2 == 0:
even_numbers += 1
elif n % 2 != 0:
odd_numbers += 1
print(f"there are {even_numbers} even numbers")
print(f"there are {odd_numbers} odd numbers")

خروجی:

Python
there are 5 even numbers
there are 7 odd numbers

این شیوه تنها دو خط خروجی دارد که مطلوب ماست و زمانی که کار حلقه به پایان رسید این دو خط اجرا می‌شوند.

نظرات