حلقه‌های تکرار در پایتون (Python Loops)

فرض کنید معلم می‌خواهد نمرات ۳۰ دانش‌آموز را از کاربر دریافت کند. اگر حلقه نداشته باشیم، باید دستور input() را ۳۰ بار بنویسیم:

score1 = float(input("نمره دانش‌آموز ۱: "))
score2 = float(input("نمره دانش‌آموز ۲: "))
score3 = float(input("نمره دانش‌آموز ۳: "))
...
score30 = float(input("نمره دانش‌آموز ۳۰: "))

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

فهرست مطالب

حلقه for

در پایتون برای تکرار یک عملیات معمولاً از حلقه for استفاده می‌کنیم. ساختار کلی آن به شکل زیر است:

for variable in sequence:
    دستورها
  • for آغاز حلقه را مشخص می‌کند.
  • variable در هر بار اجرای حلقه یک مقدار جدید دریافت می‌کند.
  • sequence مجموعه‌ای از مقادیر است که حلقه روی آن حرکت می‌کند.
  • تمام دستورهایی که با تورفتگی (Indentation) نوشته شوند، داخل حلقه قرار دارند.

اولین مثال

for i in range(5):
    print("Hello")

خروجی

Hello
Hello
Hello
Hello
Hello

در این مثال، دستور print() پنج بار اجرا می‌شود.

مثال دوم

for i in range(5):
    print(i)

خروجی

0
1
2
3
4

همان‌طور که می‌بینید، مقدار i در هر بار اجرای حلقه تغییر می‌کند. در اولین دور برابر ۰ است، سپس ۱، بعد ۲ و …

نام i فقط یک نام قراردادی است و می‌توان هر نام دیگری انتخاب کرد. مثلاً:

for number in range(5):
    print(number)

یا

for x in range(5):
    print(x)

همه این کدها دقیقاً یک کار انجام می‌دهند.

تابع range()

تابع range() یکی از پرکاربردترین توابع در حلقه‌هاست. این تابع مجموعه‌ای از اعداد پشت سر هم تولید می‌کند. مثلاً:

range(5)

اعداد زیر را تولید می‌کند:

0
1
2
3
4

دقت کنید که عدد ۵ تولید نمی‌شود. یعنی همیشه از صفر شروع می‌شود و تا یک عدد قبل از مقدار نوشته شده ادامه پیدا می‌کند.

مثال

for i in range(8):
    print(i)

خروجی:

0
1
2
3
4
5
6
7

مثال کاربردی

چاپ اعداد ۱ تا ۵:

for i in range(1, 6):
    print(i)

خروجی:

1
2
3
4
5

در اینجا range(1, 6) یعنی: از عدد ۱ شروع کن و تا قبل از ۶ ادامه بده.

مثال دیگر

for i in range(3):
    print("Python")

خروجی:

Python
Python
Python
نکته مهم

هر بار که حلقه اجرا می‌شود، به آن یک دور (Iteration) گفته می‌شود. اگر range(5) را استفاده کنیم، حلقه ۵ دور اجرا خواهد شد.

تابع range() با سه پارامتر

تا اینجا از range() فقط با یک عدد استفاده کردیم:

range(5)

اما تابع range() می‌تواند سه پارامتر نیز دریافت کند:

range(start, stop, step)

که هر کدام معنی خاصی دارند:

  • start : عدد شروع
  • stop : عدد پایان (خود این عدد تولید نمی‌شود.)
  • step : میزان افزایش یا کاهش در هر مرحله

پارامتر اول (Start)

اگر عدد شروع را مشخص کنیم، حلقه از همان عدد آغاز می‌شود.

for i in range(3, 8):
    print(i)

خروجی

3
4
5
6
7

در این مثال: شروع از ۳ و پایان قبل از ۸

پارامتر سوم (Step)

پارامتر سوم مشخص می‌کند که هر بار چند واحد جلو برویم. مثلاً اگر بخواهیم فقط اعداد زوج را چاپ کنیم:

