Table of Contents
مقدمهٔ کلی حلقهها
در برنامهنویسی خیلی وقتها لازم است یک کار تکراری را چند بار انجام دهیم.
مثلاً:
- چاپ کردن اعداد ۱ تا ۱۰۰
- پرسیدن نام چند دانشآموز و ذخیرهکردن آنها
- جمعزدن لیستی از قیمتها
اگر این کارها را بدون حلقه انجام دهیم، باید دهها یا صدها خط کد تکراری بنویسیم.
«حلقه» (loop) ابزاری است که به ما اجازه میدهد یک بخش از کد را چندین بار اجرا کنیم، بدون اینکه آن را تکراری بنویسیم.
در این فصل، به صورت کلی با انواع حلقهها در پایتون، منطق آنها و کاربردشان آشنا میشوید. جزئیات هر نوع حلقه در زیرفصلهای بعدی میآید، اینجا بیشتر دید کلی و مفهومی میگیریم.
ایدهٔ اصلی حلقهها
حلقهها را میتوانید مثل این مراحل تصور کنید:
- بررسی یک «شرط» (آیا باید ادامه بدهم؟)
- اگر پاسخ «بله» بود → اجرای بدنهٔ حلقه
- برگشت به مرحلهٔ ۱ و دوباره بررسی شرط
- وقتی پاسخ «خیر» شد → خروج از حلقه و ادامهٔ برنامه
این فرآیند میتواند چند بار یا حتی هزاران بار تکرار شود.
یک شِمای کلی (شبهکد، نه لزوماً دستور واقعی پایتون):
تا وقتی که شرط برقرار است:
این کارها را انجام بدهدو نوع اصلی حلقه در پایتون
در پایتون دو نوع حلقهٔ پرکاربرد برای مبتدیان وجود دارد:
whilefor
هر دو برای تکرار استفاده میشوند، اما منطق استفاده از آنها کمی متفاوت است.
حلقههایی که بر اساس «شرط» میچرخند
حلقهٔ while بر مبنای یک شرط کار میکند:
- تا وقتی شرط
Trueباشد، بدنهٔ حلقه اجرا میشود. - وقتی شرط
Falseشد، حلقه متوقف میشود.
این نوع حلقه برای زمانی مناسب است که:
- از قبل نمیدانید چند بار باید تکرار انجام شود.
- تکرار بستگی به ورودی کاربر، وضعیت برنامه، یا یک تغییر تدریجی دارد.
مثال ساده (فقط برای ایده، توضیح کامل در زیرفصل مربوطه میآید):
n = 1
while n <= 5:
print(n)
n = n + 1
در اینجا شرط n <= 5 تعیین میکند که حلقه کی ادامه دهد و کی تمام شود.
حلقههایی که روی «مجموعهای از چیزها» میچرخند
حلقهٔ for معمولاً روی «تکرار روی یک دنباله» استفاده میشود؛
مثلاً:
- روی حروف یک رشته
- روی عناصر یک لیست
- روی اعداد یک بازه
این نوع حلقه بیشتر زمانی استفاده میشود که:
- دقیقاً میدانید روی چه چیزهایی میخواهید بگردید (مثلاً روی ۱۰ عدد، روی ۳ نام، روی همهٔ عناصر یک لیست).
- تعداد تکرارها قابل محاسبه است.
مثال بسیار ساده:
for name in ["Ali", "Sara", "Reza"]:
print(name)
در هر بار چرخش حلقه، متغیر name یکی از عناصر لیست را میگیرد.
کجا از حلقه استفاده کنیم؟
هر وقت یکی از این وضعیتها را دیدید، احتمالاً حلقه لازم دارید:
- «همین کار را چند بار انجام بده»
- «تا وقتی فلان شرط برقرار است، ادامه بده»
- «برای هر مورد در این لیست، این کار را انجام بده»
- «تا وقتی کاربر عدد درست وارد نکرده، دوباره بپرس»
چند مثال کاربردی:
- چاپ جدول ضرب ۱ تا ۱۰
- محاسبهٔ مجموع نمرههای دانشآموزان تا وقتی نمرهٔ ۰ وارد شود
- نمایش منوی برنامه تا وقتی کاربر گزینهٔ خروج را انتخاب کند
- خواندن همهٔ خطهای یک فایل (در فصل فایلها کامل میآید)
مفاهیم رایج در کار با حلقهها
در کاربرد حلقهها چند ایدهٔ مهم تکراری ظاهر میشود که در زیرفصلها بیشتر با آنها کار میکنید:
متغیر شمارنده
گاهی لازم است تعداد دفعات اجرای حلقه را بشماریم. در این حالت معمولاً از یک متغیر شمارنده استفاده میکنیم، مثل i، n، یا count.
شِمای کلی:
count = 0
while count < 3:
print("سلام")
count = count + 1
اینجا count همان متغیر شمارنده است.
حلقهٔ محدود در برابر نامحدود
- حلقهٔ «محدود» حلقهای است که از قبل مشخص است چند بار اجرا میشود (مثلاً ۱۰ بار).
- حلقهٔ «نامحدود» حلقهای است که تا وقتی یک شرط خاص رخ نداده، ادامه دارد (مثلاً تا وقتی کاربر گزینهٔ «خروج» را انتخاب نکرده).
مثال مفهومی یک حلقهٔ نامحدود:
while True:
command = input("یک دستور وارد کنید (exit برای خروج): ")
if command == "exit":
break
اینجا حلقه از نظر تئوری بینهایت است، اما با دستور break (که در زیرفصل مربوطه توضیح میدهیم) متوقف میشود.
کنترل جریان داخل حلقه
گاهی داخل حلقه تصمیم میگیریم:
- بخشی از بدنه را برای یک دور خاص «نادیده بگیریم» و برویم به دور بعدی → با
continue - کاملاً از حلقه «بیرون بپریم» → با
break
این دو دستور کمک میکنند رفتار حلقه را دقیقتر کنترل کنیم.
در زیرفصل break و continue با جزئیات و مثالهای مختلف با آنها کار میکنید.
حلقهها و خطاهای رایج
بهعنوان مقدمات، چند خطای رایج هنگام کار با حلقهها را بشناسید (جزئیات فنیتر در زیرفصل مخصوص خطاها و تمرینهای حلقه خواهد آمد):
- حلقهٔ بیپایان (Infinite Loop)
وقتی شرط حلقه هیچوقتFalseنمیشود و حلقه تا ابد ادامه مییابد. - معمولاً به این خاطر رخ میدهد که متغیری که در شرط استفاده شده، داخل حلقه بهدرستی تغییر نمیکند.
- تغییر اشتباه شمارنده
مثلاً دو بار افزایشدادن یا اصلاً افزایشندادن آن، که میتواند باعث اجرای کمتر یا بیشتر از حد انتظار شود. - دسترسی به متغیر خارج از محدودهٔ حلقه
گاهی انتظار داریم متغیری داخل حلقه تعریف شده، بیرون حلقه هم قابل استفاده باشد، اما مقدارش آن چیزی نیست که انتظار داریم (یا اصلاً تعریف نشده باشد).
در این فصل بهصورت مقدماتی، و در فصل توابع مفصلتر دربارهٔ محدودهٔ متغیرها صحبت میشود.
مقایسهٔ کلی while و for
خلاصهٔ ذهنی برای انتخاب نوع حلقه:
- اگر ذهن شما روی این جمله است:
«تا وقتی ...» → احتمالاًwhile - اگر ذهن شما روی این جمله است:
«برای هر مورد در ...» یا «از ۱ تا ۱۰» → احتمالاًfor
مثالها و تمرینهای عملی برای هر دو نوع در زیرفصلهای بعدی خواهد آمد؛ در آنجا یاد میگیرید کِی کدام را انتخاب کنید.
ساختن عادت فکری تکرار با حلقهها
برای اینکه در استفاده از حلقهها راحت شوید، در طول این فصل تمرینهایی میبینید که کمک میکند:
- مسائل روزمره را به «تکرار» و «شرط» تبدیل کنید.
- از حلقهها در برنامههای تعاملی (با ورودی کاربر) استفاده کنید.
- با
breakوcontinueرفتار حلقه را بهتر کنترل کنید. - با نوشتن چند برنامهٔ کوچک، بهصورت عملی از حلقهها استفاده کنید.
بعد از این فصل، تقریباً هر مسئلهٔ سادهای که نیاز به تکرار دارد را میتوانید با پایتون حل کنید و این یک قدم بسیار مهم در برنامهنویسی است.