پیش نیاز های مقاله
توجه: ویدیو بالا تنها بخشی از دوره رایگانآموزش پایتون است.
"" تا وقتی بشقابت خالی نشده، از سر میز بلند نشو ! ""، مگه میشه کسی این جمله رو نشنیده باشه، جالبیش هم اینه که هیچکس نمیگه که دقیقا چند قاشق دیگه بخورید؛ فقط یک شرط وجود داره (خالی کردن بشقاب از غذا) و تا زمانی که این شرط بر قرار باشه شما کار رو تکرار میکنید.
خب تبریک میگم اگر بخش اول رو فهمیدید، مفهوم حلقه while در پایتون رو یاد گرفتید.
حلقه while در پایتون چیست؟
حلقه while در پایتون یک دستور تکرار است که یک یا چند خط کد رو تا زمانی که یک شرط مشخص درست (True) باشه، بارها و بارها اجرا میکنه. به محض اینکه اون شرط مشخص ناردست (False) بشه، حلقه متوقف یا به اصطلاح شکسته میشود و برنامه به اولین خط کد بعد از حلقه میره.
خود کلمه while در انگلیسی به معنی "تا وقتی که" هستش پس وقتی که دارید حلقه while رو میخونید با کلمه تا وقتی که شروع به خواندن کنید مثلا تا وقتی که این شرط بر قرار است فلان کارها رو تکرار کن.
ساختار حلقه while در پایتون (سینتکس و نحوه اجرا)
ساختار کلی حلقه while خیلی ساده اس:
while condition:
# بدنه حلقه: این خطوط تکرار میشوند
statement_1
statement_2
# این خط بعد از تمام شدن حلقه اجرا میشود
next_statementتوضیح اجزای ساختار:
- کلمه کلیدی while: کلمه ای که به مفسر پایتون میگه حلقه داره از اینجا شروع میشه.
- شررط (condition): ساده بگم، عبارتی که اینجا قرار میدید باید خروجیش Boolean باشه، یعنی نتیجه عبارت این بخش یا باید True باشه یا False.
- کالن یا دونقطه (:) : پایان خط while رو مشخص میکنه، اگر اخر خط قرارش ندید SyntaxError میگیرید.
- بدنه حلقه (تو رفتگی): همه خطوطی که با فاصله (space) جلوتر از حلقه while قرار میگیره نشان دهنده اینه که این کدها جز بدنه حلقه هستن در نتیجه تکرار میشوند.
نکته مهم: در پایتون تورفتگی ها (Indentation) بر اساس PEP8 استاندارد است که 4 فاصله (space) قرار داده بشه، اگر کمتر یا بیشتر باشد باعث SyntaxError نمیشود ولی ممکن است که Syntax Warning بگیرید.
اگر میخواید بیشتر در مورد PEP8 یاد بگیرید، میتونید مقاله PEP 8 چیست رو مطالعه کنید.
عملگرهای پرکاربرد در شرط حلقه while
دقت کنید اجباری در اینکه شرط حلقه while قرار میدید، حتما از Comparison Operators استفاده شده باشه ندارید؛ تنها نکته ای که باید در مورد شرط اینجا بدونید اینه که، اون چیزی که برگردانده میشه Boolean باشه.
پرکاربردترین عمگرهای مقایسه ای که در حلقه while استفاده میشن (برای مثال های زیر فرض بگیرید که x = 5 است)
| عملگر | معنی | مثال |
|---|---|---|
| == | مساوی است با | x == 5 |
| != | مساوی نیست با | x != 5 |
| > | کوچیک تر از | x < 10 |
| < | بزرگتر از | x > 10 |
| >= | کوچک تر یا مساوی | x >= 5 |
| <= | بزرگتر یا مساوی | x <= 6 |
نکته: دست شما در استفاده از and، or کاملا بازه و میتونید شرط های پیچیده هم تعریف کنید و محدودیتی وجود ندارد.
حلقه while چطور داره کار میکنه؟ (قدم به قدم با فلوچارت)
- پایتون اول میاد شرط رو بررسی میکنه
- اگر شرط True بشه، کدهای حلقه رو یکبار اجرا میکنه.
- وقتی که کدهای حلقه یکبار کامل اجرا شدن، حلقه بر میگردد و شرط از نو بررسی میشه.
- این فرایند 2 و 3 انقدر تکرار میشه که بالاخره شرط False بشه (اگر هیچوقت False نشه، حلقه بی نهایت میشه)
- وقتی که شرط False شد، پایتون از حلقه بیرون میاد و اولین خط کد بعد از حلقه رو اجرا میکنه (در واقع دیگه حلقه شکسته شده)
مثال ساده شمارش عدد 1 تا 5 با حلقه while:
count = 1 # قدم اول: مقدار اولیه
while count <= 5: # قدم دوم: شرط
print(count)
count += 1 # قدم سوم: بهروزرسانی
print("تمام شد! 🎉")توجه: count += 1 همون count = count + 1 است فقط برای سادگی کد کوتاه تر نوشته میشه.
خروجی:
1
2
3
4
5
تمام شد! 🎉جدول اجرای قدم به قدم حلقه (Table Trace)
برای فهم کامل حلقه while بیاین دقیقا بررسی کنیم که در هر دور از حلقه بالا چه اتفاقی داره رخ میده:
| دور | مقدار count | نتیجه شرط count <= 5 | جی رخ میده؟ |
|---|---|---|---|
| 1 | 1 | True ✅ | عدد 1 چاپ میشه و count برابر 2 میشه |
| 2 | 2 | True ✅ | عدد 2 چاپ میشه و count برابر 3 میشه |
| 3 | 3 | True ✅ | عدد 3 چاپ میشه و count برابر 4 میشه |
| 4 | 4 | True ✅ | عدد 4 چاپ میشه و count برابر 5 میشه |
| 5 | 5 | True ✅ | عدد 5 چاپ میشه و count برابر 6 میشه |
| - | 6 | False ❌ | حلقه تموم میشه و تمام شد! 🎉 چاپ میشه |
نکته مهم: بدنه حلقه 5 بار اجرا شد ولی شرط 6 بار بررسی شد، بار ششم چون count مقدارش برابر 6 بود شرط False شد و بدنه حلقه برای بار ششم اجرا نشد و حلقه شکسته شد.
برای نوشتن هر حلقه while سالم در python باید 3 نکته رو توی ذهنتون داشته باشد ( 3 قدم پایه ای و اصلی):
- مقداردهی اولیه: قبل از حلقه شما متغیر اصلی که قراره توی شرط استفاده کنیم رو میسازیم (مثال بالا count = 1)
- شرط: مهمترین بخش حلقه، تا وقتی که count کوچک تر یا مساوی 5 است حلقه ادامه داره (count <= 5)
- اپدیت: در هر دور، count رو زیاد میکنیم تا اونجایی که شرط رو براش نوشتیم بالاخره حلقه False بشه (count += 1).
نکته: همیشه بدونید، همیشه بر اساس شرطی که قرار میدید، باید توی بدنه حلقه while یک منطقی نوشته باشید که متغیر شرط رو بعد از دور اجرا تغییر بده وگرنه تا ابد شرط شما True برمیگردانه.
حلقه while else در پایتون
شاید فکر کنید که فقط شرط ها (if) در پایتون else دارن ولی حلقه while هم در پایتون else داره.
منطق ساده ای داره: بلوک یا بخش else فقط زمانی اجرا میشه که حلقه به طور طبیعی تموم بشه (یعنی شرط False بشه) و با دستور break حلقه قطع نشده باشه.
در صورتی که حلقه در بدنه اش به دستور break بر بخوره بلوک else کاملا نادیده گرفته میشه و کدهای بعد از حلقه اجرا میشن.
مثال از while else در پایتون (بدون دستور break):
n = 1
while n <= 3:
print(n)
n += 1
else:
print("حلقه بدون break تمام شد ✅")خروجی:
1
2
3
حلقه بدون break تمام شد ✅اگر الان به ذهنتون خورد خب اصلا به چه دردی خورد else؛ میگید خب همون خط رو بدون else هم قرار میدادم همین خروجی رو توی ترمینال میگرفتم، چه کاری بود اصلا !
اگر اینطور فکر کردید پس ادامه محتوا رو از دست نده.
مثال کاربردی از حلقه while else در پایتون (سیستم ورود با 3 بار فرصت)
اینجا جاییه که else کاربرد خودش رو نشون میده، خب ما یک سیستم میخوایم که کلا کاربر اجازه داشته باشه 3 بار رمزش رو وارد کنه، و هر بار که اشتباه وارد کنه حلقه دوباره اجرا میشه (تا زمانی که بیشتر از 3 بار نشده).
ولی باید حواستون باشه حلقه در دو حالت تموم میشه:
- رمز درست رو وارد کنه و با دستور break حلقه رو میشکنیم (چون وقتی رمز رو درست وارد کنه دلیلی نداره دیگه حلقه ادامه پیدا کنه)
- هر 3 فرصتش برای وارد کردن رمز رو استفاده کرده و حلقه به صورت طبیعی تموم میشه.
حالا چطور برای هر کدام از این حالت ها پیام متفاوت نشان بدیم، دقیقا با else.
مثال سیستم ورود با 3 بار فرصت:
password = "python123"
attempts = 0
while attempts < 3:
guess = input("رمز عبور را وارد کنید: ")
if guess == password:
print("✅ خوش آمدید!")
break
attempts += 1
print("❌ رمز اشتباه است.")
else:
print("🔒 ۳ بار اشتباه زدید؛ حساب شما قفل شد!")اگر خودتون کد بالا اجرا کرده باشید متوجه شدید که اگر کاربر رمز درست رو بزنه و به دستور break برخورد کنه دیگه پیام داخل else براش نشون داده نمیشه.
ولی اگر هر 3 فرصتش رو استفاده کنه و بازم رمز عبور درست رو وارد نکنه بخش else براش اجرا میشه.
چطوری حلقه بی نهایت کنترل شده بسازیم؟ (while True در پایتون)
عبارت while True یعنی برای همیشه تکرار کن چون هر دور از حلقه که شرط چک میشه True همیشه True باقی میمونه.
این یک حلقه بی نهایت عمدی هستش، یعنی نیاز داشتیم در اون برنامه که یک بلوکی از کد تا ابد تکرار بشه مگر یک حالت خاصی رخ بده که ما میخوایم و در اون صورت حلقه رو به صورت دستی میشکنیم (چون به صورت طبیعی هیچوقت تموم نمیشه).
مثال: یک ربات طوطی میسازیم که تا وقتی که باهاش خداحافظی نکنی، هر چیزی که بگی رو تکرار میکنه:
print("سلام! من طوطی پایتونی هستم 🦜 هر چی بگی تکرار میکنم.")
while True:
message = input("تو: ")
if message == "خداحافظ":
print("طوطی: خداحافظ! 👋")
break
print("طوطی:", message)چه اتفاقی افتاد:
تابع input هر بار برنامه رو نگه میداره که ورودی کاربر رو بگیره و بعد از اینکه کاربر متنش رو نوشته و enter رو زد منطق ما چک میشه.
اگر پیام کاربر هر چیزی به جز خداحافظ بود، طوطی حرف کاربر رو تکرار میکنه و این روند تا ابد ادامه پیدا میکنه.
بعد از گفتن کلمه خداحافظ، دستور break اجرا میشه و حلقه شکسته میشه.
اگر در حلقه بی نهایت گیر افتادیم چطور اون رو بشکنیم؟
اگر به هر دلیلی حلقه ای اجرا کردید ( چه اختیاری و چه عمدی) میتونید با زدن ctrl + c حلقه را بشکنید.