~/icsd.ir — bash
SYSTEM_ONLINE

ساختارهای شرطی

برنامه‌نویسی بدون تصمیم‌گیری معنا ندارد. در این فصل با ساختارهای شرطی پایتون آشنا می‌شویم: if، elif، else و حتی match-case جدید.

برنامه‌نویسی بدون تصمیم‌گیری معنا ندارد. در این فصل با ساختارهای شرطی پایتون آشنا می‌شویم: if، elif، else و حتی match-case جدید.

if ساده

age = 18

if age >= 18:
    print("شما بزرگسال هستید")
    print("می‌توانید رای بدهید")

print("این خط همیشه چاپ می‌شود")
⚠️ تورفتگی (Indentation) در پایتون:

پایتون از {} یا کلمه end استفاده نمی‌کند. بلوک کد با تورفتگی مشخص می‌شود. استاندارد: ۴ فاصله (نه tab).

if-else

age = int(input("سن: "))

if age >= 18:
    print("بزرگسال")
else:
    print("صغیر")

# مثال دیگر: اعداد زوج/فرد
num = int(input("یک عدد: "))
if num % 2 == 0:
    print(f"{num} زوج است")
else:
    print(f"{num} فرد است")

if-elif-else

برای چند شرط متوالی:

score = int(input("نمره: "))

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"نمره شما: {grade}")
💡 نکته:

به‌محض اینکه یکی از شرط‌ها True شود، بقیه بررسی نمی‌شوند. پس ترتیب شرط‌ها مهم است: از خاص‌ترین به عام‌ترین.

شرط تو در تو

age = 25
has_license = True

if age >= 18:
    if has_license:
        print("می‌توانید رانندگی کنید")
    else:
        print("ابتدا گواهینامه بگیرید")
else:
    print("سن کافی ندارید")

# روش بهتر: ترکیب شرط‌ها
if age >= 18 and has_license:
    print("می‌توانید رانندگی کنید")
elif age >= 18:
    print("ابتدا گواهینامه بگیرید")
else:
    print("سن کافی ندارید")

مقادیر Truthy و Falsy

در پایتون هر مقداری می‌تواند به‌عنوان شرط استفاده شود. این مقادیر Falsy هستند (یعنی False محسوب می‌شوند):

if False: ...
if None: ...
if 0: ...
if 0.0: ...
if "": ...      # رشته خالی
if []: ...      # لیست خالی
if {}: ...      # دیکشنری خالی
if (): ...      # تاپل خالی
if set(): ...   # ست خالی

# همه چیز دیگر Truthy است
if 1: ...           # True
if -1: ...          # True (مثبت یا منفی، فقط 0 نیست)
if "hi": ...        # True
if [0]: ...         # True (لیست با یک عضو)
if "False": ...     # True! (رشته‌ای که "False" است نه bool)

کاربرد عملی

name = input("نام: ")

# روش غیرحرفه‌ای
if name == "":
    print("نامی وارد نکردید")

# روش Pythonic
if not name:
    print("نامی وارد نکردید")

# بررسی لیست
items = []
if items:
    print(f"تعداد: {len(items)}")
else:
    print("لیست خالی است")

# مقدار پیش‌فرض با or
username = input("نام کاربری: ") or "مهمان"
print(f"خوش آمدید {username}")

شرط تک‌خطی (Ternary)

برای شرط‌های ساده، می‌توانید همه چیز را در یک خط بنویسید:

age = 20

# روش معمولی
if age >= 18:
    status = "بزرگسال"
else:
    status = "صغیر"

# روش ternary
status = "بزرگسال" if age >= 18 else "صغیر"

# مثال‌های دیگر
max_value = a if a > b else b
discount = 0.2 if is_member else 0.0
message = f"سلام {name}" if name else "سلام مهمان"

print(status)

match-case (Python 3.10+)

در نسخه‌های جدید پایتون، match-case برای الگوهای پیچیده اضافه شد:

command = input("دستور: ").lower()

