حلقهها
در این درس با for و while کارها را تکرار میکنید، بازههای عددی را با range میسازید و با break و continue جریان حلقه را کنترل میکنید.
آنچه در این درس میآموزید
- با for و range روی بازهای از اعداد پیمایش کنید
- با while تکرار وابسته به شرط بسازید
- جریان حلقه را با break و continue کنترل کنید
فهرست مطالب
کامپیوتر در «تکرار بیخستگی» حرفهای است. اگر بخواهید پنج بار سلام بگوید، میتوانید پنج خط print بنویسید؛ اما هزار بار چه؟ حلقه (Loop) ابزار تکرار است: یک بلوک کد مینویسید و پایتون آن را هر بار که لازم است اجرا میکند. دو نوع حلقه اصلی پایتون را میشناسید.
for و range؛ تکرار معلومالتعداد
وقتی میدانید چند بار باید تکرار شود، حلقه for همراه تابع range ابزار شماست:
for i in range(5, 0, -1):
print(i)
print("Liftoff!")5 4 3 2 1 Liftoff!
تابع range دنبالهای از اعداد میسازد و for روی آن پیمایش میکند؛ در هر دور، عدد جاری در متغیر i قرار میگیرد. range سه شکل دارد:
| فراخوانی | دنباله | توضیح |
|---|---|---|
range(5) |
۰ تا ۴ | از صفر شروع میشود |
range(1, 5) |
۱ تا ۴ | ابتدا هست، انتها نیست |
range(5, 0, -1) |
۵ تا ۱ | گام منفی، شمارش معکوس |
قاعده کلیدی این است: انتها هرگز داخل دنباله نیست؛ range(1, 5) چهار عدد میدهد نه پنج تا. این قاعده اول کمی غیرمنتظره به نظر میرسد، ولی وقتی عادت کردید، حساب کردن طول بازهها ساده میشود.
while؛ تکرار تا وقتی شرط برقرار است
حلقه while مثل if عمل میکند، ولی بعد از هر دور دوباره شرط را بررسی میکند و تا وقتی شرط درست است ادامه میدهد. برنامهای که جمع اعداد ۱ تا ۱۰ را حساب میکند:
total = 0
n = 1
while n <= 10:
total += n
n += 1
print(total)55
در هر دور، total بهروز میشود و n یکی بالا میرود؛ وقتی n شد ۱۱، شرط نادرست است و حلقه تمام. چیزی که حلقه را تمام میکند همان تغییر n داخل بدنه است؛ اگر آن سطر را جا بیندازید، حلقه تا ابد میچرخد.
پیمایش رشتهها
for فقط برای اعداد نیست؛ روی هر چیز قابلپیمایشی کار میکند. یک رشته هم قابلپیمایش است: حرف به حرف:
for letter in "python":
if letter == "h":
break
print(letter)p y t
در هر دور حلقه، یک حرف از «پایتون» در letter است. وقتی به «ی» رسیدیم، break اجرا میشود.
break و continue
دو کلمه کلیدی، کنترل دقیق حلقه را میدهند:
breakحلقه را همانجا تمام میکند و از آن بیرون میپرد؛ در مثال بالا با رسیدن به «ی» حلقه بسته شد و دو حرف آخر هرگز چاپ نشدند.continueفقط دور جاری را رد میکند و سراغ دور بعد میرود:
for i in range(1, 8):
if i % 2 == 0:
continue
print(i)1 3 5 7
عددهای زوج با continue رد شدند و فقط فردها چاپ شدند. یک قاعده سبکبال: استفاده از break و continue اشکالی ندارد، اما اگر با آنها کد پیچیده شد، شاید شرط حلقه یا بدنه را باید بازطراحی کنید.
تمرینها
تمرین
تمرین ۱ — جمع زوجها
جمع همه عددهای زوج از ۱ تا ۱۰۰ را با یک حلقه for و یک متغیر انباره حساب کنید. جواب باید ۲۵۵۰ شود.
# Write your code hereنمایش راهحل
total = 0
for i in range(2, 101, 2):
total += i
print(total)2550
::: :::
خلاصه
forروی دنباله پیمایش میکند؛rangeدنباله اعداد میسازد و انتها هیچوقت داخل دنباله نیست.whileتا وقتی شرطش درست است میچرخد؛ چیزی در بدنه باید شرط را به سمت نادرستی ببرد.- رشتهها قابلپیمایشاند؛ در هر دور
forیک حرف در متغیر پیمایش است. breakکل حلقه را تمام وcontinueفقط دور جاری را رد میکند.- تعداد معلوم؟
for. تکرار تا وضعیت مشخص؟while.
حلقه به دست آوردید؛ اما الگوهای کاربردیای مثل پیدا کردن بیشینه یا جستوجو در دل همین حلقهها هستند. در درس بعدی این الگوها را منظم و حرفهای تمرین میکنیم.