تصمیمگیری با if (Conditionals)
مقایسهها True یا False میدن، و if و elif و else باهاشون انتخاب میکنن کدوم خطها اجرا بشن. یاد میگیری چرا تورفتگی مهمه و چرا ترتیب شرطها جواب رو عوض میکنه.
مقایسهها
مقایسه True یا False میده
عملگرهای مقایسه دربارهی دو تا مقدار یه سؤال میپرسن و با یه bool جواب میدن: True یا False. == یعنی مساوی، != یعنی نامساوی، بعد < و > و <= و >=. حواست به فرق = و == باشه: یه مساوی مقدار رو نگه میداره، دو تا مساوی مقایسه میکنه. مقایسهی متن دقیقه، بزرگ و کوچیکی حروف هم حساب میشه.
5 > 3 میشه True، 5 == 3 میشه False، و "Yes" == "yes" میشه False چون Y و y دو تا کاراکتر متفاوتن.
print(5 > 3)
print(5 == 3)
print(5 != 3)
print("Yes" == "yes")True
False
True
Falseهر خط جواب یه سؤال بلهیانه رو چاپ میکنه. True و False توی پایتون مقدارهای واقعیان، با حرف بزرگ و بدون گیومه، و if با همینها تصمیم میگیره.
خودت رو امتحان کن
کدوم عملگر بررسی میکنه دو تا مقدار مساویان یا نه؟
- =
- ==
- !=
- =>
جواب رو ببین
==
درسته. == مقایسه میکنه و True یا False میده. یه = تنها مقدار رو نگه میداره، پس if x = 5: یه SyntaxErrorـه.
if و elif و else
خطهای تورفته فقط وقتی شرط True باشه اجرا میشن
بعد از if temp > 30: یه دونقطه میاد و بعد خطهایی که ۴ فاصله تورفتگی دارن؛ این خطها فقط وقتی اجرا میشن که شرط True باشه. elif (مخفف else if) یه شرط دیگه اضافه میکنه، و else: هر چیزی رو که هیچ شرطی باهاش جور نبوده میگیره. پایتون شرطها رو از بالا به پایین بررسی میکنه و فقط اولین شاخهای رو که True باشه اجرا میکنه، بقیه رو رد میکنه. اولین خطی که تورفتگی نداره هر بار اجرا میشه.
تورفتگی (indentation) تزئینی نیست: پایتون از روی همین میفهمه کدوم خط مال کدوم شاخهست.
temp = 32
if temp > 30:
print("گرم")
elif temp > 15:
print("معتدل")
else:
print("سرد")
print("تمام")گرم
تمامtemp برابر 32ـه، پس شرط اول Trueـه: «گرم» چاپ میشه و elif و else رد میشن. خط آخر تورفتگی نداره، پس «تمام» چاپ میشه، هر شاخهای که اجرا شده باشه. با 18 «معتدل» میگرفتی، و با 5 «سرد».
خودت رو امتحان کن
temp = 18
if temp > 30:
print("hot")
elif temp > 15:
print("mild")
else:
print("cold")mildhotcoldmild cold
جواب رو ببین
mildقدمبهقدم ببین

دو تا شرط و یه else، که از بالا بررسی میشن نمودار با یه جعبهی temp شروع میشه، بعد دو تا لوزی شرط،
temp > 30وtemp > 15، و پایینتر یه جعبهی else. هر کدوم یه خروجی بغل داره به چیزی که چاپ میکنه: "hot" یا "mild" یا "cold". هنوز هیچی روشن نیست: برنامه شرطها رو از بالا به پایین بررسی میکنه.
temp = 32: شرط اول Trueـه با temp = 32، لوزی اول روشن میشه و خروجیش، با برچسب True، مستقیم میره سمت "hot". شرط دوم و else کمرنگ میمونن: وقتی یه شاخه اجرا بشه، پایتون بقیه رو رد میکنه.

