حلقه while در پایتون؛ آموزش تکرار شرطی برای مبتدیان

🗓 آخرین بهروزرسانی:
حلقه while یکی از ابزارهای اصلی پایتون برای تکرار دستورها تا زمانی است که یک شرط برقرار باشد. این حلقه زمانی کاربرد دارد که از قبل نمیدانیم یک کار دقیقاً چند بار باید تکرار شود؛ برای مثال تا وقتی کاربر رمز درست را وارد کند، تا زمانی که موجودی حساب کافی باشد یا تا وقتی کاربر گزینه خروج را انتخاب کند.
این مطلب، درس دهم از دوره رایگان آموزش پایتون از صفر است. در درس قبلی با حلقه for و تابع range() آشنا شدیم. اکنون یاد میگیریم چگونه تکرار را براساس یک شرط کنترل کنیم.
حلقه while در پایتون چیست؟
واژه while به معنای «تا زمانی که» است. پایتون ابتدا شرط حلقه را بررسی میکند. اگر نتیجه شرط True باشد، دستورهای داخل حلقه اجرا میشوند. سپس شرط دوباره بررسی میشود و این روند تا زمانی ادامه پیدا میکند که شرط به False تبدیل شود.
count = 1
while count <= 5:
print(count)
count += 1خروجی:
1
2
3
4
5متغیر count از عدد ۱ شروع میشود. پس از هر بار اجرا یک واحد افزایش پیدا میکند. وقتی مقدار آن به ۶ برسد، شرط count <= 5 نادرست میشود و حلقه پایان مییابد.
ساختار اصلی حلقه while
ساختار عمومی حلقه while به شکل زیر است:
while condition:
# دستورهایی که باید تکرار شونددر این ساختار:
whileآغاز حلقه است.conditionشرط ادامه تکرار است.- علامت دونقطه
:پایان سرآیند حلقه را مشخص میکند. - دستورهای تورفته تا زمانی اجرا میشوند که شرط درست باشد.
سه بخش مهم یک حلقه شمارشی
در بسیاری از حلقههای while سه بخش اصلی وجود دارد:
- تعریف مقدار اولیه
- نوشتن شرط ادامه حلقه
- تغییر مقدار کنترلکننده در هر دور
number = 1 # مقدار اولیه
while number <= 3: # شرط ادامه
print(number)
number += 1 # تغییر مقدارحذف یا اشتباهنوشتن هرکدام از این بخشها ممکن است باعث اجرای نادرست یا بیپایان حلقه شود.
اهمیت تورفتگی در حلقه while
پایتون با استفاده از تورفتگی مشخص میکند کدام دستورها داخل حلقه قرار دارند:
count = 1
while count <= 3:
print("داخل حلقه")
print(count)
count += 1
print("حلقه تمام شد")سه دستور تورفته در هر دور اجرا میشوند؛ اما پیام آخر فقط پس از پایان حلقه نمایش داده میشود.
نسخه زیر نادرست است:
count = 1
while count <= 3:
print(count) # نادرستاین کد با خطای IndentationError روبهرو میشود.
شمارش صعودی با while
number = 1
while number <= 10:
print(number)
number += 1در هر دور، مقدار متغیر number یک واحد افزایش پیدا میکند. میتوان اندازه افزایش را تغییر داد:
number = 2
while number <= 10:
print(number)
number += 2خروجی:
2
4
6
8
10شمارش معکوس با while
برای شمارش معکوس، مقدار کنترلکننده را در هر دور کاهش میدهیم:
count = 5
while count > 0:
print(count)
count -= 1
print("شروع!")خروجی:
5
4
3
2
1
شروع!حلقه بینهایت چیست؟
اگر شرط حلقه هیچوقت نادرست نشود، حلقه برای همیشه ادامه پیدا میکند. به این وضعیت infinite loop یا حلقه بینهایت گفته میشود.
count = 1
while count <= 5:
print(count)در این مثال مقدار count تغییر نمیکند؛ بنابراین شرط همیشه درست باقی میماند و عدد ۱ بهطور مداوم چاپ میشود.
نسخه درست:
count = 1
while count <= 5:
print(count)
count += 1اگر هنگام تمرین به حلقه بینهایت رسیدید، معمولاً میتوانید اجرای برنامه را در ترمینال با کلیدهای Ctrl + C متوقف کنید.
حلقه while True
گاهی عمداً یک حلقه نامحدود میسازیم و خروج از آن را با یک شرط داخلی کنترل میکنیم:
while True:
command = input("دستور را وارد کنید یا exit بنویسید: ").strip().lower()
if command == "exit":
break
print("دستور دریافت شد:", command)عبارت while True همیشه درست است؛ اما وقتی کاربر exit وارد کند، دستور break حلقه را متوقف میکند.
دستور break در حلقه while
دستور break حلقه را فوراً پایان میدهد:
number = 1
while number <= 10:
if number == 6:
break
print(number)
number += 1خروجی:
1
2
3
4
5وقتی مقدار number به ۶ میرسد، حلقه پیش از چاپ عدد ۶ متوقف میشود.
دستور continue در حلقه while
دستور continue ادامه همان دور را نادیده میگیرد و اجرای حلقه را از بررسی شرط دور بعدی ادامه میدهد.
number = 0
while number < 5:
number += 1
if number == 3:
continue
print(number)خروجی:
1
2
4
5عدد ۳ چاپ نمیشود، اما حلقه برای عددهای بعدی ادامه پیدا میکند.
نکته مهم درباره continue
در حلقه while باید مراقب باشیم دستور تغییر مقدار پیش از continue انجام شود. نسخه زیر ممکن است حلقه بینهایت بسازد:
number = 1
while number <= 5:
if number == 3:
continue # مقدار number دیگر تغییر نمیکند
print(number)
number += 1وقتی مقدار به ۳ میرسد، برنامه همیشه به ابتدای حلقه برمیگردد و مقدار متغیر همان ۳ باقی میماند.
بخش else در حلقه while
حلقه while میتواند بخش else داشته باشد. این بخش زمانی اجرا میشود که شرط حلقه بهطور طبیعی نادرست شود:
count = 1
while count <= 3:
print(count)
count += 1
else:
print("حلقه بهطور کامل تمام شد")اگر حلقه با break متوقف شود، بخش else اجرا نمیشود:
count = 1
while count <= 5:
if count == 3:
break
print(count)
count += 1
else:
print("این پیام اجرا نمیشود")دریافت ورودی تا زمان واردشدن مقدار معتبر
یکی از کاربردهای مهم while تکرار درخواست ورودی تا زمان دریافت مقدار معتبر است:
while True:
age_text = input("سن خود را وارد کنید: ").strip()
if age_text.isdigit():
age = int(age_text)
break
print("لطفاً سن را فقط بهصورت عدد وارد کنید.")
print("سن ثبت شد:", age)اگر کاربر متن نامعتبر وارد کند، برنامه دوباره سؤال را نمایش میدهد. پس از واردشدن عدد معتبر، حلقه با break پایان مییابد.
اعتبارسنجی بازه عددی
while True:
score = int(input("نمرهای بین صفر تا صد وارد کنید: "))
if 0 <= score <= 100:
break
print("نمره باید بین صفر تا صد باشد.")
print("نمره معتبر:", score)در برنامه حرفهای بهتر است خطای تبدیل متن به عدد نیز با try و except مدیریت شود.
نمونه کامل مدیریت ورودی عددی
while True:
try:
number = int(input("یک عدد صحیح وارد کنید: "))
break
except ValueError:
print("ورودی معتبر نیست. دوباره تلاش کنید.")
print("عدد ثبتشده:", number)اگر ورودی قابل تبدیل به int نباشد، پیام خطا نمایش داده میشود و حلقه ادامه پیدا میکند.
برنامه ورود با تعداد تلاش محدود
correct_password = "python123"
attempts = 0
max_attempts = 3
while attempts < max_attempts:
password = input("رمز عبور را وارد کنید: ")
if password == correct_password:
print("ورود موفق بود.")
break
attempts += 1
remaining = max_attempts - attempts
print("رمز نادرست است. تلاش باقیمانده:", remaining)
else:
print("حساب به دلیل تلاشهای ناموفق موقتاً مسدود شد.")اگر رمز درست وارد شود، حلقه با break پایان مییابد. اگر سه تلاش ناموفق انجام شود، شرط حلقه نادرست شده و بخش else اجرا میشود.
ساخت منوی تعاملی با while
حلقه while برای برنامههایی که باید تا انتخاب گزینه خروج ادامه پیدا کنند بسیار مناسب است:
while True:
print("\n1. نمایش پیام")
print("2. جمع دو عدد")
print("3. خروج")
choice = input("گزینه را انتخاب کنید: ").strip()
if choice == "1":
print("به برنامه پایتون خوش آمدید.")
elif choice == "2":
first = float(input("عدد اول: "))
second = float(input("عدد دوم: "))
print("حاصل جمع:", first + second)
elif choice == "3":
print("خروج از برنامه")
break
else:
print("گزینه نامعتبر است.")منو پس از انجام هر عملیات دوباره نمایش داده میشود و فقط با انتخاب گزینه ۳ پایان مییابد.
محاسبه مجموع عددها تا ورود صفر
total = 0
while True:
number = float(input("عدد وارد کنید؛ برای پایان صفر بزنید: "))
if number == 0:
break
total += number
print("مجموع عددها:", total)در این مثال، صفر یک مقدار پایانی یا sentinel value است که پایان دریافت دادهها را مشخص میکند.
محاسبه تعداد و میانگین ورودیها
total = 0
count = 0
while True:
number = float(input("عدد وارد کنید؛ برای پایان صفر بزنید: "))
if number == 0:
break
total += number
count += 1
if count > 0:
average = total / count
print("تعداد:", count)
print("مجموع:", total)
print("میانگین:", average)
else:
print("هیچ عددی وارد نشد.")بررسی count > 0 از تقسیم بر صفر جلوگیری میکند.
حلقههای while تو در تو
میتوان یک حلقه while را داخل حلقه دیگری قرار داد:
row = 1
while row <= 3:
column = 1
while column <= 3:
print(f"سطر {row}، ستون {column}")
column += 1
row += 1حلقه داخلی برای هر دور حلقه بیرونی بهطور کامل اجرا میشود. در استفاده از حلقههای تو در تو باید مقدارهای کنترلکننده هر حلقه را جداگانه مدیریت کرد.
ساخت الگوی ستاره با while
row = 1
while row <= 5:
print("*" * row)
row += 1خروجی:
*
**
***
****
*****تفاوت حلقه for و while
| حلقه for | حلقه while |
|---|---|
| مناسب پیمایش یک مجموعه یا محدوده مشخص | مناسب تکرار براساس یک شرط |
| تعداد تکرار اغلب از قبل مشخص است | تعداد تکرار ممکن است نامشخص باشد |
| متغیر حلقه بهصورت خودکار مقدار بعدی میگیرد | تغییر متغیر کنترلکننده معمولاً بر عهده برنامهنویس است |
| احتمال حلقه بینهایت کمتر است | در صورت مدیریت نادرست شرط، حلقه بینهایت ایجاد میشود |
برای نمایش عددهای ۱ تا ۱۰ معمولاً for انتخاب سادهتری است. برای درخواست رمز تا زمان دریافت پاسخ درست، while مناسبتر است.
خطاهای رایج در حلقه while
۱. فراموشکردن تغییر متغیر کنترلکننده
count = 1
while count <= 5:
print(count)این کد حلقه بینهایت ایجاد میکند. باید مقدار count در هر دور تغییر کند.
۲. استفاده از شرط اشتباه
count = 1
while count >= 5:
print(count)
count += 1شرط از همان ابتدا نادرست است؛ بنابراین حلقه حتی یک بار هم اجرا نمیشود.
۳. قراردادن تغییر مقدار در جای نادرست
اگر افزایش یا کاهش متغیر فقط داخل بعضی شاخههای شرط انجام شود، ممکن است در یک حالت خاص حلقه متوقف نشود.
۴. استفاده نادرست از continue
اگر continue پیش از تغییر متغیر اجرا شود، کنترل حلقه ممکن است روی یک مقدار ثابت بماند.
۵. فراموشکردن دونقطه یا تورفتگی
while count <= 5 # دونقطه فراموش شده
print(count)این اشتباه باعث خطای SyntaxError میشود.
۶. تبدیلنکردن ورودی عددی
number = input("عدد: ")
while number < 10:
print(number)خروجی input() رشته است و نمیتوان آن را مستقیماً با عدد مقایسه کرد. باید از int() یا float() استفاده شود.
پروژه عملی: بازی حدس عدد
در این پروژه، برنامه یک عدد ثابت دارد و کاربر تا زمان حدس درست میتواند تلاش کند:
secret_number = 7
attempts = 0
while True:
guess = int(input("یک عدد بین 1 تا 10 حدس بزنید: "))
attempts += 1
if guess == secret_number:
print("آفرین! عدد را درست حدس زدید.")
print("تعداد تلاشها:", attempts)
break
elif guess < secret_number:
print("عدد موردنظر بزرگتر است.")
else:
print("عدد موردنظر کوچکتر است.")این پروژه مفاهیم while، break، ورودی کاربر، شمارنده و شرطهای چندشاخه را ترکیب میکند.
پروژه عملی: دستگاه خودپرداز ساده
balance = 1_000_000
while True:
print("\n1. نمایش موجودی")
print("2. برداشت وجه")
print("3. واریز وجه")
print("4. خروج")
choice = input("انتخاب شما: ").strip()
if choice == "1":
print("موجودی:", balance)
elif choice == "2":
amount = int(input("مبلغ برداشت: "))
if amount <= 0:
print("مبلغ باید بیشتر از صفر باشد.")
elif amount > balance:
print("موجودی کافی نیست.")
else:
balance -= amount
print("برداشت انجام شد. موجودی جدید:", balance)
elif choice == "3":
amount = int(input("مبلغ واریز: "))
if amount > 0:
balance += amount
print("واریز انجام شد. موجودی جدید:", balance)
else:
print("مبلغ نامعتبر است.")
elif choice == "4":
print("خدانگهدار")
break
else:
print("گزینه نامعتبر است.")تمرینهای درس حلقه while
- با استفاده از
whileعددهای ۱ تا ۲۰ را نمایش دهید. - عددهای زوج بین ۲ تا ۳۰ را چاپ کنید.
- از عدد ۱۰ تا ۱ شمارش معکوس انجام دهید.
- یک عدد از کاربر بگیرید و مجموع عددهای ۱ تا آن عدد را محاسبه کنید.
- تا زمانی که کاربر عبارت
stopرا وارد نکرده است، متنهای او را نمایش دهید. - رمزی ثابت تعریف کنید و تا دریافت رمز درست، ورودی را تکرار کنید.
- برنامهای بسازید که فقط عددی بین ۱ تا ۵ را قبول کند.
- مجموع عددهای واردشده را تا زمان ورود عدد صفر محاسبه کنید.
- بازی حدس عدد را با حداکثر پنج تلاش پیادهسازی کنید.
📌 همچنین بخوانید: بازار کار پایتون در ایران، نصب و تنظیم پایتون در VS Code و برنامهنویسی پایتون با گوشی
پرسشهای متداول
حلقه while چه زمانی استفاده میشود؟
زمانی که تکرار باید تا برقرار بودن یک شرط ادامه پیدا کند و تعداد دقیق دفعات از قبل مشخص نیست.
چرا حلقه while من متوقف نمیشود؟
احتمالاً شرط همیشه درست باقی مانده یا متغیر کنترلکننده داخل حلقه تغییر نمیکند.
تفاوت break و continue چیست؟
break کل حلقه را پایان میدهد، اما continue فقط ادامه دور فعلی را نادیده میگیرد و به دور بعد میرود.
آیا while True اشتباه است؟
خیر. این ساختار برای منوها و برنامههای تعاملی رایج است، به شرط آنکه مسیر مشخصی مانند break برای خروج وجود داشته باشد.
آیا حلقه while بخش else دارد؟
بله. بخش else زمانی اجرا میشود که حلقه بدون اجرای break و به دلیل نادرستشدن شرط پایان یابد.
جمعبندی درس
در این درس آموختیم حلقه while تا زمانی اجرا میشود که شرط آن درست باشد. با شمارندهها، حلقه بینهایت، while True، دستورهای break و continue، بخش else، اعتبارسنجی ورودی، منوی تعاملی و حلقههای تو در تو آشنا شدیم. مهمترین اصل در کار با while این است که همیشه مشخص کنیم شرط حلقه چگونه و در چه زمانی نادرست خواهد شد.
درس قبلی: حلقه for در پایتون
درس بعدی: لیستها در پایتون؛ ساخت، دسترسی و تغییر عناصر
مشاهده فهرست کامل دوره آموزش پایتون از صفر
ادامه مسیر یادگیری پایتون
برای یادگیری منظم، آموزشهای مرتبط زیر را بهترتیب دنبال کنید:
برای ذخیره پیشرفت در همه دستگاهها و دریافت گواهی پایان مسیر، رایگان ثبتنام کن یا وارد شو.