Table of Contents
درک حلقهٔ `for` در پایتون
در فصل حلقهها، با مفهوم کلی تکرار آشنا شدهاید. در این بخش فقط روی حلقهٔ for در پایتون تمرکز میکنیم و شکل و کاربردهای معمول آن را میبینیم.
شکل کلی حلقهٔ `for`
در پایتون حلقهٔ for معمولاً روی یک «دنباله» (مثل لیست، رشته، خروجی range() و …) حرکت میکند و هر بار یک عنصر از آن را در متغیری قرار میدهد:
for متغیر in دنباله:
دستور_۱
دستور_۲متغیر: نامی که هر بار مقدار جدیدی از دنباله میگیرد.دنباله: چیزی که بتوان روی آن «قدم زد» (iterate کرد)، مثلاً خروجیrange(), یک لیست، یک رشته و …
مثال ساده: شمارش با `range()`
رایجترین استفاده از for، تکرار یک کار تعداد مشخصی بار است. برای این کار از تابع range() استفاده میشود (جزییات کامل range() در بخشهای دیگر هم خواهد آمد، اینجا فقط استفادهٔ معمولش را میبینیم).
for i in range(5):
print("سلام")خروجی:
سلام
سلام
سلام
سلام
سلامدر این مثال:
range(5)مثل این است که دنبالهای از اعداد ۰ تا ۴ بسازد:0, 1, 2, 3, 4- در هر تکرار، متغیر
iیکی از این اعداد را میگیرد (اول ۰، بعد ۱، …) - ما در اینجا از خود عدد
iاستفاده نکردیم، فقط ۵ بار دستورprintاجرا شده است.
اگر بخواهید خود شمارهٔ تکرار را هم چاپ کنید:
for i in range(5):
print("شماره تکرار:", i)خروجی:
شماره تکرار: 0
شماره تکرار: 1
شماره تکرار: 2
شماره تکرار: 3
شماره تکرار: 4استفاده از `range(start, stop, step)`
شکل کلیتر range میتواند شروع، پایان و گام داشته باشد:
range(stop)range(start, stop)range(start, stop, step)
مثالها:
# از 1 تا 5 (بدون 6)
for i in range(1, 6):
print(i)
# فقط اعداد فرد بین 1 تا 9
for i in range(1, 10, 2):
print(i)
# شمارش معکوس از 10 تا 1
for i in range(10, 0, -1):
print(i)
نکتهٔ مهم: stop همیشه خودش در دنباله نیست؛ تکرار تا قبل از آن عدد انجام میشود.
حلقهٔ `for` روی لیست
حلقهٔ for فقط برای range() نیست؛ روی هر دنبالهای قابل استفاده است. یک کاربرد بسیار معمول، پیمایش لیست است (خود لیستها در فصل «مجموعههای داده» بهطور کامل بررسی میشوند).
numbers = [10, 20, 30, 40]
for num in numbers:
print(num)در هر تکرار:
- متغیر
numیکی از اعضای لیست را میگیرد. - ترتیب از اولین عنصر تا آخرین عنصر لیست است.
مثال کاربردیتر: محاسبهٔ مجموع اعداد لیست:
numbers = [5, 8, 12]
total = 0
for n in numbers:
total = total + n
print("مجموع:", total)حلقهٔ `for` روی رشته (متن)
رشتهها (str) هم دنبالهای از کاراکترها هستند، پس میتوان روی آنها با for حرکت کرد:
text = "Python"
for ch in text:
print(ch)خروجی:
P
y
t
h
o
n
مثال ساده: شمارش تعداد حروف a در یک متن:
sentence = "salam chetori?"
count = 0
for ch in sentence:
if ch == "a":
count = count + 1
print("تعداد a:", count)
(ساختار شرط if جای دیگری بهتفصیل توضیح داده میشود؛ اینجا فقط برای نشاندادن استفادهٔ ترکیبی آمده است.)
استفاده از `for` برای تکرار یک کار مشخص
گاهی شما فقط میخواهید کاری را چند بار انجام دهید، بدون اینکه به خود شمارهٔ تکرار نیاز داشته باشید. در این صورت، بعضیها از نام متغیر _ استفاده میکنند تا نشان بدهند که مقدارش برایشان مهم نیست:
for _ in range(3):
print("این پیام سه بار چاپ میشود.")
در اینجا نام متغیر مهم نیست؛ میتوانست هر چیز دیگری هم باشد، ولی _ فقط یک قرارداد رایج است.
حلقهٔ تو در تو با `for` (مقدماتی)
گاهی نیاز دارید یک حلقهٔ for را درون حلقهٔ for دیگر استفاده کنید (حلقهٔ تو در تو). جزئیات بیشتر در بخش «شرطهای تو در تو» و در تمرینهای حلقه خواهد آمد؛ اینجا فقط یک تصویر کلی:
for i in range(1, 4): # حلقهٔ بیرونی
for j in range(1, 3): # حلقهٔ درونی
print(i, j)خروجی:
1 1
1 2
2 1
2 2
3 1
3 2هر بار که حلقهٔ بیرونی یک مقدار میگیرد، حلقهٔ درونی بهطور کامل اجرا میشود.
مقایسهٔ ذهنی `while` و `for` (در حد اشاره)
جزئیات کامل مقایسه در بخشهای دیگر آمده است، ولی در حد یک «حس کلی»:
forبیشتر برای وقتی است که تعداد دفعات تکرار یا مجموعهای که باید روی آن بگردیم معلوم است (مثلاً ۱۰ بار، یا روی یک لیست، روی یک رشته و …).whileبیشتر برای وقتی است که میخواهیم تا وقتی یک «شرط» برقرار است تکرار کنیم (مثل «تا وقتی کاربر عدد صفر وارد نکرده است ادامه بده»).
در عمل، در بسیاری از برنامههای ساده، for انتخاب پیشفرض برای پیمایش دنبالهها و تکرارهای شمارشی است.
چند تمرین پیشنهادی
برای تمرین حلقهٔ for (پاسخها را فعلاً خودتان پیدا کنید):
- با استفاده از
forوrange()اعداد ۱ تا ۱۰ را چاپ کنید. - مجموع اعداد ۱ تا ۱۰۰ را محاسبه و چاپ کنید.
- لیستی از نامها بسازید و با
forبه هر کدام سلام کنید (مثلاًسلام علی). - یک رشته از کاربر بگیرید و با حلقهٔ
forآن را برعکس چاپ کنید (کاراکترها را از آخر به اول چاپ کنید؛ میتوانید ازrangeکمک بگیرید).
در فصل «شمارندههای حلقه» و «تمرینهای حلقه» با الگوهای متداولتری برای استفاده از for آشنا میشوید.