Kahibaro
Discord Login Register

فصل ۶: شرط‌ها (if / else)

مقدمهٔ فصل

در فصل‌های قبل یاد گرفتید که چطور متغیر بسازید، با انواع داده کار کنید و روی آن‌ها عملیات انجام دهید. اما تقریباً هیچ برنامهٔ مفیدی فقط با انجام چند حساب ساده تمام نمی‌شود. برنامه‌ها معمولاً باید «تصمیم بگیرند»؛ یعنی بسته به شرایط مختلف، رفتار متفاوتی داشته باشند.

در این فصل با «شرط‌ها» در پایتون آشنا می‌شوید؛ یعنی سازوکاری که به کمک آن می‌توانید بگویید:

ابزار اصلی ما برای این کار دستورهای if, elif, else و عملگرهای مقایسه‌ای و منطقی هستند.

در ادامهٔ فصل، هر بخش به‌طور جداگانه توضیح داده می‌شود، ولی در این متن تصویری کلی و کاربردی از شرط‌ها به شما می‌دهیم و مثال‌های ساده می‌زنیم.

ایدهٔ اصلی شرط‌ها

ایدهٔ شرط‌ها بسیار شبیه تصمیم‌گیری‌های روزمرهٔ ماست. مثلاً:

در برنامه‌نویسی، این «اگر»ها را با if و «در غیر این صورت» را با else می‌سازیم.

ساختار کلی یک شرط در پایتون:

if شرط:
    کدِ وقتی که شرط برقرار است

و اگر بخواهیم حالت «در غیر این صورت» هم داشته باشیم:

if شرط:
    کد وقتی که شرط برقرار است
else:
    کد وقتی که شرط برقرار نیست

مثال ساده:

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

اگر age مقدار ۲۰ داشته باشد، شرط age >= 18 برقرار است، پس پیام «شما بزرگسال هستید.» چاپ می‌شود.

بلوک‌های کد و تورفتگی (indentation)

در مثال بالا متوجه شدید که خط print(...) زیر if عقب‌تر (تورفته) نوشته شده است. در پایتون، این فاصلهٔ ابتدای خط بسیار مهم است و «بلوک کد» را مشخص می‌کند؛ یعنی گروهی از دستورها که با هم و در یک شرایط اجرا می‌شوند.

قانون مهم:

اشتباه رایج:

age = 20
if age >= 18:
print("بزرگسال")   # این خط تورفتگی ندارد → خطا می‌دهد

پایتون در این حالت معمولاً خطای IndentationError می‌دهد.

نسخهٔ درست:

age = 20
if age >= 18:
    print("بزرگسال")

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

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

هر دو خط داخل بلوک if قرار دارند، چون هر دو با تورفتگی یکسان نوشته شده‌اند.

تصمیم‌گیری بر اساس مقایسه‌ها

معمولاً شرط‌ها بر اساس «مقایسه»ی مقادیر نوشته می‌شوند: بزرگ‌تر، کوچک‌تر، برابر بودن و ...

مثال‌ها:

نمونه کد:

temperature = 35
if temperature > 30:
    print("هوا گرم است.")

در این مثال از عملگر > (بزرگ‌تر) استفاده شده است. فهرست کامل عملگرها در بخش «عملگرهای مقایسه‌ای» فصل توضیح داده می‌شود، اما چند نمونهٔ پرکاربرد:

به‌طور خلاصه، نتیجهٔ یک مقایسه همیشه یک مقدار بولی است: True یا False. بر اساس این مقدار است که if تصمیم می‌گیرد بلوک را اجرا بکند یا نه.

چند شاخهٔ تصمیم‌گیری با `elif`

گاهی بیش از دو حالت دارید، مثلاً:

می‌توانیم از چند if پشت سر هم استفاده کنیم، اما راه مرتب‌تر استفاده از elif است (ترکیبی از else if):

score = 15
if score >= 17:
    print("عالی")
elif score >= 14:
    print("خوب")
elif score >= 10:
    print("قبول")
else:
    print("مردود")

نکات مهم:

شرط‌های تو در تو

گاهی یک تصمیم وابسته به تصمیم دیگری است. در این حالت از شرط‌های تو در تو (nested) استفاده می‌کنیم، یعنی داخل یک بلوک if، یک if دیگر می‌نویسیم.

مثال:
می‌خواهیم برای ورود به یک سایت، هم سن مهم باشد، هم این‌که کاربر حساب کاربری تأیید‌شده داشته باشد.

age = 20
verified = True
if age >= 18:
    if verified:
        print("دسترسی کامل")
    else:
        print("لطفاً حساب خود را تأیید کنید.")
