پایتون از ساختار حلقه for-else که کمتر شناخته شده اما فوق العاده مفید است، پشتیبانی می کند.

اگر در پایتون برنامه نویسی کرده اید، ممکن است از آن استفاده کرده باشید for حلقه برای تکرار بر روی آیتم های تکرارپذیر مانند لیست ها. اما برای برخی موارد استفاده از حلقه for همراه با else بند می تواند مفید باشد.

در این آموزش، روش استفاده از حلقه‌های for-else را با کدنویسی چند مثال برای درک روش عملکرد آن‌ها یاد خواهیم گرفت.

نحو از for-else در پایتون حلقه بزنید

در پایتون، for-else حلقه ساختاری است که a را ترکیب می کند for حلقه با یک else عبارت.

بدنه حلقه معمولاً یک وضعیت را بررسی می کند. اگر شرط باشد True، کنترل از حلقه خارج می شود. این else بلوک فقط زمانی اجرا می شود که for حلقه به طور معمول بدون مواجهه با a کامل می شود break بیانیه.

بیایید به یک ژنریک نگاه کنیم for-else ساختار حلقه:

for item in iterable:
    # loop body
    if condition:
        break
else:
    # else body

در اینجا خلاصه ای از روش کار این است:

  • این for حلقه روی هر یک از آیتم ها تکرار می شود iterable.
  • اگر condition است True و کنترل از حلقه خارج می شود، the else بلوک حذف شده است.
  • اگر for حلقه روی همه آیتم ها تکرار می شود iterable—بدون برآورده شدن شرط خروج از حلقه—the else بلوک اجرا می شود.

حالا اجازه دهید چند مثال را کدنویسی کنیم.

مثال 1: پیدا کردن یک عدد اول

بیایید استفاده کنیم for-else حلقه برای بررسی اول بودن یک عدد. همانطور که ممکن است به خاطر داشته باشید، عددی اول است که فقط بر 1 و خودش بخش پذیر باشد و هیچ عامل دیگری نداشته باشد.

پیشنهاد می‌کنیم بخوانید:  روش تنظیم دقیق نقطه شناور در جاوا اسکریپت نقاط شناور در جاوا اسکریپت دقت بسیار بالایی دارند و شما همیشه به این دقت نیاز ندارید. علاوه بر این - کاربر شما حتی کمتر احتمال دارد که آن را بخواهد. اغلب اوقات - ما می خواهیم «تریم» اعداد ممیز شناور با تنظیم یک دقت خاص (مثلاً دو نقطه اعشار)...

به قطعه کد زیر نگاه کنید:

import math

def is_prime(n):
    if n <= 1:
        return False
    
    for i in range(2, int(math.sqrt(n))+ 1):
        if n % i == 0:
            print(f"{n} is divisible by {i}. Not a prime number.")
            break
    else:
        # This block executes if the loop did not encounter a break statement
        print(f"{n} is a prime number.")
        return True

اینجا is_prime() تابع ابتدا شماره ورودی را بررسی می کند n کمتر یا مساوی 1 است. اگر چنین است، برمی گردد False از آنجایی که اعداد اول بزرگتر از 1 هستند. به یاد داشته باشید که کوچکترین عدد اول 2 است.

ما استفاده می کنیم for حلقه برای تکرار در محدوده اعداد از 2 تا مربع root از n (شامل).

  • اگر n بر هر کدام بخش پذیر است i در این محدوده (2 √n)، به این معنی n یک عدد اول نیست، زیرا ما یک عامل پیدا کرده ایم. تابع یک پیام را چاپ می کند و از حلقه خارج می شود. و else بلوک حذف شده است.
  • اگر حلقه بدون یافتن هیچ عاملی کامل شود – بدون زدن a break بیانیه – else بلوک اجرا می شود تابع آن را چاپ می کند n یک عدد اول است و برمی گردد True.

می توانید تأیید کنید که is_prime() تابع با چند فراخوانی تابع همانطور که انتظار می رود کار می کند:

# Test with a non-prime number
is_prime(10) 
# Output: 10 is divisible by 2. Not a prime number.


# Test with a prime number
is_prime(13) 
# Output: 13 is a prime number.

📑 یک یادداشت روی بررسی اعداد اول

احتمالاً حلقه را روی همه اعداد از 2 تا اجرا می کنید n برای بررسی اینکه آیا عاملی وجود دارد. اما در واقع برای تکرار تا حد کافی کافی است مربع root از n. چرا؟

پیشنهاد می‌کنیم بخوانید:  تست در پایتون با Pytest

به یاد بیاورید که اگر p یک عامل است، شما همیشه می توانید پیدا کنید q به طوری که p x q = n:

  • اگر n پس یک مربع کامل است p = q.
  • اگر n مربع کاملی نیست، شما موارد زیر را دارید. اگر p کمتر است از √n، q بزرگتر است از √n. و اگر q بزرگتر است از √n، p کمتر است از √n.

💡 پس اگر فاکتوری تا √n، شما نمی توانید آن را پیدا کنید √n یا

مثال 2: جستجوی یک آیتم در لیست

بیایید مثال دیگری بزنیم که در آن for-else حلقه مفید است.

به شرح زیر search item() تابع یک لیست و یک آیتم می گیرد. هدف این است که موارد موجود در لیست را حلقه بزنید و بررسی کنید که آیا آیتم وجود دارد یا خیر. برای این مشکل می توانید از ساختار حلقه for-else مانند زیر استفاده کنید:

def search_item(lst, item):
    for i in lst:
        if i == item:
            print(f"Found {item} in the list.")
            break
    else:
        print(f"{item} is not in the list.")

اگر item یافت می شود که کنترل از حلقه خارج می شود. این else مسدود کردن تنها در صورتی فعال می شود که مورد در لیست یافت نشود.

بیایید با چند فراخوانی تابع را تأیید کنیم:

# Test with a list containing the item
search_item([1, 2, 3, 4, 5], 3)  
# Output: Found 3 in the list.

# Test with a list not containing the item
search_item([1, 2, 3, 4, 5], 6)  
# Output: 6 is not in the list.

بسته بندی

امیدوارم این آموزش را پیدا کرده باشید روی را for-else ساخت حلقه در پایتون مفید است.

این می تواند مفید باشد، به خصوص زمانی که خروج از حلقه پس از تکرار روی همه موارد – بدون خروج زودتر از حلقه – مورد توجه است. گفتنی است، اگر نیازی به خروج مشروط از حلقه ندارید، به a نیاز ندارید for-else حلقه، و ساده for حلقه کافی خواهد بود.

به کدنویسی ادامه دهید. تا آموزش بعدی!