آشنایی با دستور continue در ساختار حلقۀ while در زبان برنامه‌نویسی پایتون


در آموزش قبل با دستور break و نحوۀ به‌کارگیری آن در ساختار حلقۀ while آشنا شدیم و دیدم که مفسر پایتون با رسیدن به دستور break در داخل حلقۀ while ادامۀ دستورات داخل بدنۀ آن را نادیده گرفته و از حلقه خارج می‌شود و ادامۀ برنامه را اجرا می‌کند (توجه داشته باشیم که در چنین شرایطی دستور else که بلافاصله بعد از حلقه می‌آید هم اجرا نمی‌شود.)

در این آموزش با دستور continue که یکی دیگر از دستورهای قابل‌استفاده در حلقه‌ها است آشنا خواهیم شد که به نوعی جریان اصلی اجرای دستورهای داخل یک حلقه‌ را تغییر می‌دهد و در ادامه نحوۀ پیاده‌سازی این دستور را در قالب یک مثال بررسی می‌کنیم بدین صورت که برنامه‌ای می‌نویسیم تا اعداد زوج یک رقمی مثبت یا به عبارتی اعداد 8، 6، 4، 2 و 0 را به ترتیب از بزرگ به کوچک در خروجی چاپ کند.

به خاطر داشته باشید
اعداد زوج بر عدد 2 بخش‌پذیر هستند بدین معنی که باقیماندۀ تقسیم آن‌ها بر 2 برابر با 0 است و اعداد فرد نیز در مقابل اعداد زوج قرار گرفته و باقیماندۀ تقسیم آن‌ها بر 2 عددی غیر 0 می‌باشد.

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

x = 10
while x:
    x -= 1 # Or, x = x-1
    if x % 2 != 0:
        continue # Odd? Skip print(x)
    print(x)

در کد فوق ابتدا عدد صحیح 10 را به متغیر x منتسب می‌کنیم سپس از آن در شرط حلقۀ while مورد استفاده قرار می‌دهیم که با اجرای برنامه مفسر شرط حلقه را ارزیابی می‌کند و همان‌طور که در آموزش‌های گذشته اشاره کردیم هر عدد غیر از 0 با مقدار بولینی معادل True ارزیابی می‌شود که از همین روی شرط True بوده و مفسر وارد حلقه می‌شود و اولین دستور بدنۀ آن را اجرا می‌کنید بدین معنی که یک واحد از مقدار منتسب به متغیر x کم کرده و عدد صحیح 9 به این متغیر منتسب می‌شود.

در ادامه دستور if اجرا می‌شود به طوری که ابتدا مفسر دستور شرطی x % 2 != 0 را بررسی می‌کند و از آنجایی که حاصل تقسیم مقدار منتسب به متغیر x یا به عبارتی عدد 9 بر 2 برابر با 1 است، شرط if برقرار بوده و از همین روی دستور داخل بدنۀ آن اجرا می‌شود که دستور continue در بدنۀ این شرط به مفسر اعلام می‌کند که به جای اجرای سایر دستورات داخل حلقه به ابتدای آن بازگردد و مجدداً شرط while را بررسی کند و از همین روی عدد 9 در خروجی چاپ نشده و مفسر به ابتدای حلقه بازمی‌گردد که آخرین مقدار منتسب به متغیر x برابر با عدد 9 بوده و True ارزیابی می‌شود که از همین روی وارد بدنۀ حلقه شده و مجدداً یک واحد از مقدار منتسب به متغیر x کم کرده و دستور شرطی x % 2 != 0 را برای آن چک می‌کند که در این مرحله مقدار x عدد 8 بوده و باقی‌ماندۀ تقسیم آن بر عدد 2 برابر با 0 است؛ بنابراین شرط if برقرار نبوده و دستور continue داخل بدنۀ آن اجرا نمی‌شود.

در واقع، مفسر اجرای بقیۀ دستورات داخل حلقه را ادامه می‌دهد و بدین ترتیب فانکشن ()print مقدار منتسب به متغیر x را در خروجی چاپ می‌کند و اجرای دستورات داخل حلقه ادامه پیدا می‌کند و هرگاه مقدار x عددی زوج بود در خروجی چاپ می‌شود و مقادیر عددی فرد متغیر x نادیده گرفته می‌شوند چرا که با دستور continue اجرای حلقه مجدداً از سر گرفته می‌شود و این عمل تا زمانی ادامه پیدا می‌کند که عدد صحیح 0 به متغیر x منتسب می‌شود که در این مرحله شرط حلقۀ while برابر با مقدار بولین False ارزیابی شده و اجرای آن به طور کامل متوقف می‌شود.

اسکریپت این برنامه را در فایلی تحت عنوان continueStatement.py ذخیره کرده و آن را اجرا می‌کنیم به طوری که در خروجی خواهیم داشت:

8
6
4
2
0

همان‌طور که می‌بینید، اعداد صحیح زوج با شروع از عدد 8 چاپ شده و اعداد فرد نیز نادیده گرفته شده‌اند و اجرای برنامه با رسیدن به مقدار عدد 0 متوقف شده است. به طور کلی، می‌توان گفت که از دستور continue زمانی استفاده می‌کنیم که بخواهیم به ابتدای حلقه بازگردیم و ادامۀ دستورات حلقه را در آن مرحله اجرا نکنیم اما این در حالی است که از دستور break برای خروج کامل از حلقۀ while استفاده می‌کنیم.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
RezA.h
RezA.h
۱۳۹۵/۱۲/۱۷
موقعی که مقدار x برابر با 0 میشه بازم دستور while اجرا میشه؟؟؟؟؟؟
Mrj
Mrj
۱۳۹۵/۰۶/۱۸
جای تشکر بسیار است برای آموزش های بسیار خوبتان.
amingar
amingar
۱۳۹۵/۰۳/۲۵
به این شکل که می خواهیم برنامه ای بنویسیم که اعداد فرد یک رقمی مثبت یعنی 8، 6، 4، 2، و 0 را به ترتیب از بزرگ به کوچک در خروجی چاپ کند.؟؟؟؟؟