for i in range(2, 11, 2):
    print(i)

خروجی

2
4
6
8
10

هر بار مقدار i دو واحد افزایش پیدا می‌کند.

مثال دیگر

for i in range(0, 21, 5):
    print(i)

خروجی

0
5
10
15
20

در این مثال حلقه هر بار ۵ واحد جلو می‌رود.

شمارش معکوس

اگر مقدار step را منفی قرار دهیم، حلقه برعکس حرکت می‌کند.

for i in range(5, 0, -1):
    print(i)

خروجی

5
4
3
2
1

در اینجا از ۵ شروع می‌کنیم و هر بار یک واحد کم می‌کنیم. قبل از رسیدن به صفر حلقه متوقف می‌شود.

شمارش معکوس از ۱۰ تا صفر

for i in range(10, -1, -1):
    print(i)

خروجی

10
9
8
7
6
5
4
3
2
1
0

دقت کنید که چون عدد پایان -1 نوشته شده است، مقدار 0 نیز چاپ می‌شود.

چاپ مضرب‌های ۳

for i in range(3, 31, 3):
    print(i)

چاپ اعداد فرد

for i in range(1, 20, 2):
    print(i)
چاپ اعداد زوج
for i in range(2, 21, 2):
    print(i)

حلقه‌های تو در تو (Nested Loops)

گاهی لازم است یک حلقه را داخل حلقه‌ی دیگری قرار دهیم. به این نوع حلقه‌ها حلقه‌های تو در تو (Nested Loops) گفته می‌شود. در این حالت، به ازای هر بار اجرای حلقه‌ی بیرونی، حلقه‌ی داخلی به طور کامل اجرا می‌شود. ساختار کلی آن به شکل زیر است:

for i in range(...):
    for j in range(...):
        دستورها

حلقه‌ی بیرونی تعداد دفعات تکرار اصلی را مشخص می‌کند. و حلقه‌ی داخلی در هر بار اجرای حلقه‌ی بیرونی، از ابتدا اجرا می‌شود.

مثال اول

for i in range(3):
    for j in range(2):
        print(i, j)

خروجی

0 0
0 1
1 0
1 1
2 0
2 1

در این مثال: مقدار i ابتدا صفر است. حلقه‌ی داخلی دو بار اجرا می‌شود و j به ترتیب ۰ و ۱ خواهد بود. سپس i برابر ۱ می‌شود و دوباره حلقه‌ی داخلی از ابتدا اجرا می‌شود. این روند تا پایان ادامه پیدا می‌کند.

 

همان‌طور که مشاهده می‌کنید، هر بار که مقدار i تغییر می‌کند، مقدار j دوباره از ابتدا شروع می‌شود.

رسم مربع با ستاره

با حلقه‌های تو در تو میتوان شکل‌های مختلف رسم کرد.

for i in range(5):
    for j in range(5):
        print("*", end="")
    print()

خروجی

*****
*****
*****
*****
*****

حلقه‌ی داخلی در هر سطر، پنج ستاره چاپ می‌کند.

print("*", end="")

پارامتر end="" باعث می‌شود پس از چاپ هر ستاره، مکان‌نما به خط بعد نرود. بعد از پایان حلقه‌ی داخلی، دستور زیر اجرا می‌شود:

print()

که باعث می‌شود چاپ از سطر بعدی ادامه پیدا کند.

رسم مستطیل

for i in range(3):
    for j in range(8):
        print("*", end="")
    print()

خروجی

********
********
********
نکته مهم

در حلقه‌های تو در تو، تعداد کل دفعات اجرای حلقه‌ی داخلی برابر است با حاصل‌ضرب تعداد تکرار دو حلقه. مثلاً در کد زیر:

for i in range(5):
    for j in range(4):
        print("*")

حلقه‌ی بیرونی ۵ بار اجرا می‌شود. حلقه‌ی داخلی در هر بار، ۴ مرتبه اجرا می‌شود. بنابراین دستور print("*") در مجموع ۲۰ بار اجرا خواهد شد.

