Kahibaro
Discord Login Register

حلقه‌های while

آشنایی عمیق‌تر با حلقهٔ `while`

در این بخش با جزئیات عملی حلقهٔ while در پایتون کار می‌کنیم و می‌بینیم چطور می‌توانیم تکرار را بر اساس یک «شرط» کنترل کنیم.

ساختار کلی حلقهٔ `while`

ساختار کلی حلقهٔ while به این شکل است:

while شرط:
    دستور_۱
    دستور_۲
    ...

معنی آن:

مثال ساده:

count = 1
while count <= 5:
    print("عدد:", count)
    count = count + 1
print("پایان حلقه")

خروجی:

عدد: 1
عدد: 2
عدد: 3
عدد: 4
عدد: 5
پایان حلقه

نکات مهم:

نقش «شرط» در حلقهٔ `while`

حلقهٔ while کاملاً به شرط وابسته است. این شرط می‌تواند از:

ساخته شود.

مثال: تکرار تا وقتی کاربر عدد مثبت وارد کند:

number = int(input("یک عدد (مثبت برای ادامه، صفر یا منفی برای خروج): "))
while number > 0:
    print("شما عدد مثبت وارد کردید:", number)
    number = int(input("یک عدد دیگر: "))
print("برنامه تمام شد.")

در این‌جا:

حلقهٔ `while` و شمارنده (counter)

الگوی بسیار رایج در استفاده از while، داشتن یک «شمارنده» است که تعداد دفعات تکرار را کنترل می‌کند.

مثال: چاپ ۱۰ بار یک پیام

i = 0          # مقدار شروع
while i < 10:  # تا وقتی i کمتر از ۱۰ است
    print("سلام", i)
    i = i + 1  # افزایش شمارنده
print("حلقه تمام شد.")

این الگو را زیاد خواهید دید:

i = مقدار_شروع
while شرط_مربوط_به_i:
    ...
    i = i + 1

می‌توانید با i = i - 1 از بالا به پایین هم بشمارید:

i = 5
while i > 0:
    print(i)
    i = i - 1
print("تمام")

حلقهٔ `while` و ورودی کاربر (Loop تا زمان خواستهٔ کاربر)

یک کاربرد مهم while این است که برنامه را «تعاملی» کند؛ یعنی تا وقتی کاربر بخواهد، برنامه ادامه دهد.

مثال: منوی ساده

choice = ""
while choice != "3":
    print("منو:")
    print("1. سلام کردن")
    print("2. جمع دو عدد")
    print("3. خروج")
    choice = input("گزینه را انتخاب کنید: ")
    if choice == "1":
        print("سلام کاربر عزیز!")
    elif choice == "2":
        a = int(input("عدد اول: "))
        b = int(input("عدد دوم: "))
        print("جمع:", a + b)
    elif choice == "3":
        print("در حال خروج...")
    else:
        print("گزینه نامعتبر!")
print("برنامه بسته شد.")

در این برنامه:

حلقه‌های `while` بی‌نهایت و کنترل دستی خروج

گاهی می‌خواهیم حلقه «از نظر تئوری» بی‌نهایت باشد و خودمان با break (که در فصل مربوط توضیح داده می‌شود) یا با یک شرط داخلی آن را قطع کنیم. این الگو را خیلی می‌بینید:

while True:
    command = input("دستور را وارد کنید (exit برای خروج): ")
    if command == "exit":
        print("خروج از برنامه")
        break
    print("شما نوشتید:", command)

در این‌جا:

(جزئیات break و continue در بخش مخصوص خودشان بررسی می‌شود.)

حلقهٔ `while` با شرط‌های ترکیبی

می‌توانید شرط‌های پیچیده‌تری بسازید؛ مثلاً هم حواستان به تعداد دفعات تکرار باشد، هم به ورودی کاربر.

مثال: حداکثر ۳ بار فرصت ورود رمز:

