Table of Contents
نقش شمارنده در حلقهها
در فصل حلقهها با for و while آشنا شدهاید. در این بخش روی یک ایدهٔ مهم تمرکز میکنیم: شمارندهٔ حلقه.
شمارندهٔ حلقه متغیری است که داخل حلقه مقدارش را (معمولاً عددی) تغییر میدهید تا:
- دفعات اجرای حلقه را کنترل کنید
- روی آیتمهای لیست، کاراکترهای رشته و … حرکت کنید
- چیزی را بشمارید (تعداد تلاشها، تعداد آیتمها، مجموع نمرهها و …)
این شمارنده میتواند:
- نامش هرچیزی باشد (
i،j،count،index، …) - در حلقهٔ
forبه شکل خودکار توسطrange()تغییر کند - در حلقهٔ
whileرا خودتان با+= 1(یا مقدار دیگر) بهروزرسانی کنید
در ادامه حالتهای رایج را میبینیم.
شمارنده در حلقهٔ `for` با `range()`
شایعترین نوع شمارنده در پایتون همراه با for و range() است.
پیمایش با اندیس (index)
اگر میخواهید هم به شمارهٔ خانه (اندیس) دسترسی داشته باشید و هم به مقدار، از شمارنده استفاده میکنید:
names = ["علی", "سارا", "مریم"]
for i in range(len(names)):
print(i, names[i])خروجی:
0 علی
1 سارا
2 مریماینجا:
iنقش شمارنده دارد.- از
0شروع میشود و تاlen(names) - 1بالا میرود.
شمارنده با `range(start, stop, step)`
در فصل حلقهها با range آشنا شدهاید؛ اینجا تمرکز روی نقش آن بهعنوان شمارنده است.
for i in range(1, 6): # از 1 تا 5
print("شماره حلقه:", i)iدر هر دور حلقه مقدار جدیدی میگیرد.- شما از این مقدار برای منطق برنامه استفاده میکنید.
با گام (step) سفارشی:
for i in range(0, 11, 2): # 0، 2، 4، ...، 10
print(i)
اینجا i تنها نقش «شمردن» ندارد، بلکه الگوی تغییر (هر دو تا یکبار) را هم مشخص میکند.
شمارندهٔ معکوس
برای شمردن از بالا به پایین:
for i in range(5, 0, -1):
print(i)
print("پایان!")اینجا:
iاز5شروع میشود.- هر بار
1-میشود تا به1برسد.
شمارنده در حلقهٔ `while`
در while باید خودتان شمارنده را تعریف و بهروزرسانی کنید. اگر این کار را فراموش کنید ممکن است حلقه بینهایت شود.
مثال ساده
i = 1 # مقدار اولیهٔ شمارنده
while i <= 5: # شرط تکرار
print("دور شماره:", i)
i = i + 1 # بهروزرسانی شمارندهنکتهها:
- مقدار اولیه (
i = 1) بسیار مهم است. - بهروزرسانی داخل حلقه (
i = i + 1) را هرگز فراموش نکنید. - شرط (
i <= 5) مشخص میکند حلقه تا کی ادامه دارد.
همان مثال با +=:
i = 1
while i <= 5:
print(i)
i += 1 # کوتاهترشمارنده با گامهای دیگر
لازم نیست همیشه ۱ واحد اضافه کنید:
i = 0
while i <= 10:
print(i)
i += 2یا شمارندهٔ معکوس:
i = 5
while i > 0:
print(i)
i -= 1شمارنده برای جمع، میانگین، حدس زدن و …
شمارنده تنها برای کنترل تعداد دورها نیست؛ میتواند برای شمردن یک اتفاق هم استفاده شود.
شمردن تعداد تلاشها
secret = 7
tries = 0
while True:
guess = int(input("حدس شما: "))
tries += 1
if guess == secret:
print("آفرین! در", tries, "تلاش حدس زدی.")
breakاینجا:
triesشمارندهٔ تعداد تلاشها است.- برخلاف
iدر حلقهٔfor، مقدارش را خودمان با+= 1تغییر میدهیم.
شمردن تعداد مواردی که یک شرط برقرار است
مثلاً میخواهیم بشماریم چند عدد زوج در لیست داریم:
numbers = [3, 4, 8, 5, 10, 11]
even_count = 0 # شمارنده
for n in numbers:
if n % 2 == 0:
even_count += 1
print("تعداد اعداد زوج:", even_count)
even_count شمارندهای است که فقط وقتی شرط برقرار است زیاد میشود.
محاسبهٔ مجموع با کمک شمارندهٔ حلقه
گاهی شمارنده مثل i برای اندیس بهکار میرود و متغیر دیگری مجموع را نگه میدارد:
scores = [18, 15, 20]
total = 0
for i in range(len(scores)):
total += scores[i]
print("جمع نمرهها:", total)اینجا:
iشمارندهٔ خانهها است.totalنوعی شمارندهٔ مجموعی (accumulator) است.
شمارنده و `enumerate`
وقتی روی یک مجموعه با for میچرخید و هم به اندیس نیاز دارید هم به مقدار، یک الگوی رایج این است:
items = ["کتاب", "خودکار", "دفتر"]
index = 0
for item in items:
print(index, item)
index += 1
پایتون برای این کار تابع کمکی enumerate دارد که شمارنده را برایتان مدیریت میکند (توضیح کامل در فصلهای بعدی داده میشود). فقط ایده را ببینید:
items = ["کتاب", "خودکار", "دفتر"]
for index, item in enumerate(items):
print(index, item)درک این الگو کمک میکند بهتر بفهمید شمارندهها در داخل حلقه چطور کار میکنند.
چند الگوی رایج شمارنده
۱. حلقه با حداکثر تعداد تلاش
مثال: اجازهٔ حداکثر ۳ تلاش برای ورود رمز:
password = "1234"
tries = 0
max_tries = 3
while tries < max_tries:
guess = input("رمز را وارد کنید: ")
if guess == password:
print("ورود موفق!")
break
else:
print("اشتباه بود.")
tries += 1
if tries == max_tries:
print("تعداد تلاشها تمام شد.")۲. تولید جدول ضرب با شمارنده
number = int(input("عدد را وارد کنید: "))
for i in range(1, 11):
print(number, "x", i, "=", number * i)
i شمارندهای است که سطرهای جدول ضرب را مشخص میکند.
۳. شمارندهی حلقه برای منو
while True:
print("1) جمع")
print("2) تفریق")
print("3) خروج")
choice = input("انتخاب شما: ")
if choice == "3":
print("خداحافظ")
breakدر اینجا ظاهراً «شمارندهٔ عددی» نداریم؛ اما خود حلقه تعداد دفعات نمایش منو را میشمارد. اگر بخواهیم تعداد دفعات استفاده را هم بدانیم:
run_count = 0
while True:
print("1) جمع")
print("2) تفریق")
print("3) خروج")
choice = input("انتخاب شما: ")
run_count += 1
if choice == "3":
print("برنامه", run_count, "بار اجرا شد.")
breakاشتباهات رایج با شمارندهها
۱. فراموش کردن بهروزرسانی شمارنده در while:
i = 1
while i <= 5:
print(i)
# i += 1 # فراموش شده → حلقه بینهایت۲. استفادهٔ اشتباه از شرط:
i = 1
while i >= 1: # این شرط همیشه درست است اگر i را افزایش دهید
print(i)
i += 1۳. استفادهٔ نامفهوم از نام شمارنده:
x = 0
while x < 10:
# x = x + 1
x += 1
اسمهای خیلی کلی مثل x میتواند کد را مبهم کند. نامهای بهتر:
i,jبرای شمارندههای سادهindexبرای اندیسcountیاtriesبرای شمارش تعداد
تمرین برای خودتان
برای تمرین شمارندهها، میتوانید این ایدهها را پیادهسازی کنید:
- برنامهای بنویسید که از کاربر ۵ عدد بگیرد و:
- مجموع
- و میانگین آنها را با استفاده از شمارنده و جمعکننده حساب کند.
- برنامهای بنویسید که یک عدد
nبگیرد و مجموع اعداد ۱ تاnرا با حلقهٔforو شمارنده حساب کند. - برنامهای بنویسید که یک رشته از کاربر بگیرد و با حلقه تعداد حروف
aیاAرا بشمارد.
در همهٔ این تمرینها، سعی کنید به این سه سؤال توجه کنید:
- شمارندهام کدام متغیر است؟
- مقدار اولیهٔ آن چیست؟
- کجا و چگونه مقدارش را تغییر میدهم؟