حلقه while در پایتون

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

ساختار کلی

while شرط:
    دستورها

ابتدا شرط بررسی می‌شود. اگر شرط True باشد، دستورات داخل حلقه اجرا می‌شوند. سپس دوباره شرط بررسی می‌شود. این روند تا زمانی ادامه پیدا می‌کند که شرط False شود.

اولین مثال

i = 1
while i <= 5:
    print(i)
    i += 1

خروجی

1
2
3
4
5

این برنامه چگونه اجرا می‌شود؟

ابتدا:

i = 1

سپس شرط بررسی می‌شود:

i <= 5

چون مقدار i برابر ۱ است، شرط برقرار است و حلقه اجرا می‌شود:

print(i)

سپس این دستور اجرا می‌شود:

i += 1

اکنون مقدار i برابر ۲ می‌شود. دوباره شرط بررسی می‌شود و این روند ادامه پیدا می‌کند تا زمانی که مقدار i به ۶ برسد. در این لحظه شرط دیگر برقرار نیست و حلقه متوقف می‌شود.

اهمیت تغییر متغیر

در حلقه‌ی while باید حتماً مقدار متغیری که در شرط استفاده شده است تغییر کند. اگر این کار را انجام ندهیم، شرط همیشه برقرار خواهد ماند و برنامه هرگز متوقف نمی‌شود.

مثال نادرست

i = 1
while i <= 5:
    print(i)

در این برنامه مقدار i هیچ‌وقت تغییر نمی‌کند. بنابراین شرط همیشه برقرار است و برنامه به صورت بی‌نهایت اجرا می‌شود. به این حالت حلقه‌ی بی‌نهایت (Infinite Loop) گفته می‌شود.

چاپ اعداد زوج از ۲ تا ۱۰

i = 2
while i <= 10:
    print(i)
    i += 2

خروجی

2
4
6
8
10

شمارش معکوس

i = 5
while i > 0:
    print(i)
    i -= 1

خروجی

5
4
3
2
1

تفاوت for و while

حلقه forحلقه while
زمانی استفاده می‌شود که تعداد تکرار مشخص باشد.زمانی استفاده می‌شود که تعداد تکرار از قبل مشخص نباشد.
معمولاً همراه range() استفاده می‌شود.بر اساس یک شرط اجرا می‌شود.
مدیریت شمارنده ساده‌تر است.برنامه‌نویس باید خودش مقدار متغیر را تغییر دهد.
احتمال ایجاد حلقه‌ی بی‌نهایت بسیار کم است.اگر شرط به‌درستی مدیریت نشود، ممکن است حلقه‌ی بی‌نهایت ایجاد شود.

مثال کاربردی

فرض کنید می‌خواهیم اعداد را چاپ کنیم تا زمانی که به عدد ۱۰۰ برسیم.

number = 10
while number <= 100:
    print(number)
    number += 10

خروجی

10
20
30
40
50
60
70
80
90
100
نکته مهم

قبل از نوشتن حلقه‌ی while همیشه این دو سؤال را از خود بپرسید:
شرط توقف حلقه چیست؟
کدام دستور باعث می‌شود شرط در نهایت نادرست (False) شود؟
اگر پاسخ سؤال دوم را ندانید، احتمال زیادی وجود دارد که برنامه وارد حلقه‌ی بی‌نهایت شود.

دستور break در پایتون

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

ساختار کلی

while شرط:
    ...
    if شرط:
        break

یا

for i in range(...):
    ...
    if شرط:
        break

مثال اول

for i in range(10):
    if i == 5:
        break
    print(i)

خروجی

0
1
2
3
4

توضیح

حلقه از عدد صفر شروع می‌شود. وقتی مقدار i به ۵ می‌رسد، شرط برقرار می‌شود و دستور break اجرا می‌شود. در نتیجه حلقه متوقف شده و عدد ۵ و اعداد بعد از آن چاپ نمی‌شوند.

مثال دوم

i = 1
while i <= 10:
    if i == 6:
        break
    print(i)
    i += 1