else:
    print("شما به سن قانونی نرسیده‌اید.")

در این مثال:

هر بار که شرطی را تو در تو می‌کنید، تورفتگی یک سطح عمیق‌تر می‌شود. باید حواس‌تان باشد که شلوغ شدن شرط‌های تو در تو، خواندن کد را سخت می‌کند؛ در ادامهٔ یادگیری، راه‌هایی برای ساده‌تر کردن آن‌ها خواهید دید.

ترکیب چند شرط با عملگرهای منطقی

گاهی لازم است بیش از یک شرط به‌طور هم‌زمان بررسی شود، مثلاً:

در پایتون، برای چنین ترکیب‌هایی از عملگرهای منطقی استفاده می‌کنیم:

نمونه:

age = 22
has_id = True
if age >= 18 and has_id:
    print("اجازهٔ ورود دارید.")
else:
    print("اجازهٔ ورود ندارید.")

یا:

city = "Tehran"
if city == "Tehran" or city == "Karaj":
    print("ارسال رایگان")
else:
    print("هزینهٔ ارسال محاسبه می‌شود.")

و not:

logged_in = False
if not logged_in:
    print("ابتدا وارد حساب کاربری شوید.")

این عملگرها کنار عملگرهای مقایسه‌ای، ابزار اصلی ساخت شرط‌های پیچیده‌تر هستند.

شرط‌ها و مقدارهای بولی

در فصل متغیرها آموختید که نوع bool فقط دو مقدار دارد: True و False. یک if دقیقاً بر اساس همین دو مقدار کار می‌کند:

is_raining = True
if is_raining:
    print("چتر همراه‌تان ببرید.")

در اینجا در واقع پایتون پشت‌صحنه دارد چک می‌کند که is_raining == True است یا نه، ولی شکل کوتاه و رایج آن همان نوشتن نام متغیر است.

گاهی برای شفافیت بیشتر، شرط را کامل می‌نویسیم:

if is_raining == True:
    ...

ولی توصیهٔ رایج این است که برای «برابر با True» یا «برابر با False» از شکل کوتاه‌تر استفاده کنید:

ساخت تصمیم‌های سادهٔ تعاملی

حالا می‌توانیم از چیزهایی که تا اینجا یاد گرفته‌ایم، یک برنامهٔ تعاملی خیلی ساده بسازیم که رفتار آن به ورودی کاربر بستگی دارد.

نمونه: برنامهٔ سادهٔ بررسی سن قانونی رانندگی (فرض کنید حداقل سن رانندگی ۱۸ است).
(دربارهٔ تبدیل ورودی به عدد، در فصل «ورودی و خروجی کاربر» مفصل‌تر صحبت خواهد شد؛ اینجا فقط ایدهٔ شرط را می‌خواهیم.)

age_text = input("لطفاً سن خود را وارد کنید: ")
age = int(age_text)  # تبدیل متن به عدد
if age >= 18:
    print("می‌توانید گواهینامه بگیرید.")
else:
    print("هنوز نمی‌توانید گواهینامه بگیرید.")

کل منطق اصلی این برنامه در شرط if age >= 18: خلاصه شده است.

اشتباهات رایج در شرط‌ها

در بخش «اشتباهات رایج مبتدیان» فصل، موارد را دقیق‌تر می‌بینید، اما چند مورد از اشتباهات بسیار متداول هنگام کار با شرط‌ها:

  1. استفاده از = به‌جای == در شرط
x = 10
if x = 5:       # اشتباه → = برای انتساب است، نه مقایسه
    print("x برابر ۵ است.")

درست:

if x == 5:
    print("x برابر ۵ است.")
  1. فراموش کردن دو‌نقطه :
if x > 0
    print("مثبت است")  # اشتباه → بعد از if باید : بیاید

درست:

if x > 0:
    print("مثبت است")
  1. به‌هم‌ریختگی تورفتگی‌ها

اگر فاصله‌های ابتدای خطوط داخل بلوک‌ها یکسان نباشند یا به‌اشتباه جابه‌جا شوند، پایتون خطای تورفتگی می‌دهد، یا کد نتیجهٔ غیرمنتظره تولید می‌کند.

جمع‌بندی

در این فصل یاد گرفتید که:

در زیربخش‌های این فصل، هرکدام از این موضوع‌ها (عملگرهای مقایسه‌ای، عملگرهای منطقی، ساختار دقیق if / elif / else، شرط‌های تو در تو و اشتباهات رایج) را با جزئیات، مثال‌های بیشتر و تمرین بررسی می‌کنیم.

Views: 7

Comments

Please login to add a comment.

Don't have an account? Register now!