پث‌وایز

شروع برنامه‌نویسی با پایتون (Intro to Python) · درس ۵ از ۱۲ · ۱۲ دقیقه

تصمیم‌گیری با 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 با همین‌ها تصمیم می‌گیره.

خودت رو امتحان کن

کدوم عملگر بررسی می‌کنه دو تا مقدار مساوی‌ان یا نه؟

  1. =
  2. ==
  3. !=
  4. =>
جواب رو ببین

==

درسته. == مقایسه می‌کنه و 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")
  1. mild
  2. hot
  3. cold
  4. mild
    cold
جواب رو ببین
mild

قدم‌به‌قدم ببین

  1. دو تا شرط و یه else، که از بالا بررسی می‌شن

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

  2. temp = 32: شرط اول True‌ـه

    با temp = 32، لوزی اول روشن می‌شه و خروجیش، با برچسب True، مستقیم می‌ره سمت "hot". شرط دوم و else کم‌رنگ می‌مونن: وقتی یه شاخه اجرا بشه، پایتون بقیه رو رد می‌کنه.

  3. temp = 18: اول False، بعد True

    با temp = 18، شرط اول False‌ـه، پس مسیر می‌ره پایین سراغ لوزی دوم. temp > 15 هم True‌ـه، و مسیر می‌پیچه سمت راست به "mild". یه شرط False فقط پایتون رو می‌فرسته سراغ شرط بعدی.

  4. 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 «قبول».

خودت رو امتحان کن

  1. score = 95
  2. if score >= 50:
  3. print("pass")
  4. elif score >= 90:
  5. 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:‌ـه. چی می‌شه؟

  1. if اجرا می‌شه، چون 20 از 17 بیشتره
  2. if رد می‌شه، چون "20" متنه
  3. برنامه با یه TypeError متوقف می‌شه
  4. پایتون خودش "20" رو به عدد تبدیل می‌کنه
جواب رو ببین

برنامه با یه TypeError متوقف می‌شه

درسته. age متن "20" رو داره، و پایتون متن رو با > با عدد مقایسه نمی‌کنه. نوشتن age = int(input("Age? ")) درستش می‌کنه.

مرور درس

  • مقایسه‌ها (==، !=، <، >، <=، >=) True یا False می‌دن؛ = نگه می‌داره، == مقایسه می‌کنه.
  • if test: خط‌های تورفته‌ش (۴ فاصله) رو فقط وقتی شرط True باشه اجرا می‌کنه؛ دونقطه لازمه.
  • پایتون if و بعد هر elif رو از بالا به پایین بررسی می‌کنه، فقط اولین شاخه‌ی True رو اجرا می‌کنه، و else بقیه رو می‌گیره.
  • ترتیب مهمه: سخت‌گیرترین شرط رو اول بذار، وگرنه 95 قبل از رسیدن به «عالی» «قبول» می‌گیره.
  • شرط‌ها رو با and و or و not ترکیب کن؛ متن رو دقیق مقایسه کن (از lower() استفاده کن)، و خروجی input() رو قبل از مقایسه با عدد تبدیل کن.

فقط نخونش، نگهش دار

پث‌وایز هر ایده رو درست قبل از اینکه فراموشش کنی با یه سؤال کوتاه برمی‌گردونه. رایگان روی اندروید و وب، به فارسی و انگلیسی.

Cafe Bazaar Myket باز کردن نسخه‌ی وب

همه‌ی درس‌های این دوره

  1. اولین برنامه‌ت (Your First Program)
  2. متغیرها: اسم برای مقدارها (Variables)
  3. رشته‌ها: کار با متن (Strings)
  4. ورودی و نوع داده‌ها (Input and Types)
  5. تصمیم‌گیری با if (Conditionals)
  6. لیست‌ها: کلی مقدار یه‌جا (Lists)
  7. حلقه‌ها: دوباره و دوباره (Loops)
  8. تابع‌ها: به یه کار اسم بده، دوباره استفاده‌ش کن (Functions)
  9. دیکشنری‌ها: پیدا کردن با اسم (Dictionaries)
  10. خوندن پیام‌های خطا (Reading Errors)
  11. ذخیره و خوندن فایل (Files)
  12. پروژه‌ی آخر: حساب خرج‌ها (Final Project)