Table of Contents
مقدمهٔ فصل
در فصلهای قبل یاد گرفتید که چطور متغیر بسازید، با انواع داده کار کنید و روی آنها عملیات انجام دهید. اما تقریباً هیچ برنامهٔ مفیدی فقط با انجام چند حساب ساده تمام نمیشود. برنامهها معمولاً باید «تصمیم بگیرند»؛ یعنی بسته به شرایط مختلف، رفتار متفاوتی داشته باشند.
در این فصل با «شرطها» در پایتون آشنا میشوید؛ یعنی سازوکاری که به کمک آن میتوانید بگویید:
- اگر فلان شرط برقرار بود، این کار را انجام بده
- در غیر این صورت، کار دیگری انجام بده
ابزار اصلی ما برای این کار دستورهای if, elif, else و عملگرهای مقایسهای و منطقی هستند.
در ادامهٔ فصل، هر بخش بهطور جداگانه توضیح داده میشود، ولی در این متن تصویری کلی و کاربردی از شرطها به شما میدهیم و مثالهای ساده میزنیم.
ایدهٔ اصلی شرطها
ایدهٔ شرطها بسیار شبیه تصمیمگیریهای روزمرهٔ ماست. مثلاً:
- اگر هوا بارانی است، چتر بردار.
- اگر پول کافی داری، بلیت سینما بخر؛ وگرنه در خانه فیلم ببین.
- اگر نمره بزرگتر یا مساوی ۱۰ است، «قبول»؛ در غیر این صورت، «مردود».
در برنامهنویسی، این «اگر»ها را با if و «در غیر این صورت» را با else میسازیم.
ساختار کلی یک شرط در پایتون:
if شرط:
کدِ وقتی که شرط برقرار استو اگر بخواهیم حالت «در غیر این صورت» هم داشته باشیم:
if شرط:
کد وقتی که شرط برقرار است
else:
کد وقتی که شرط برقرار نیستمثال ساده:
age = 20
if age >= 18:
print("شما بزرگسال هستید.")
else:
print("شما هنوز بزرگسال نیستید.")
اگر age مقدار ۲۰ داشته باشد، شرط age >= 18 برقرار است، پس پیام «شما بزرگسال هستید.» چاپ میشود.
بلوکهای کد و تورفتگی (indentation)
در مثال بالا متوجه شدید که خط print(...) زیر if عقبتر (تورفته) نوشته شده است. در پایتون، این فاصلهٔ ابتدای خط بسیار مهم است و «بلوک کد» را مشخص میکند؛ یعنی گروهی از دستورها که با هم و در یک شرایط اجرا میشوند.
قانون مهم:
- بعد از جملهٔ
ifوelseحتماً باید علامت:(دونقطه) بیاید. - خط(های) بعدی که قرار است داخل آن شرط اجرا شوند، باید با فاصله (معمولاً ۴ فاصلهٔ خالی) شروع شوند.
اشتباه رایج:
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("مردود")نکات مهم:
- شرطها از بالا به پایین بررسی میشوند.
- بهمحض اینکه یکی از شرطها
Trueشود، همان بلوک اجرا میشود و بقیهٔelifها دیگر بررسی نمیشوند. - بخش
elseاختیاری است، اما اگر باشد، همهٔ حالتهای باقیمانده را پوشش میدهد.
شرطهای تو در تو
گاهی یک تصمیم وابسته به تصمیم دیگری است. در این حالت از شرطهای تو در تو (nested) استفاده میکنیم، یعنی داخل یک بلوک if، یک if دیگر مینویسیم.
مثال:
میخواهیم برای ورود به یک سایت، هم سن مهم باشد، هم اینکه کاربر حساب کاربری تأییدشده داشته باشد.
age = 20
verified = True
if age >= 18:
if verified:
print("دسترسی کامل")
else:
print("لطفاً حساب خود را تأیید کنید.")
else:
print("شما به سن قانونی نرسیدهاید.")در این مثال:
- اول سن بررسی میشود.
- فقط اگر سن کافی باشد، به سراغ شرط دوم (تأیید حساب) میرویم.
هر بار که شرطی را تو در تو میکنید، تورفتگی یک سطح عمیقتر میشود. باید حواستان باشد که شلوغ شدن شرطهای تو در تو، خواندن کد را سخت میکند؛ در ادامهٔ یادگیری، راههایی برای سادهتر کردن آنها خواهید دید.
ترکیب چند شرط با عملگرهای منطقی
گاهی لازم است بیش از یک شرط بهطور همزمان بررسی شود، مثلاً:
- اگر سن بزرگتر از ۱۸ «و» کارت ملی دارد → اجازهٔ ثبتنام
- اگر شهر «تهران» «یا» «کرج» است → ارسال رایگان
در پایتون، برای چنین ترکیبهایی از عملگرهای منطقی استفاده میکنیم:
and→ هر دو شرط بایدTrueباشند.or→ کافی است حداقل یکی از شرطهاTrueباشد.not→ نتیجهٔ شرط را برعکس میکند.
نمونه:
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» از شکل کوتاهتر استفاده کنید:
if is_raining:if not is_raining:
ساخت تصمیمهای سادهٔ تعاملی
حالا میتوانیم از چیزهایی که تا اینجا یاد گرفتهایم، یک برنامهٔ تعاملی خیلی ساده بسازیم که رفتار آن به ورودی کاربر بستگی دارد.
نمونه: برنامهٔ سادهٔ بررسی سن قانونی رانندگی (فرض کنید حداقل سن رانندگی ۱۸ است).
(دربارهٔ تبدیل ورودی به عدد، در فصل «ورودی و خروجی کاربر» مفصلتر صحبت خواهد شد؛ اینجا فقط ایدهٔ شرط را میخواهیم.)
age_text = input("لطفاً سن خود را وارد کنید: ")
age = int(age_text) # تبدیل متن به عدد
if age >= 18:
print("میتوانید گواهینامه بگیرید.")
else:
print("هنوز نمیتوانید گواهینامه بگیرید.")
کل منطق اصلی این برنامه در شرط if age >= 18: خلاصه شده است.
اشتباهات رایج در شرطها
در بخش «اشتباهات رایج مبتدیان» فصل، موارد را دقیقتر میبینید، اما چند مورد از اشتباهات بسیار متداول هنگام کار با شرطها:
- استفاده از
=بهجای==در شرط
x = 10
if x = 5: # اشتباه → = برای انتساب است، نه مقایسه
print("x برابر ۵ است.")درست:
if x == 5:
print("x برابر ۵ است.")- فراموش کردن دونقطه
:
if x > 0
print("مثبت است") # اشتباه → بعد از if باید : بیایددرست:
if x > 0:
print("مثبت است")- بههمریختگی تورفتگیها
اگر فاصلههای ابتدای خطوط داخل بلوکها یکسان نباشند یا بهاشتباه جابهجا شوند، پایتون خطای تورفتگی میدهد، یا کد نتیجهٔ غیرمنتظره تولید میکند.
جمعبندی
در این فصل یاد گرفتید که:
- شرطها به برنامه اجازه میدهند «تصمیم بگیرد».
- با
if,elif,elseمیتوانید چند مسیر متفاوت برای اجرای برنامه تعریف کنید. - با عملگرهای مقایسهای، مقادیر را با هم مقایسه میکنید و نتیجهٔ آن یک مقدار بولی (
TrueیاFalse) است. - با عملگرهای منطقی
and,or,notمیتوانید چند شرط را با هم ترکیب کنید. - تورفتگی و
:برای تعریف بلوکهای شرطی در پایتون حیاتی هستند.
در زیربخشهای این فصل، هرکدام از این موضوعها (عملگرهای مقایسهای، عملگرهای منطقی، ساختار دقیق if / elif / else، شرطهای تو در تو و اشتباهات رایج) را با جزئیات، مثالهای بیشتر و تمرین بررسی میکنیم.