temp = 18: اول False، بعد True با temp = 18، شرط اول Falseـه، پس مسیر میره پایین سراغ لوزی دوم.
temp > 15هم Trueـه، و مسیر میپیچه سمت راست به "mild". یه شرط False فقط پایتون رو میفرسته سراغ شرط بعدی.
temp = 5: هر دو False، پس else اجرا میشه با temp = 5، هر دو لوزی False میگن و مسیر تا ته میره پایین به else، که "cold" رو روشن میکنه. else شرط مخصوص خودش رو نداره: هر مقداری رو که با هیچکدوم از شرطهای بالاش جور نبوده میگیره.
خودت رو امتحان کن
اگه هم شرط if و هم شرط یه elif هر دو True باشن، بلوک هر دوتاشون اجرا میشه.
جواب رو ببین
نادرست
غلطه. پایتون فقط اولین شاخهای رو که شرطش Trueـه اجرا میکنه و بقیهی اون زنجیرهی if/elif/else رو رد میکنه. با temp = 32، هم temp > 30 و هم temp > 15 هر دو Trueان، ولی فقط hot چاپ میشه.
ترتیب مهمه
سختگیرترین شرط رو اول بذار
چون فقط اولین شاخهی True اجرا میشه، ترتیب شرطهات جواب رو عوض میکنه. نمرهی 95 حداقل 50 هم هست، پس اگه score >= 50 اول بیاد، 95 «قبول» میگیره و هیچوقت به شرط «عالی» نمیرسه. محدودترین شرط رو بالا بذار و به سمت گستردهترین بیا پایین. برای ترکیب شرطها از and (هر دو باید True باشن)، or (حداقل یکی) و not (True و False رو برعکس میکنه) استفاده کن، مثل age >= 18 and has_ticket.
اگه اول score >= 90 و بعد score >= 50 رو بررسی کنی، 95 «عالی» میگیره و 60 «قبول».
خودت رو امتحان کن
score = 95if score >= 50:print("pass")elif score >= 90:print("excellent")
جواب رو ببین
اشکال توی خط ۲.
پیداش کردی. برنامه بدون خطا اجرا میشه ولی pass چاپ میکنه، چون 95 >= 50 همین الانش Trueـه و اولین شاخهی True برندهست. جای شرطها رو عوض کن تا score >= 90 اول بررسی بشه.
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("بفرمایید")
answer = "Yes"
if answer.lower() == "yes":
print("باشه")بفرمایید
باشهif اول هر دو شرط رو لازم داره، و هر دو Trueان. دومی یه عادت خوب رو نشون میده: مقایسهی متن دقیقه، پس lower() قبل از مقایسه Yes رو میکنه yes، و شرط کار میکنه چه کاربر Yes تایپ کرده باشه، چه YES، چه yes.
خودت رو امتحان کن
امید مینویسه age = input("Age? ")، عدد 20 رو تایپ میکنه، و خط بعدی if age > 17:ـه. چی میشه؟
- if اجرا میشه، چون 20 از 17 بیشتره
- if رد میشه، چون "20" متنه
- برنامه با یه TypeError متوقف میشه
- پایتون خودش "20" رو به عدد تبدیل میکنه
جواب رو ببین
برنامه با یه TypeError متوقف میشه
درسته. age متن "20" رو داره، و پایتون متن رو با > با عدد مقایسه نمیکنه. نوشتن age = int(input("Age? ")) درستش میکنه.
مرور درس
- مقایسهها (==، !=، <، >، <=، >=) True یا False میدن؛ = نگه میداره، == مقایسه میکنه.
if test:خطهای تورفتهش (۴ فاصله) رو فقط وقتی شرط True باشه اجرا میکنه؛ دونقطه لازمه.- پایتون if و بعد هر elif رو از بالا به پایین بررسی میکنه، فقط اولین شاخهی True رو اجرا میکنه، و else بقیه رو میگیره.
- ترتیب مهمه: سختگیرترین شرط رو اول بذار، وگرنه 95 قبل از رسیدن به «عالی» «قبول» میگیره.
- شرطها رو با and و or و not ترکیب کن؛ متن رو دقیق مقایسه کن (از lower() استفاده کن)، و خروجی input() رو قبل از مقایسه با عدد تبدیل کن.