آشنایی با حلقه‌های while

حلقه‌ی for مجموعه‌ای را می‌گیرد و قطعه‌کدی را یک بار برای هر عضو آن اجرا می‌کند. در مقابل، حلقه‌ی while تا زمانی که شرط خاصی درست باشد، اجرا می‌شود.

حلقه‌ی while در عمل

می‌توانید از یک حلقه‌ی while برای شمردن دنباله‌ای از اعداد استفاده کنید. برای مثال حلقه‌ی while زیر از ۱ تا ۵ می‌شمرد:

1
2
3
4
5
current_number = 1

while current_number <= 5:
    print(current_number)
    current_number += 1

در خطّ اوّل شمردن از ۱ را با انتساب مقدار ۱ به متغیّر current_number شروع می‌کنیم. سپس حلقه‌ی while طوری تنظیم می‌شود که تا زمانِ کمتر یا مساوی بودنِ current_number از ۵، اجرا شود. کدِ داخلِ حلقه مقدارِ current_number را چاپ کرده و سپس با += آن را یکی زیاد می‌کند. (عملگر += کوتاه‌شده‌ی current_number = current_number + 1 است.)

پایتون تا زمانی حلقه را اجرا می‌کند که شرطِ current_number <= 5 برقرار باشد. پایتون ۱ را چاپ می‌کند سپس یکی به آن اضافه می‌کند تا عدد فعلی ۲ شود. چون ۲ کمتر از ۵ است، آن را چاپ کرده و مجدّداً یکی به آن اضافه می‌کند تا عدد فعلی ۳ شود و به همین ترتیب ادامه می‌دهد. به محض بیشتر شدنِ مقدارِ current_number از ۵، اجرای حلقه متوقّف شده و برنامه پایان می‌یابد:

1
2
3
4
5
1
2
3
4
5

بیشتر برنامه‌هایی که هرروزه استفاده می‌کنید شامل حلقه‌های while‌اند. برای مثال، یک بازی به حلقه‌ی while احتیاج دارد که تا زمانی که می‌خواهید به بازی ادامه دهید، به اجراشدن ادامه دهد و به محض رسیدنِ درخواستِ خروج اجرا شدن را متوقّف کند.

اجازه دادن به کاربر برای انتخاب زمان خروج

برای این که برنامه‌ی parrot.py تا زمانی که کاربر می‌خواهد، اجرا شود می‌توانیم بیشتر خط‌های آن را در یک حلقه‌ی while قرار دهیم. یک مقدارِ خروج تعریف می‌کنیم و تا زمانی که کاربر آن را وارد نکرده باشد، اجرای برنامه ادامه می‌یابد:

1
2
3
4
5
6
7
8
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "

message = ""

while message != 'quit':
    message = input(prompt)
    print(message)

در 1 اعلانی تعریف می‌کنیم تا به کاربران بگوییم که دو گزینه پیشِ رو دارند: وارد کردن یک پیام یا وارد کردن مقدارِ خروج (در اینجا، ‘quit’). سپس در 2 متغیّر message را مقداردهی می‌کنیم تا هر مقداری را که کاربر وارد می‌کند، پیگیری کنیم. متغیّر message را یک رشته‌ی خالی "" قرار می‌دهیم تا پایتون در اوّلین اجرای حلقه چیزی برای مقایسه کردن داشته باشد. حلقه‌ی while (3) تا زمانی که مقدار message برابر با ‘quit’ نباشد اجرا می‌شود.

در اوّلین ورود به حلقه، message تنها یک رشته‌ی خالی است، پس پایتون می‌تواند وارد حلقه شود. در message = input(prompt) پایتون اعلان را نمایش می‌دهد و منتظر پاسخ کاربران می‌ماند. هر آن‌چه وارد کنند به message نسبت داده شده و چاپ می‌شود؛ سپس پایتون شرطِ عبارتِ while را دوباره ارزیابی می‌کند. سرانجام زمانی که کاربران ‘quit’ را وارد می‌کنند، پایتون اجرای حلقه‌ی while را متوقّف کرده و برنامه پایان می‌یابد:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello everyone!

Hello everyone!

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello again.

Hello again.

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit

quit

این برنامه به خوبی کار می‌کند، تنها ایراد آن این است که واژه‌ی ‘quit’ را مثل یک پیام واقعی چاپ می‌کند. یک آزمون if ساده این مشکل را حل می‌کند:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "

message = ""

while message != 'quit':
    message = input(prompt)

    if message != 'quit':
        print(message)

اکنون برنامه پیش از نمایش پیام یک بررسی سریع انجام می‌دهد و تنها در صورتی آن را چاپ می‌کند که با مقدارِ خروج برابر نباشد:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello everyone!

Hello everything!

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. Hello again.

Hello again.

Tell me something, and I will repeat it back to you:
Enter 'quit' to end the program. quit