حلقه for در پایتون؛ آموزش for، range، break و continue
حلقه for در پایتون
جلسه ۱۶ آموزش پایتون: حلقه for و پیمایش دادهها
در جلسههای قبل یاد گرفتیم که پایتون چگونه با استفاده از if، elif و else تصمیمگیری میکند و در جلسه ۱۵ با حلقه while یاد گرفتیم چگونه یک بخش از برنامه را چندین بار اجرا کنیم.
اما یک سؤال مهم باقی میماند:
اگر بخواهیم روی تکتک اعضای یک لیست، رشته یا مجموعهای از دادهها عملیات انجام دهیم، چه کار باید کنیم؟
اینجاست که حلقه for در پایتون وارد میشود.
تحقیق و تدوین مهدی گمرکی
در این جلسه چه یاد میگیریم؟
در پایان این درس با موارد زیر آشنا خواهید شد:
- حلقه
forدر پایتون چیست؟ - نحوه نوشتن حلقه
for - پیمایش لیستها
- پیمایش رشتهها
- استفاده از تابع
range() - استفاده از
forهمراه باif - دستورهای
breakوcontinueدر حلقهfor - حلقههای تو در تو
- خطاهای رایج هنگام استفاده از
for - چند تمرین برای تسلط بیشتر
حلقه for در پایتون چیست؟
حلقه for برای تکرار یک عملیات روی مجموعهای از دادهها استفاده میشود.
برای مثال، فرض کنید لیستی از نام چند دانشجو داریم:
students = ["Ali", "Sara", "Reza", "Mina"]
اگر بخواهیم نام همه دانشجوها را چاپ کنیم، لازم نیست برای هر کدام یک print جداگانه بنویسیم.
میتوانیم از for استفاده کنیم:
students = ["Ali", "Sara", "Reza", "Mina"]
for student in students:
print(student)
خروجی:
Ali
Sara
Reza
Mina
در اینجا پایتون یکییکی اعضای لیست را در متغیر student قرار میدهد و دستور print را اجرا میکند.
ساختار کلی حلقه for
ساختار ساده حلقه for به شکل زیر است:
for variable in iterable:
# code
برای مثال:
for number in [1, 2, 3, 4, 5]:
print(number)
در هر مرحله، یکی از اعداد داخل متغیر number قرار میگیرد.
یعنی تقریباً این اتفاق رخ میدهد:
number = 1
number = 2
number = 3
number = 4
number = 5
و برای هر مرحله، print(number) اجرا میشود.
پیمایش لیست با for
یکی از مهمترین کاربردهای for، پیمایش لیستهاست.
مثلاً:
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
خروجی:
apple
banana
orange
اما میتوانیم عملیات بیشتری نیز روی هر عضو انجام دهیم.
prices = [100, 200, 300]
for price in prices:
print(price * 2)
خروجی:
200
400
600
یعنی پایتون هر عضو را دریافت کرده و عملیات موردنظر ما را روی آن انجام میدهد.
پیمایش رشته با for
یکی از ویژگیهای جالب پایتون این است که میتوانیم روی رشتهها نیز حلقه ایجاد کنیم.
مثلاً:
word = "Python"
for letter in word:
print(letter)
خروجی:
P
y
t
h
o
n
در این مثال، پایتون رشته را کاراکتر به کاراکتر بررسی میکند.
این قابلیت در پردازش متن، جستوجوی کاراکترها و بسیاری از پروژههای واقعی کاربرد دارد.
تابع range() در پایتون
گاهی اوقات نمیخواهیم روی یک لیست مشخص حرکت کنیم؛ بلکه میخواهیم یک عملیات را تعداد مشخصی از دفعات اجرا کنیم.
در این شرایط، تابع range() بسیار کاربردی است.
مثلاً:
for number in range(5):
print(number)
خروجی:
0
1
2
3
4
نکته مهم این است که range(5) اعداد از ۰ تا قبل از ۵ را تولید میکند.
پس:
range(5)
یعنی:
0, 1, 2, 3, 4
شروع و پایان در range()
میتوانیم نقطه شروع را نیز مشخص کنیم:
for number in range(2, 6):
print(number)
خروجی:
2
3
4
5
ساختار آن:
range(start, stop)
است.
عدد stop در خروجی قرار نمیگیرد.
تعیین گام در range()
حتی میتوانیم مشخص کنیم اعداد با چه فاصلهای تولید شوند:
for number in range(0, 10, 2):
print(number)
خروجی:
0
2
4
6
8
در اینجا عدد سوم یعنی 2، گام حرکت است.
ترکیب for با if
یکی از کاربردهای مهم حلقه for، ترکیب آن با دستورات شرطی است.
مثلاً فرض کنید میخواهیم فقط اعداد زوج را از یک لیست پیدا کنیم:
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
for number in numbers:
if number % 2 == 0:
print(number)
خروجی:
2
4
6
8
اینجا حلقه for روی تمام اعداد حرکت میکند و if بررسی میکند که آیا عدد زوج است یا خیر.
این دقیقاً همان جایی است که مباحث جلسات قبلی به یکدیگر متصل میشوند:
حلقه + شرط = امکان ساخت منطقهای کاربردیتر
دستور break در حلقه for
در جلسه قبل با break آشنا شدیم.
این دستور در حلقه for نیز قابل استفاده است و باعث میشود حلقه بهطور کامل متوقف شود.
مثلاً:
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
break
print(number)
خروجی:
1
2
وقتی پایتون به عدد 3 میرسد، break اجرا شده و حلقه پایان پیدا میکند.
دستور continue در حلقه for
continue برخلاف break کل حلقه را متوقف نمیکند.
این دستور فقط باعث میشود اجرای همان تکرار فعلی رد شود و حلقه به سراغ مرحله بعدی برود.
مثلاً:
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
continue
print(number)
خروجی:
1
2
4
5
عدد 3 چاپ نشده است، اما حلقه همچنان ادامه پیدا کرده است.
تفاوت مهم
break:
کل حلقه را متوقف میکند.
continue:
فقط تکرار فعلی را رد میکند.
حلقههای for تو در تو
گاهی لازم است یک حلقه را داخل حلقه دیگری قرار دهیم. به این ساختار، حلقه تو در تو یا nested loop میگوییم.
مثلاً:
for i in range(3):
for j in range(2):
print(i, j)
در این حالت، حلقه داخلی برای هر بار اجرای حلقه بیرونی اجرا میشود.
حلقههای تو در تو در مواردی مانند کار با جدولها، ماتریسها و دادههای چندبعدی بسیار کاربرد دارند.
یک مثال کاربردی
فرض کنید میخواهیم نمرات چند دانشآموز را بررسی کنیم و مشخص کنیم چه کسانی نمره قبولی گرفتهاند:
scores = [18, 12, 9, 16, 7]
for score in scores:
if score >= 10:
print("قبول:", score)
else:
print("مردود:", score)
خروجی:
قبول: 18
قبول: 12
مردود: 9
قبول: 16
مردود: 7
در این مثال چند مفهوم را همزمان استفاده کردیم:
- لیست
- حلقه
for - شرط
if - عملگر مقایسهای
- خروجی گرفتن با
print
این ترکیبها پایه بسیاری از برنامههای واقعی هستند.
یک اشتباه رایج در حلقه for
یکی از اشتباهات رایج، فراموش کردن : در پایان خط for است.
اشتباه:
for number in numbers
print(number)
درست:
for number in numbers:
print(number)
همچنین باید به تورفتگی یا indentation توجه کنیم.
در پایتون، تورفتگی فقط برای زیبایی کد نیست؛ بخشی از ساختار برنامه است.
for یا while؟ کدام را استفاده کنیم؟
حالا که با هر دو حلقه آشنا شدهایم، بهتر است تفاوت آنها را بدانیم.
زمانی که for مناسبتر است
وقتی میدانیم میخواهیم روی یک مجموعه یا تعداد مشخصی از دادهها حرکت کنیم:
for item in items:
print(item)
زمانی که while مناسبتر است
وقتی ادامه پیدا کردن حلقه به یک شرط وابسته است و تعداد تکرارها از قبل مشخص نیست:
while condition:
# code
به زبان ساده:
for بیشتر برای پیمایش و تکرار مشخص کاربرد دارد.
while بیشتر برای تکرار وابسته به شرط کاربرد دارد.
البته در پایتون بسیاری از مسائل را میتوان با هر دو روش حل کرد.
تمرینهای جلسه ۱۶
برای اینکه مطالب این جلسه کاملاً جا بیفتد، تمرینهای زیر را انجام دهید.
تمرین ۱
برنامهای بنویسید که اعداد 1 تا 10 را چاپ کند.
تمرین ۲
برنامهای بنویسید که فقط اعداد زوج بین 1 تا 20 را نمایش دهد.
تمرین ۳
یک لیست از نام چند نفر ایجاد کنید و با for نام همه آنها را چاپ کنید.
تمرین ۴
برنامهای بنویسید که اعداد یک لیست را بررسی کند و فقط اعداد بزرگتر از 10 را نمایش دهد.
تمرین چالشی
برنامهای بنویسید که از 1 تا 100 حرکت کند و:
- اگر عدد بر
3بخشپذیر بود، عبارتFizzرا چاپ کند. - اگر بر
5بخشپذیر بود، عبارتBuzzرا چاپ کند. - اگر هم بر
3و هم بر5بخشپذیر بود،FizzBuzzرا چاپ کند. - در غیر این صورت خود عدد را چاپ کند.
این تمرین یکی از تمرینهای شناختهشده برای تقویت مهارت حل مسئله و ترکیب حلقه و شرط است.
جمعبندی جلسه ۱۶
در این جلسه با یکی از مهمترین ساختارهای کنترلی پایتون، یعنی حلقه for در پایتون آشنا شدیم.
یاد گرفتیم که چگونه:
- روی اعضای یک لیست حرکت کنیم؛
- کاراکترهای یک رشته را بررسی کنیم؛
- با
range()تعداد مشخصی تکرار ایجاد کنیم؛ forرا باifترکیب کنیم؛- با
breakحلقه را متوقف کنیم؛ - با
continueیک تکرار را رد کنیم؛ - و از حلقههای تو در تو استفاده کنیم.
تا اینجا برنامههای ما دیگر فقط مجموعهای از دستورهای پشت سر هم نیستند. حالا میتوانیم به برنامه بگوییم تصمیم بگیرد و یک کار را چندین بار تکرار کند.
در جلسه ۱۷ یک قدم مهمتر برمیداریم و سراغ لیستها در پایتون و کار با دادههای چندتایی میرویم؛ جایی که یاد میگیریم چگونه دادهها را ایجاد، تغییر، حذف و مدیریت کنیم و با متدهای مهم لیست کار کنیم.
تحقیق و تدوین مهدی گمرکی