match command:
    case "help" | "?":
        print("راهنما...")
    case "exit" | "quit":
        print("خروج...")
    case "list":
        print("نمایش لیست...")
    case _:    # _ یعنی default
        print("دستور ناشناس")

تطبیق ساختاری (Structural Matching)

def process_event(event):
    match event:
        case {"type": "login", "user": user}:
            print(f"ورود کاربر: {user}")
        case {"type": "logout", "user": user}:
            print(f"خروج کاربر: {user}")
        case {"type": "error", "code": int(code)} if code >= 500:
            print(f"خطای سرور: {code}")
        case _:
            print("رویداد ناشناس")

process_event({"type": "login", "user": "ali"})
process_event({"type": "error", "code": 503})

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

سن قانونی

age = int(input("سن: "))

if age < 0:
    print("سن نمی‌تواند منفی باشد")
elif age < 7:
    print("کودک")
elif age < 18:
    print("نوجوان")
elif age < 60:
    print("بزرگسال")
else:
    print("سالمند")

تخفیف فروشگاه

total = float(input("مبلغ خرید: "))
is_member = input("عضو هستید؟ (y/n): ").lower() == "y"

discount_rate = 0

if is_member:
    if total >= 1_000_000:
        discount_rate = 0.20
    elif total >= 500_000:
        discount_rate = 0.15
    else:
        discount_rate = 0.10
elif total >= 1_000_000:
    discount_rate = 0.05

discount = total * discount_rate
final = total - discount

print(f"تخفیف: {discount:,.0f} تومان")
print(f"مبلغ نهایی: {final:,.0f} تومان")

حدس عدد

import random

secret = random.randint(1, 10)
guess = int(input("یک عدد بین ۱ تا ۱۰ حدس بزنید: "))

if guess == secret:
    print("🎉 درست حدس زدید!")
elif abs(guess - secret) <= 2:
    print(f"نزدیک بود! عدد {secret} بود")
else:
    print(f"خیلی دور بود! عدد {secret} بود")

روز هفته

day = input("شماره روز (1-7): ")

match day:
    case "1": print("شنبه")
    case "2": print("یکشنبه")
    case "3": print("دوشنبه")
    case "4": print("سه‌شنبه")
    case "5": print("چهارشنبه")
    case "6": print("پنج‌شنبه")
    case "7": print("جمعه")
    case _: print("شماره نامعتبر")

تمرین فصل

🏋️ تمرین ۱ – بزرگ‌ترین عدد:

سه عدد از کاربر بگیرید و بزرگ‌ترین آن‌ها را چاپ کنید (بدون استفاده از max()).

🏋️ تمرین ۲ – سال کبیسه:

سال میلادی را بگیرید و بگویید کبیسه است یا نه. سال کبیسه: بر ۴ بخش‌پذیر باشد، اما اگر بر ۱۰۰ بخش‌پذیر است باید بر ۴۰۰ هم بخش‌پذیر باشد.

🏋️ تمرین ۳ – BMI:

قد (متر) و وزن (کیلوگرم) را بگیرید، شاخص توده بدنی (وزن / قد²) را محاسبه و وضعیت را گزارش دهید: کم‌وزن (<18.5)، نرمال (18.5-25)، اضافه‌وزن (25-30)، چاق (>30).

🏋️ تمرین ۴ – رمز قوی:

یک رمز عبور بگیرید و قدرت آن را با این معیارها بسنجید:

  • طول حداقل ۸ کاراکتر
  • شامل حرف بزرگ
  • شامل عدد

بر اساس تعداد معیارهای پاس شده: ضعیف، متوسط، قوی.

جمع‌بندی

در این فصل یاد گرفتیم:

  • ساختار if، if-else، if-elif-else
  • تورفتگی صحیح در پایتون
  • شرط‌های تو در تو و راه ساده‌سازی آن‌ها
  • مفهوم Truthy و Falsy
  • شرط تک‌خطی ternary
  • match-case جدید پایتون 3.10+

نمایش سایت

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

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