correct_password = "python123"
tries = 0
max_tries = 3
password = input("رمز عبور را وارد کنید: ")
while password != correct_password and tries < max_tries - 1:
    print("رمز اشتباه است. دوباره تلاش کنید.")
    tries = tries + 1
    password = input("رمز عبور را وارد کنید: ")
if password == correct_password:
    print("ورود موفق!")
else:
    print("تعداد تلاش‌ها تمام شد. دسترسی مسدود شد.")

در این مثال:

حلقهٔ `while` و تغییر حالت (state)

بعضی وقت‌ها از while برای شبیه‌سازی یک وضعیت (state) در برنامه استفاده می‌کنیم. یعنی متغیرهایی داریم که وضعیت فعلی را نشان می‌دهند و تا وقتی وضعیت به حالت خاصی نرسد، برنامه ادامه می‌دهد.

مثال: شمارش پس‌انداز تا رسیدن به هدف

فرض کنید هر ماه مقدار ثابتی پول ذخیره می‌کنید و می‌خواهید بدانید چند ماه طول می‌کشد تا به هدف برسید.

target = 1000000    # هدف: یک میلیون
balance = 0         # موجودی فعلی
monthly_save = 120000
months = 0
while balance < target:
    balance = balance + monthly_save
    months = months + 1
    print("ماه", months, "- موجودی:", balance)
print("در", months, "ماه به هدف رسیدید.")

اینجا:

خطای رایج: حلقهٔ بی‌نهایت ناخواسته

یکی از اشتباهات متداول در استفاده از while، درست نکردن شرط به‌درستی است؛ طوری که حلقه هیچ‌وقت تمام نشود.

مثال بد:

x = 0
while x < 5:
    print(x)
    # x را تغییر نمی‌دهیم!

در این کد:

راه‌حل

۱. همیشه بررسی کنید که:

۲. اگر از کاربران ورودی می‌گیرید، مطمئن شوید در هر تکرار که لازم است، ورودی جدید می‌گیرید؛ وگرنه شرط بر همان مقدار قبلی «گیر می‌کند».

مثال اصلاح‌شده:

x = 0
while x < 5:
    print(x)
    x = x + 1

حلقه‌های `while` تو در تو (مقدماتی)

ممکن است یک حلقهٔ while را درون حلقهٔ while دیگر قرار دهید. این کار زمانی مفید است که با ساختارهای تکراری دوبخشی سر و کار دارید (مثلاً سطر و ستون).

مثال بسیار ساده:

row = 1
while row <= 3:
    col = 1
    while col <= 4:
        print("row:", row, "col:", col)
        col = col + 1
    row = row + 1

خروجی:

row: 1 col: 1
row: 1 col: 2
row: 1 col: 3
row: 1 col: 4
row: 2 col: 1
...
row: 3 col: 4

نکته‌ها:

چند تمرین پیشنهادی با حلقهٔ `while`

برای تثبیت یادگیری، چند ایدهٔ تمرینی:

  1. برنامه‌ای بنویسید که:
    • از کاربر عدد بگیرد،
    • تا وقتی عدد مثبت است، مجموع آن‌ها را ذخیره کند،
    • به محض اینکه عدد صفر یا منفی وارد شد، مجموع اعداد مثبت را چاپ کند.
  2. جدول ضرب یک عدد را با while چاپ کنید. مثلاً اگر کاربر 6 را وارد کرد، خروجی چیزی مثل این باشد:
   6 x 1 = 6
   6 x 2 = 12
   ...
   6 x 10 = 60
  1. برنامه‌ای شبیه حدس عدد بسازید:
    • یک عدد ثابت در نظر بگیرید (مثلاً 23).
    • از کاربر بخواهید عددی حدس بزند.
    • تا وقتی حدس کاربر اشتباه است، پیام مناسب چاپ کنید (بگوید بزرگ‌تر حدس بزند یا کوچک‌تر) و دوباره حدس بگیرد.
    • وقتی درست حدس زد، تعداد تلاش‌ها را اعلام کنید.

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

Views: 5

Comments

Please login to add a comment.

Don't have an account? Register now!