آشنایی با دستور break و کاربرد آن در ساختار لوپی از جنس while در زبان برنامه نویسی پایتون

سیده آمین ارمان

کاربر نگاه دانلود
کاربر نگاه دانلود
عضویت
2016/05/10
ارسالی ها
1,730
امتیاز واکنش
20,744
امتیاز
795
محل سکونت
البرز
در آموزش قبل با دستور while (یکی از انواع لوپ در زبان برنامه نویسی پایتون) آشنا شدیم و نحوه ی کارکرد آن را در قالب مثال‌هایی نسبتاً کاربردی دیدیم. اگر به خاطر داشته باشید، گفتیم که دستور while را به صورت ساده می توانیم این طور بیان کنیم:

"تا زمانی که شرط x برقرار است، دستور y را اجرا کن."

یک بار دیگر برنامه ی whileLoop.py که در آموزش گذشته نوشتیم را در نظر بگیریم:

correctPassword = "SokanAcademy"
password = input("Please enter the password --> ")
while password != correctPassword:
password = input("Please try again and enter the correct password --> ")
print("Welcome to SokanAcadmy.com!")
در این برنامه یک رمز عبور ثابت برای ورود به سایت سکان آکادمی در نظر گرفته بودیم و کاربران باید برای ورود به سایت این کلمه ی عبور را به درستی وارد می کردند. در صورت مطابقت ورودی کاربر با مقدار از پیش تعیین شده، پیغام خوش آمد برای کاربر چاپ می شد و در غیر این صورت از کاربر درخواست می شد که مجدداً تلاش کند و رمز عبور درست را وارد کند؛ اما مشکلی که این برنامه دارد این است که در آن سناریویی برای زمانی که کاربر نتواند رمز عبور درست را وارد کند وجود ندارد و لوپی که برای دریافت مجدد رمز عبور در نظر گرفته بودیم تا زمان وارد کردن کلمه ی درست دائماً تکرار می شود.

در چنین شرایطی اگر کاربر نتواند کلمه عبور درست را وارد کند ناچار است که برنامه را ببندد. برای رفع این مشکل باید به طریقی قبل از آن که شرط ورود به لوپ برابر با False شود از آن خارج شویم. در چنین مواردی از دستور break استفاده می کنیم.

برای روشن شدن نحوه ی عملکرد دستور break، برنامه ی WhileLoop را به صورت زیر بازنویسی کرده و اسکریپت آن را در فایلی تحت عنوان BreakLoop.py ذخیره می کنیم:

correctPassword = "SokanAcademy"
password = input("Please enter the password --> ")
while password != correctPassword:
if password == "I’ve forgotten the password":
break
password = input("Please try again and enter the correct password "+
"or type:I’ve forgotten the password --> ")
به تغییرات این برنامه توجه کنید. داخل لوپ while یک دستور شرطی if قرار داده ایم. در صورتی که شرط این دستور برقرار باشد، یعنی کاربر عبارت "I`ve forgotton the password" به معنای "من کلمه ی رمز را فراموش کرده ام" را وارد کند مفسر وارد بدنه ی دستور شرطی if می شود و دستور break که در داخل آن قرار دارد را اجرا می کند. این دستور به مفسر می گوید که باید از بدنه ی لوپ while خارج شود و بقیه ی دستورهای داخل بدنه ی آن را اجرا نکند. اما در صورتی که شرط دستور if برقرار نباشد، دستور بعدی لوپ while اجرا خواهد شد و از کاربر درخواست می شود مجدداً برای وارد کردن رمز عبور درست تلاش کند و یا همان عبارت "I`ve forgotton the password" را وارد کند تا از لوپ خارج شود. یک نمونه از خروجی این برنامه به صورت زیر است:

