حلقه while در پایتون؛ آموزش حلقه و break و continue
حلقه while در پایتون
🐍 جلسه ۱۵ آموزش پایتون: حلقه while و کنترل تکرار
حلقه while در پایتون با مثالهای کاربردی؛ یادگیری حلقه بینهایت، break، continue و ساخت حلقههای شرطی به زبان ساده.
تحقیق و تدوین مهدی گمرکی
📌 مرور جلسه قبل
در جلسه ۱۴ با عملگرهای منطقی در پایتون آشنا شدیم و یاد گرفتیم چگونه با استفاده از and، or و not چند شرط را با یکدیگر ترکیب کنیم.
همچنین شرطهای تودرتو را بررسی کردیم و دیدیم که چگونه میتوانیم تصمیمگیریهای چندمرحلهای ایجاد کنیم.
برای مثال:
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("ورود مجاز است.")
else:
print("ورود غیرمجاز است.")
در این مرحله برنامه ما میتواند شرایط مختلف را بررسی و بر اساس آنها تصمیمگیری کند.
اما یک سؤال مهم باقی میماند:
اگر بخواهیم یک دستور را چندین بار اجرا کنیم، آیا باید همان کد را بارها بنویسیم؟
مثلاً اگر بخواهیم عددهای ۱ تا ۱۰۰ را چاپ کنیم، آیا باید ۱۰۰ خط print بنویسیم؟
قطعاً نه! 😎
اینجاست که یکی از مهمترین مفاهیم برنامهنویسی وارد میشود:
🔁 حلقهها (Loops)
🎯 هدف جلسه ۱۵
در این جلسه میخواهیم با مفهوم حلقه در پایتون آشنا شویم و یاد بگیریم چگونه یک بخش از برنامه را چندین بار اجرا کنیم.
در پایان این جلسه میتوانید:
- مفهوم حلقه را توضیح دهید.
- با ساختار
whileکار کنید. - شرط ادامه حلقه را تعریف کنید.
- مقدار یک متغیر را در هر تکرار تغییر دهید.
- از حلقههای بینهایت جلوگیری کنید.
- با
breakاز حلقه خارج شوید. - با
continueیک تکرار را رد کنید. - حلقههای ساده و کاربردی بنویسید.
🔄 حلقه در پایتون چیست؟
گاهی لازم است یک عملیات چندین بار تکرار شود.
برای مثال:
- چاپ اعداد ۱ تا ۱۰
- دریافت چند ورودی از کاربر
- تلاش مجدد برای وارد کردن رمز عبور
- شمارش تعداد آیتمها
- تکرار یک عملیات تا زمانی که یک شرط برقرار باشد
به جای اینکه کد را چندین بار بنویسیم، میتوانیم از حلقه (Loop) استفاده کنیم.
حلقه به زبان ساده یعنی:
یک بخش از کد را تا زمانی که یک شرط برقرار است، دوباره و دوباره اجرا کن.
در پایتون چند نوع حلقه وجود دارد که مهمترین آنها while و for هستند.
در این جلسه ابتدا با while آشنا میشویم.
🐍 حلقه while در پایتون چیست؟
کلمه while در پایتون برای ساخت حلقهای استفاده میشود که تا زمانی که یک شرط True باشد، اجرای کد داخل حلقه ادامه پیدا میکند.
ساختار کلی:
while شرط:
دستورات حلقه
میتوان این ساختار را اینطور تصور کرد:
آیا شرط درست است؟
↓
بله
↓
اجرای کد داخل حلقه
↓
بررسی دوباره شرط
↓
بله
↓
اجرای دوباره
↓
...
↓
خیر
↓
خروج از حلقه
بنابراین while شباهت زیادی به یک if دارد؛ با این تفاوت که if معمولاً یک بار شرط را بررسی میکند، اما while میتواند تا زمانی که شرط برقرار است، کد را بارها اجرا کند.
🔢 اولین مثال while
فرض کنید میخواهیم اعداد ۱ تا ۵ را چاپ کنیم:
number = 1
while number <= 5:
print(number)
number += 1
خروجی:
۱
۲
۳
۴
۵
اما پشت صحنه چه اتفاقی میافتد؟
ابتدا:
number = 1
سپس پایتون شرط را بررسی میکند:
number <= 5
چون ۱ <= ۵ درست است، وارد حلقه میشود و عدد ۱ را چاپ میکند.
سپس:
number += 1
مقدار number را یک واحد افزایش میدهد.
حالا مقدار متغیر ۲ است.
پایتون دوباره شرط را بررسی میکند:
۲ <= ۵ → True
پس حلقه ادامه پیدا میکند.
این روند تا زمانی ادامه پیدا میکند که:
۶ <= ۵ → False
در این لحظه پایتون از حلقه خارج میشود.
🧠 چرا تغییر متغیر داخل حلقه مهم است؟
به این قسمت دقت کنید:
number += 1
این خط بسیار مهم است.
اگر مقدار number را تغییر ندهیم، شرط همیشه درست باقی میماند.
مثلاً:
number = 1
while number <= 5:
print(number)
در اینجا مقدار number همیشه برابر ۱ باقی میماند.
پس:
۱ <= ۵ → True
۱ <= ۵ → True
۱ <= ۵ → True
...
و حلقه هرگز تمام نمیشود!
به چنین وضعیتی حلقه بینهایت (Infinite Loop) میگوییم.
⚠️ حلقه بینهایت در پایتون
حلقه بینهایت یعنی حلقهای که شرط خروج از آن هیچوقت برقرار نمیشود.
مثال:
number = 1
while number <= 5:
print(number)
این برنامه دائماً عدد ۱ را چاپ میکند.
برای جلوگیری از این مشکل، باید مطمئن شویم که در هر تکرار، شرایط به سمت پایان حلقه حرکت میکند.
مثلاً:
number = 1
while number <= 5:
print(number)
number += 1
اکنون مقدار متغیر در هر مرحله افزایش پیدا میکند و سرانجام شرط False میشود.
📊 اجزای اصلی یک حلقه while
یک حلقه معمولاً سه بخش مهم دارد:
۱. مقداردهی اولیه
number = 1
۲. شرط ادامه
while number <= 5:
۳. تغییر وضعیت
number += 1
بنابراین یک الگوی بسیار رایج در حلقههای while این است:
variable = مقدار_اولیه
while شرط:
# انجام عملیات
variable += تغییر
این الگو را خوب یاد بگیرید؛ در بسیاری از برنامههای آینده با آن روبهرو خواهید شد.
🔢 مثال: شمارش معکوس
حلقه while فقط برای افزایش اعداد نیست.
میتوانیم شمارش معکوس هم انجام دهیم:
count = ۵
while count >= ۱:
print(count)
count -= ۱
print("شروع!")
خروجی:
۵
۴
۳
۲
۱
شروع!
در اینجا به جای += از -= استفاده کردهایم.
👤 مثال کاربردی: دریافت عدد تا زمانی که مقدار صحیح وارد شود
یکی از کاربردهای مهم while این است که از کاربر بخواهیم تا زمانی که ورودی مناسبی وارد نکرده، دوباره تلاش کند.
مثلاً:
number = int(input("یک عدد مثبت وارد کنید: "))
while number <= ۰:
print("عدد باید مثبت باشد.")
number = int(input("دوباره وارد کنید: "))
print("عدد معتبر است.")
در این برنامه:
- اگر عدد مثبت باشد، حلقه اجرا نمیشود.
- اگر عدد صفر یا منفی باشد، برنامه از کاربر دوباره ورودی میگیرد.
- این روند تا زمانی ادامه دارد که کاربر یک عدد مثبت وارد کند.
این دقیقاً یکی از کاربردهای واقعی حلقه while است.
🔐 مثال کاربردی: تلاش برای ورود رمز عبور
فرض کنید یک برنامه ساده میخواهیم که تا زمانی که رمز درست وارد نشده، از کاربر رمز بخواهد:
password = ""
while password != "python123":
password = input("رمز عبور را وارد کنید: ")
print("ورود موفق بود! ✅")
در اینجا شرط حلقه این است:
password != "python123"
تا زمانی که رمز اشتباه باشد، مقدار شرط True است و حلقه ادامه پیدا میکند.
وقتی کاربر رمز صحیح را وارد کند:
password != "python123"
برابر False میشود و حلقه پایان پیدا میکند.
البته این مثال صرفاً برای آموزش مفهوم حلقه است و در برنامههای واقعی نباید رمز عبور را به این شکل داخل کد قرار داد.
🛑 دستور break در پایتون
گاهی اوقات میخواهیم حتی اگر شرط حلقه هنوز True باشد، خودمان از حلقه خارج شویم.
برای این کار از break استفاده میکنیم.
مثال:
number = 1
while number <= 10:
print(number)
if number == ۵:
break
number += 1
خروجی:
۱
۲
۳
۴
۵
وقتی مقدار number به ۵ رسید، این دستور اجرا میشود:
break
و پایتون بلافاصله حلقه را متوقف میکند.
پس:
breakیعنی «از حلقه خارج شو».
🎯 مثال کاربردی break
فرض کنید از کاربر عدد میگیریم و میخواهیم تا زمانی که عدد ۰ وارد نشده، برنامه ادامه داشته باشد:
while True:
number = int(input("یک عدد وارد کنید: "))
if number == ۰:
break
print(f"عدد واردشده: {number}")
print("برنامه پایان یافت.")
در اینجا با یک نکته جدید روبهرو میشویم:
while True:
این حلقه در حالت عادی یک حلقه بینهایت است.
اما ما عمداً با استفاده از break یک مسیر خروج تعریف کردهایم.
وقتی کاربر ۰ وارد کند:
if number == ۰:
break
حلقه متوقف میشود.
این الگو در برنامههای واقعی بسیار کاربردی است.
⏭️ دستور continue در پایتون
گاهی نمیخواهیم کل حلقه را متوقف کنیم؛ فقط میخواهیم یک تکرار خاص را رد کنیم و به تکرار بعدی برویم.
برای این کار از continue استفاده میکنیم.
مثال:
number = ۰
while number < ۵:
number += ۱
if number == ۳:
continue
print(number)
خروجی:
۱
۲
۴
۵
وقتی number برابر ۳ میشود:
continue
اجرا میشود.
در نتیجه print(number) برای آن تکرار اجرا نمیشود و حلقه به مرحله بعد میرود.
پس:
continueیعنی «این تکرار را رد کن و برو سراغ تکرار بعدی».
🆚 تفاوت break و continue
این دو دستور را با هم اشتباه نگیرید.
break
کل حلقه را متوقف میکند:
حلقه
↓
break
↓
خروج کامل
continue
فقط تکرار فعلی را رد میکند:
حلقه
↓
continue
↓
تکرار بعدی
یک راه ساده برای به خاطر سپردن:
🛑
break= پایان حلقه
⏭️continue= رد کردن این دور
⚠️ نکته مهم هنگام استفاده از continue
هنگام استفاده از continue در حلقه while باید مراقب باشید که متغیر کنترل حلقه در مسیر مناسب تغییر کند.
مثلاً این کد میتواند مشکلساز شود:
number = ۱
while number <= ۵:
if number == ۳:
continue
print(number)
number += ۱
وقتی number به ۳ برسد، continue اجرا میشود و برنامه به ابتدای حلقه برمیگردد.
اما مقدار number دیگر افزایش پیدا نمیکند.
در نتیجه حلقه در مقدار ۳ گیر میکند.
راه بهتر:
number = ۱
while number <= ۵:
if number == ۳:
number += ۱
continue
print(number)
number += ۱
البته در چنین مثال سادهای میتوان کد را به شکل دیگری نیز نوشت؛ نکته مهم این است که هنگام استفاده از continue همیشه مسیر تغییر متغیر کنترل حلقه را بررسی کنید.
🧩 ترکیب while با شرطها
حالا میتوانیم دانستههای جلسههای قبلی را با حلقه ترکیب کنیم.
مثلاً میخواهیم عددهای ۱ تا ۱۰ را بررسی کنیم و فقط عددهای زوج را چاپ کنیم:
number = ۱
while number <= ۱۰:
if number % ۲ == ۰:
print(number)
number += ۱
خروجی:
۲
۴
۶
۸
۱۰
اینجا چند مفهوم را با هم ترکیب کردهایم:
- متغیر
while- شرط
if - عملگر
% - مقایسه
- افزایش متغیر
این دقیقاً همان نقطهای است که مفاهیم قبلی شروع میکنند به کار کردن در کنار یکدیگر.
🧠 یک مثال جامعتر
فرض کنید میخواهیم برنامهای بنویسیم که از کاربر عدد دریافت کند و:
- اگر عدد منفی بود، پیام خطا نمایش دهد.
- اگر عدد صفر بود، برنامه تمام شود.
- اگر عدد مثبت و زوج بود، پیام مناسبی نمایش دهد.
- اگر عدد مثبت و فرد بود، پیام دیگری نمایش دهد.
while True:
number = int(input("یک عدد وارد کنید: "))
if number == ۰:
print("برنامه پایان یافت.")
break
if number < ۰:
print("عدد باید مثبت باشد.")
continue
if number % ۲ == ۰:
print("عدد مثبت و زوج است.")
else:
print("عدد مثبت و فرد است.")
این مثال بسیار مهم است، چون چند مفهوم را همزمان به کار میگیرد:
while
↓
if
↓
break
↓
continue
↓
عملگر %
↓
else
اگر این برنامه را بهخوبی درک کنید، بخش بزرگی از منطق اولیه برنامهنویسی را پشت سر گذاشتهاید. 🚀
⚠️ خطاهای رایج در حلقه while
۱. فراموش کردن تغییر متغیر
اشتباه:
number = ۱
while number <= ۵:
print(number)
این حلقه پایان ندارد.
راهحل:
number = ۱
while number <= ۵:
print(number)
number += ۱
۲. اشتباه در شرط
مثلاً:
number = ۱
while number >= ۵:
print(number)
number += ۱
از همان ابتدا:
۱ >= ۵ → False
پس حلقه حتی یک بار هم اجرا نمیشود.
۳. اشتباه در تورفتگی
در پایتون تورفتگی بخشی از ساختار برنامه است:
while number <= ۵:
print(number)
❌ نادرست
شکل صحیح:
while number <= ۵:
print(number)
۴. ایجاد ناخواسته حلقه بینهایت
همیشه قبل از اجرای حلقه از خودتان بپرسید:
«چه زمانی شرط
whileقرار استFalseشود؟»
اگر جواب مشخصی ندارید، احتمالاً حلقه شما مشکل دارد.
🧪 تمرینهای جلسه ۱۵
تمرین ۱: شمارش
برنامهای بنویسید که اعداد ۱ تا ۱۰ را با استفاده از while چاپ کند.
تمرین ۲: شمارش معکوس
برنامهای بنویسید که از عدد ۱۰ تا ۱ را چاپ کند و در پایان بنویسد:
شروع!
تمرین ۳: اعداد زوج
با استفاده از while، تمام اعداد زوج بین ۱ تا ۲۰ را چاپ کنید.
تمرین ۴: رمز عبور
برنامهای بنویسید که از کاربر رمز عبور بخواهد و تا زمانی که رمز صحیح وارد نشده، دوباره درخواست رمز کند.
تمرین ۵: استفاده از break
برنامهای بنویسید که از کاربر عدد دریافت کند و وقتی کاربر ۰ وارد کرد، برنامه متوقف شود.
🚀 چالش جلسه
برنامهای بنویسید که از کاربر عدد دریافت کند و تا زمانی که ۰ وارد نشده، ادامه پیدا کند.
برنامه باید:
- عدد زوج را تشخیص دهد.
- عدد فرد را تشخیص دهد.
- عدد منفی را نپذیرد.
- با وارد کردن
۰پایان پیدا کند.
سعی کنید در این تمرین از:
while
if
elif
else
break
continue
استفاده کنید.
📚 جمعبندی جلسه ۱۵
در این جلسه با یکی از مهمترین مفاهیم برنامهنویسی یعنی حلقهها آشنا شدیم.
یاد گرفتیم:
| مفهوم | کاربرد |
|---|---|
while |
اجرای تکراری کد تا زمانی که شرط درست باشد |
break |
خروج کامل از حلقه |
continue |
رد کردن تکرار فعلی و رفتن به تکرار بعدی |
| حلقه بینهایت | حلقهای که مسیر مشخصی برای پایان ندارد |
| شرط حلقه | مشخص میکند حلقه چه زمانی ادامه پیدا کند |
| متغیر کنترل | متغیری که تغییر آن معمولاً باعث پایان حلقه میشود |
مهمترین نکته این جلسه:
یک حلقه
whileباید مسیر مشخصی برای رسیدن به شرطFalseداشته باشد؛ در غیر این صورت ممکن است با یک حلقه بینهایت روبهرو شویم.
🔜 پیشنمایش جلسه ۱۶: حلقه for در پایتون
تا اینجا یاد گرفتیم با while یک عملیات را تا زمانی که شرطی برقرار است، تکرار کنیم.
اما یک سؤال مهم باقی میماند:
اگر بخواهیم روی مجموعهای از دادهها حرکت کنیم، چه کار کنیم؟
مثلاً:
نامهای یک لیست
اعداد یک مجموعه
حروف یک کلمه
آیتمهای یک داده
اینجاست که حلقه for وارد میشود.
در جلسه بعد یاد میگیریم:
forچیست؟- چگونه روی یک لیست حرکت کنیم؟
range()چگونه کار میکند؟- تفاوت
forوwhileچیست؟ - چگونه از
breakوcontinueدرforاستفاده کنیم؟
پس از جلسه بعد، ابزار بسیار قدرتمندتری برای تکرار روی دادهها در اختیار خواهیم داشت. 🚀
📚 جلسه ۱۶: حلقه for و پیمایش دادهها در پایتون
تحقیق و تدوین مهدی گمرکی
