~/icsd.ir — bash
SYSTEM_ONLINE

حلقه‌ها for و while

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

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

حلقه for

حلقه for در پایتون روی هر چیزی که قابل پیمایش باشد (iterable) کار می‌کند:

# روی رشته
for char in "سلام":
    print(char)
# س
# ل
# ا
# م

# روی لیست
fruits = ["سیب", "موز", "پرتقال"]
for fruit in fruits:
    print(f"میوه: {fruit}")

# روی range
for i in range(5):    # 0, 1, 2, 3, 4
    print(i)

تابع range()

# range(stop)
for i in range(5):           # 0, 1, 2, 3, 4
    print(i)

# range(start, stop)
for i in range(2, 7):        # 2, 3, 4, 5, 6
    print(i)

# range(start, stop, step)
for i in range(0, 11, 2):    # 0, 2, 4, 6, 8, 10
    print(i)

# معکوس
for i in range(10, 0, -1):   # 10, 9, 8, ..., 1
    print(i)

# مهم: stop شامل نمی‌شود!
# range(1, 5) → 1, 2, 3, 4 (نه 5)

حلقه while

تا زمانی که شرط برقرار باشد تکرار می‌شود:

count = 0
while count < 5:
    print(f"شمارش: {count}")
    count += 1

# مثال: ورودی تا زمان دریافت پاسخ صحیح
password = ""
while password != "1234":
    password = input("رمز را وارد کنید: ")
print("ورود موفق!")

# هشدار: مراقب حلقه بی‌نهایت باشید
# while True:        # هرگز تمام نمی‌شود مگر break
#     print("بی‌نهایت")

مثال: تخمین جذر با Newton

number = 25
guess = 1.0
tolerance = 0.0001

while abs(guess * guess - number) > tolerance:
    guess = (guess + number / guess) / 2

print(f"جذر {number} ≈ {guess:.4f}")

break و continue

break – خروج از حلقه

# جستجوی اولین عدد زوج
numbers = [1, 3, 5, 8, 9, 11]
for num in numbers:
    if num % 2 == 0:
        print(f"اولین زوج: {num}")
        break
else:
    print("هیچ عدد زوجی پیدا نشد")

continue – رد شدن از این تکرار

# چاپ فقط اعداد فرد
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i)
# 1 3 5 7 9
💡 else در حلقه:

پایتون قابلیت منحصربه‌فردی دارد: حلقه‌های for و while می‌توانند بلوک else داشته باشند که فقط زمانی اجرا می‌شود که حلقه بدون break به پایان برسد.

enumerate – شمارنده هوشمند

وقتی هم به اندیس و هم مقدار نیاز دارید:

fruits = ["سیب", "موز", "پرتقال"]

# روش غیرحرفه‌ای
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

# روش Pythonic
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

# با شروع از ۱
for i, fruit in enumerate(fruits, start=1):
    print(f"{i}- {fruit}")
# 1- سیب
# 2- موز
# 3- پرتقال

zip – پیمایش موازی

names = ["علی", "زهرا", "محمد"]
ages = [25, 30, 28]
cities = ["کاشان", "تهران", "اصفهان"]

for name, age, city in zip(names, ages, cities):
    print(f"{name} ({age} ساله) از {city}")
# علی (25 ساله) از کاشان
# زهرا (30 ساله) از تهران
# محمد (28 ساله) از اصفهان

حلقه‌های تو در تو

# جدول ضرب
for i in range(1, 5):
    for j in range(1, 5):
        print(f"{i*j:3d}", end=" ")
    print()
# خروجی:
#  1   2   3   4
#  2   4   6   8
#  3   6   9  12
#  4   8  12  16

# الگوی مثلث
for i in range(1, 6):
    for j in range(i):
        print("*", end="")
    print()
# *
# **
# ***
# ****
# *****

break و continue در حلقه‌های تو در تو