خروجی

1
2
3
4
5

در این مثال نیز حلقه به محض رسیدن به عدد ۶ متوقف می‌شود.

کاربرد break

یکی از کاربردهای مهم break زمانی است که به نتیجه‌ی موردنظر رسیده‌ایم و دیگر نیازی به ادامه‌ی حلقه نیست. برای مثال:

  • پیدا کردن یک عدد در میان چندین عدد
  • پیدا کردن یک نام در لیست
  • پایان دادن به برنامه با وارد کردن یک مقدار خاص

دستور continue در پایتون

دستور continue با break تفاوت دارد. continue حلقه را متوقف نمی‌کند، بلکه فقط از اجرای ادامه‌ی دستورات همان دور از حلقه صرف‌نظر می‌کند و مستقیماً وارد دور بعدی می‌شود.

مثال اول

for i in range(6):
    if i == 3:
        continue
    print(i)

خروجی

0
1
2
4
5

توضیح

وقتی مقدار i برابر ۳ می‌شود، دستور continue اجرا می‌شود. بنابراین عدد ۳ چاپ نمی‌شود، اما حلقه همچنان ادامه پیدا می‌کند.

مثال دوم

چاپ فقط اعداد فرد

for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)

خروجی

1
3
5
7
9

در این برنامه هر بار که عدد زوج باشد، دستور continue اجرا می‌شود و آن عدد چاپ نمی‌شود.

تفاوت break و continue

breakcontinue
کل حلقه را متوقف می‌کند.فقط همان دور از حلقه را رد می‌کند.
اجرای حلقه پایان می‌یابد.حلقه از دور بعدی ادامه پیدا می‌کند.
دستورات بعد از حلقه اجرا می‌شوند.حلقه همچنان به اجرای خود ادامه می‌دهد.
 
نکته مهم

break یعنی: «حلقه را تمام کن.»
continue یعنی: «این دور را رد کن و برو سراغ دور بعدی.»

حلقه روی رشته‌ها (Looping Through Strings)

در درس‌های قبل یاد گرفتیم که یک رشته (String) از کنار هم قرار گرفتن چندین کاراکتر تشکیل می‌شود. هر حرف، عدد یا علامت داخل رشته یک کاراکتر محسوب می‌شود. از آنجا که رشته مجموعه‌ای از کاراکترهاست، می‌توان با استفاده از حلقه for روی تک‌تک کاراکترهای آن حرکت کرد.

مثال اول

text = "Python"
for ch in text:
    print(ch)

خروجی

P
y
t
h
o
n

در این مثال، حلقه در هر بار اجرا یکی از کاراکترهای رشته را داخل متغیر ch قرار می‌دهد و سپس آن را چاپ می‌کند.

متغیر ch چیست؟

در حلقه بالا از متغیری به نام ch استفاده شده است.

for ch in text:

نام ch مخفف Character (کاراکتر) است. البته این فقط یک نام دلخواه است و می‌توان هر نام دیگری انتخاب کرد. مثلاً:

for letter in text:
    print(letter)

یا

for x in text:
    print(x)

همه این برنامه‌ها دقیقاً یک کار انجام می‌دهند.

مثال دوم

name = "Ali"
for letter in name:
    print(letter)

خروجی

A
l
i

چاپ کاراکترها در یک خط

اگر بخواهیم کاراکترها در یک خط نمایش داده شوند، می‌توانیم از پارامتر end استفاده کنیم.

text = "Python"
for ch in text:
    print(ch, end=" ")

خروجی

P y t h o n

مثال دیگر

word = "Python"
for ch in word:
    print(ch.upper())

خروجی

P
Y
T
H
O
N

در این مثال، هر کاراکتر به صورت جداگانه به حروف بزرگ تبدیل شده است.

� تمرین ۱ : اولین حرف تکراری

رشته‌ای را در یک متغیر ذخیره کنید. برنامه باید اولین کاراکتری را پیدا کند که بیش از یک بار در رشته تکرار شده است. بعد از پیدا کردن آن، با استفاده از break جستجو را متوقف کند.