====== RESTART: C:\SokanAcademy\While\BreakLoop.py ======
Please enter the password --> I`ve forgotton the password
>>>
همان طور که می بینید زمانی که کاربر عبارت I`ve forgotton the password را وارد کرده است، بقیه دستورات داخل لوپ while اجرا نشده اند. دقت کنید که در این جا دستور شرطی if را قبل از دستور دیگری که در داخل بدنه ی لوپ وجود دارد قرار داده ایم به این دلیل که ممکن است کاربر مانند اجرایی که دیدیم از همان ابتدای اجرای برنامه رمز عبور درست را نداند و بخواهد به سیستم اطلاع دهد که آن را فراموش کرده است. بنابراین وقتی عبارت I`ve forgotton the password را وارد می کند، چون با رمز عبور درست مطابقت ندارد، مفسر وارد لوپ while می شود و اگر دستور if در ابتدا نیامده باشد از کاربر یک بار دیگر هم درخواست وارد کردن رمز عبور می شود که این کار درست نیست، چون قبلاً کاربر اعلام کرده است که رمز عبور درست را نمی داند.

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

حالا که با دستور break و کارکرد آن آشنا شدیم می خواهیم برنامه را کمی توسعه دهیم. برای این منظور، سناریویی به صورت زیر را در نظر می گیریم:

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

correctPassword = "SokanAcademy"
password = input("Please enter the password --> ")
while password != correctPassword:
if password == "I`ve forgotton the password":
email = input("Please enter your email to sent you correct password --> ")
print("The password has sent to",email)
break
password = input("Please try again and enter the correct password "+
"or type:I`ve forgotton the password --> ")
else:
print("Welcome to SokanAcadmy.com") # Run if didn't exit loop with break
به کدهای اضافه شده به برنامه توجه کنید. در دستور شرطی if که به صورت تو در تو در لوپ while قرار دارد و در صورتی که کاربر اعلام کند که رمز ورود را فراموش کرده است بدنه ی آن اجرا خواهد شد، دستور جدیدی قرار داده ایم که از کاربر درخواست می کند آدرس ایمیل خود را وارد کند تا رمز ورود درست برای او ارسال شود و این در حالی است که ورودی کاربر به متغیری با نام email ارجاع داده می شود.

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

while testConditions: # Loop head with test
Block(s) of code # Loop body
else: # Optional else
Block(s) of code # Run if the loop didn`t exit with break
همان طور که در ساختار بالا می بینید، اضافه کردن بند else در این دستور مرکب کاملاً اختیاری است و در صورتی که مفسر با دستور break از لوپ while خارج نشود، کدهای داخل بدنه ی این دستور حتماً اجرا خواهند شد. حال سه نمونه از خروجی های حاصل از اجرای این برنامه را بررسی می کنیم:

====== RESTART: C:\SokanAcademy\While\BreakLoop.py ======
Please enter the password --> SokanAcademy
Welcome to SokanAcadmy.com
>>>
در این اجرا، کاربر از همان ابتدا رمز عبور درست را وارد کرده است، بنابراین مفسر اصلاً وارد بدنه ی لوپ نمی شود، با این حال دستور داخل بدنه ی else اجرا شده است. مجدد برنامه را اجرا می کنیم:

====== RESTART: C:\SokanAcademy\While\BreakLoop.py ======
Please enter the password --> sokanacademy
Please try again and enter the correct password or type:I`ve forgotton the password --> SokanAcademy
Welcome to SokanAcadmy.com
>>>
در این نوبت از اجرا، کاربر در ابتدا رمز ورود را به درستی وارد نمی کند، بنابراین شرط لوپ برقرار است و مفسر وارد آن می شود. چون کاربر عبارت فراموش کردن رمز را وارد نکرده است، دستور if اجرا نمی شود و در عوض از کاربر درخواست می شود که مجدداً برای وارد کردن رمز عبور جدید تلاش کند، و زمانی که رمز ورود را برای بار دوم به درستی وارد می کند، مفسر از لوپ خارج می شود و دستور else را اجرا می کند، چون با وجود آن که وارد لوپ شده بود، اما با دستور break از آن خارج نشد. و برای سومین و آخرین بار برنامه ی خود را اجرا می کنیم:

====== RESTART: C:\SokanAcademy\While\BreakLoop.py ======
Please enter the password --> sokanacademy
Please try again and enter the correct password or type:I`ve forgotton the password --> I`ve forgotton the password
Please enter your email to sent you correct password --> [email protected]
The password has sent to [email protected]
>>>
در این نوبت از اجرا، کاربر در ابتدا رمز عبور درست را وارد نکرده است و مفسر وارد بدنه ی لوپ می شود. شرط if در ابتدا برقرار نیست، چرا که کاربر اعلام نکرده است که رمز عبور را فراموش کرده است، بنابراین از او درخواست می شود که مجدداً برای وارد کردن رمز عبور جدید تلاش کند. این بار کاربر اعلام می کند که رمز عبور را فراموش کرده است، بنابراین شرط while هم چنان برقرار است و این بار شرط if داخل آن نیز برقرار است، بنابراین از کاربر درخواست می شود که آدرس پست الکترونیک خود را وارد کند تا کلمه ی عبور درست به آن آدرس ارسال شود. وقتی کاربر ایمیل خود را وارد می کند، دستور پرینت پیغامی چاپ می کند که کلمه ی عبور به آدرس ایمیل کاربر فرستاده شده است (البته در این برنامه هیچ ایمیلی ارسال نمی شود.) سپس مفسر با دستور break از لوپ خارج می شود، به همین دلیل دیگر دستور else اجرا نشده است.
 

برخی موضوعات مشابه

بالا