# break فقط از حلقه داخلی خارج می‌شود
for i in range(3):
    for j in range(5):
        if j == 3:
            break        # فقط از حلقه j خارج می‌شود
        print(f"({i},{j})")

# برای خروج کامل: استفاده از flag یا تابع
found = False
for i in range(10):
    for j in range(10):
        if i * j == 24 and i != 1:
            print(f"پیدا شد: {i} × {j}")
            found = True
            break
    if found:
        break

مثال‌های واقعی

مجموع اعداد

total = 0
for i in range(1, 101):
    total += i
print(f"مجموع 1 تا 100: {total}")    # 5050

# روش خلاصه
total = sum(range(1, 101))
print(total)

ضرب فاکتوریل

n = int(input("یک عدد: "))

factorial = 1
for i in range(1, n + 1):
    factorial *= i

print(f"!{n} = {factorial}")

بزرگترین مقسوم‌علیه مشترک (GCD)

a = int(input("عدد اول: "))
b = int(input("عدد دوم: "))

while b != 0:
    a, b = b, a % b

print(f"ب.م.م = {a}")

تشخیص عدد اول

num = int(input("یک عدد: "))

if num < 2:
    print("اول نیست")
else:
    is_prime = True
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            is_prime = False
            break
    
    if is_prime:
        print(f"{num} عدد اول است")
    else:
        print(f"{num} اول نیست")

منوی برنامه

while True:
    print("n--- منو ---")
    print("1. ثبت محصول")
    print("2. نمایش لیست")
    print("3. حذف")
    print("0. خروج")
    
    choice = input("انتخاب: ")
    
    if choice == "0":
        print("خداحافظ!")
        break
    elif choice == "1":
        print("ثبت...")
    elif choice == "2":
        print("نمایش...")
    elif choice == "3":
        print("حذف...")
    else:
        print("نامعتبر!")

اعتبارسنجی ورودی

while True:
    age_str = input("سن: ")
    if age_str.isdigit():
        age = int(age_str)
        if 0 < age < 120:
            break
        print("سن نامعتبر")
    else:
        print("لطفاً یک عدد وارد کنید")

print(f"سن شما: {age}")

پیش‌نمای List Comprehension

پایتون راه فشرده‌ای برای ساخت لیست با حلقه دارد (در فصل لیست‌ها مفصل بحث می‌شود):

# روش معمولی
squares = []
for i in range(10):
    squares.append(i ** 2)

# روش Pythonic - List Comprehension
squares = [i ** 2 for i in range(10)]
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# با شرط
evens = [i for i in range(20) if i % 2 == 0]
print(evens)
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

تمرین فصل

🏋️ تمرین ۱ – مجموع زوج‌ها:

مجموع اعداد زوج بین ۱ تا ۱۰۰ را با حلقه محاسبه کنید.

🏋️ تمرین ۲ – فیبوناچی:

اولین ۲۰ عدد دنباله فیبوناچی را چاپ کنید (۱، ۱، ۲، ۳، ۵، ۸، …).

🏋️ تمرین ۳ – حدس عدد:

عددی تصادفی بین ۱ تا ۱۰۰ تولید کنید و کاربر تا حدس صحیح ادامه دهد. در هر حدس، «بزرگ‌تر» یا «کوچک‌تر» راهنمایی کنید.

🏋️ تمرین ۴ – الگوی هرم:

عددی n می‌گیرد و این الگو را چاپ می‌کند (برای n=۵):

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

جمع‌بندی

  • حلقه for برای پیمایش iterable‌ها
  • حلقه while برای تکرار تا برقراری شرط
  • تابع range() با ۱، ۲ یا ۳ آرگومان
  • break و continue برای کنترل جریان
  • enumerate و zip – ابزارهای Pythonic
  • حلقه‌های تو در تو
  • پیش‌نمای List Comprehension

نمایش سایت

رنگ سایت
حالت نمایش
اندازهٔ متن
خوانایی

این تنظیمات فقط روی مرورگر شما ذخیره می‌شود.