نمونه

Programming

خروجی

r

� تمرین ۲ : رمز عبور

رمز صحیح را داخل یک متغیر ذخیره کنید. کاربر باید تا زمانی که رمز درست را وارد نکرده است، دوباره رمز را وارد کند. پس از ورود رمز صحیح، پیام موفقیت نمایش داده شود.

راهنمایی: از حلقه while استفاده کنید.

� تمرین ۳ : حدس عدد

یک عدد مخفی (مثلاً 27) در برنامه قرار دهید. کاربر آن‌قدر عدد وارد کند تا عدد صحیح را حدس بزند. در پایان تعداد تلاش‌های کاربر نیز نمایش داده شود.

راهنمایی: از while و یک متغیر برای شمارش دفعات تلاش استفاده کنید.

� تمرین ۴ : قوی‌ترین رمز عبور

بررسی کنید که یک رمز عبور شرایط زیر را داشته باشد:

  • حداقل ۸ کاراکتر باشد.
  • حداقل یک رقم داشته باشد.
  • حداقل یک حرف بزرگ انگلیسی داشته باشد.

اگر همه شرایط برقرار بود، عبارت Strong Password و در غیر این صورت Weak Password چاپ شود.

� تمرین ۵ : شمارنده حروف

یک رشته را از کاربر دریافت کنید و تعداد موارد زیر را جداگانه محاسبه کنید:

  • تعداد حروف انگلیسی
  • تعداد رقم‌ها
  • تعداد فاصله‌ها (Space)

در پایان، هر سه مقدار را نمایش دهید.

� تمرین ۶ : هرم اعداد

با استفاده از حلقه‌های تو در تو، شکل زیر را چاپ کنید:

1
12
123
1234
12345

سعی کنید برنامه را طوری بنویسید که اگر عدد ۵ را به ۸ تغییر دادید، شکل به صورت خودکار تا ۸ ادامه پیدا کند.

� تمرین 7

یک عدد صحیح را از کاربر دریافت کنید و مشخص کنید آیا آن عدد اول (Prime) است یا خیر.

اگر عدد فقط بر ۱ و خودش بخش‌پذیر باشد، عبارت Prime و در غیر این صورت Not Prime چاپ شود.

راهنمایی: از یک حلقه و دستور break استفاده کنید.

ساختارهای داده در پایتون

در درس بعدی با ساختارهای داده در پایتون آشنا می‌شوید. با یادگیری لیست‌ها، تاپل‌ها، دیکشنری‌ها و مجموعه‌ها (Set)، می‌توانید چندین داده را به‌صورت منظم ذخیره و مدیریت کنید و برنامه‌های کاربردی‌تری بنویسید.

گام بعدی : ساختارهای داده در پایتون

برای شرکت در آزمون آماده‌اید؟

با ورود به پنل کاربری می‌توانید جهت ثبت نام در آزمون‌ها و دسترسی به منابع آموزشی اقدام نمایید. کارشناسان ما در اسرع وقت با شما تماس می‌گیرند.

شروع کار با Django

شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرط‌ها، حلقه‌ها، توابع، کلاس‌ها، فایل‌ها و کار

ادامه مطلب »

عملیات CRUD در SQLite

عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.

ادامه مطلب »

توابع در پایتون

توابع در پایتون اگر هنگام برنامه‌نویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و

ادامه مطلب »

مجموعه در پایتون

مجموعه (Set) در پایتون به زبان ساده، Set مجموعه‌ای از عناصر منحصربه‌فرد (Unique) است که ترتیب مشخصی ندارد و اجازه

ادامه مطلب »

تاپل در پایتون

تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی

ادامه مطلب »

لیست در پایتون

لیست (List) در پایتون پرکاربردترین ساختار داده​ تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود

ادامه مطلب »

آموزش نصب پایتون

آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفته‌اید برنامه‌نویسی را یاد بگیرید، احتمالاً نام زبان

ادامه مطلب »