دستور While را شرح دهید .
دستور While را شرح دهید .
تا به حـال دو برنامـۀ nLines و countdown را کـه از بازگشـت بـراي انجـام عمـل تکـرار استفاده میکنند، دیدهایم. اینگونه برنامهها نیز تکرار نامیده میشوند. از آنجا کـه عمـل تکـرار بسـیار رایج است، پایتون چندین خصیصۀ زبان براي سادهتر کردن آن فراهم میکند. اولین خصیصه اي که قصد داریم بررسی کنیم، دستور while است. در اینجا چیزي شبیه به برنامۀ countdown را با یک دستور while میبینید:
def countdown(n):while n > 0:
print n
n = n-1
print “Blastoff!”
از آنجا که ما فراخوانی بازگشتی را حذف کردهایم، این تابع بازگشتی نیست. شما میتوانید دستور while را همانطور که در زبان انگلیسی بیان میشـود، اسـتفاده کنیـد. این کد یعنی «تا وقتی که 0 > n است، مقدار n را چاپ کرده و آنگاه 1 را از آن کم کن. وقتـی n بـه 0 رسید، کلمۀ !Blastoff را نمایش بده.»
در اینجا روند اجراي یک دستور while را به صورتی دیگر میبینید: · ارزیابی شرط و به دست آوردن 0 یا 1
7 .اگر شرط false) 0 (بود، از دستور while خارج شو و دستور بعدي را اجرا کن.
8 .اگر شرط true) 1 (بود، تمام دستورات موجود در بدنه را اجرا کن و به مرحلۀ 1 برگرد. منظور از بدنه تمام دستوراتی است که در زیر عنوان قرار گرفتـهانـد و داراي تـورفتگی یکسـان هستند.
این نوع روند را یک حلقه مینامند، زیرا مرحلۀ سوم به صورت یک حلقه به مرحلـۀ اول پیونـد داده شده است. توجه کنید که اگر شرط در اولین بررسی حلقه false باشـد، دسـتورات درون حلقـه هرگز اجرا نمیشوند. بدنۀ حلقه باید یک یا چند مقدار را تغییر دهد، به طوري که نهایتاً شرط false شود و حلقـه پایان یابد. در غیر این صورت حلقه براي همیشه تکرار میشود، که به این حالت حلقۀ بیانتهـا گفتـه میشود. درمورد countdown میتوانیم ثابت کنیم که حلقه پایان مییابد، زیرا میدانیم کـه مقـدار n متناهی است و میبینیم که در طول حلقه هر بار کوچکتـر مـیشـود بنـابراین سـرانجام بـه مقـدار 0 میرسیم. در برخی موارد به راحتی نمیتوان متناهی بودن حلقه را اثبات کرد:
def sequence(n):
while n != 1:
print n,
if n%2 == 0: # n is even
n = n/2
else: # n is odd
n = n*3+1
شرط این حلقه 1 != n است، بنابراین حلقه تا آنجا که n برابر با 1 شود، ادامه مییابد چـرا که این حالت شرط حلقه را false میکند. در هر بار اجراي حلقه، برنامه مقدار n را به عنوان خروجی چاپ میکنـد و سـپس زوج یـا فـرد بودن آن را بررسی مینماید. اگر زوج باشد، مقدار n بر 2 تقسیم میشود و اگر فرد باشد مقدار با عبارت 1+3*n جایگزین میگردد. براي مثال اگر مقدار آغازین (آرگومانی که به تـابع sequence فرسـتاده میشود) 3 باشد، دنبالۀ حاصل به این صورت خواهد بود:
3 10 5 16 8 4 2 1
از آنجا که n گاهی کاهش و گاهی افزایش مییابد، هیچ دلیل آشکاري براي رسیدن n به مقدار 1 یا پایان برنامه، وجود ندارد. براي برخی مقادیر ویژة n ، میتوانیم پایان یافتن برنامه را تضمین کنـیم. براي مثال اگر مقدار آغازین توانی از 2 باشد، آنگاه مقدار n تا وقتی که به 1 برسـد، در هـر بـار اجـراي حلقه زوج خواهد بود. در مثال قبل هنگامی که در دنباله به عدد 16 رسیدیم، میتوانیم مطمئن باشـیم که این دنباله پایان میپذیرد (یعنی شرط حلقه 1 == n میشود). صرف نظر از مقادیر ویژه، سؤال جالب آن است که آیا میتوانیم ثابت کنیم که این برنامـه بـراي تمام مقادیر n پایان مییابد؟ تاکنون کسی نتواسته این موضوع را ثابت یا رد کند.
تمرین 6-1 :تابع nLines از بخش 4-9 را به جاي بازگشت بـا اسـتفاده از تکـرار بازنویسـی کنید.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید