فهرست عناوین

موضوع قبلی

17. به دنبال یک جای خوب

موضوع بعدی

19. باز هم پرش از مانع!

18. بهم گوش کن ... وگرنه ...

‌برنامه‌نویسی می‌تواند جالب باشد ولی شما نباید همهٔ وقت خود را پشت رایانه بگذرانید. اگر(if) باران می‌بارد؛ به خواندن ادامه بدهید، وگرنه؛ بروید بیرون و بازی کنید. (بله، حتی شما بابا بزرگ!)

18.1. بر سر دو راهی...

بیاید از روی جمله‌های قبلی جمله‌هایی درست کنیم که با گزاره‌های اگر(if) شروع می‌شوند:

if it rains: #اگر باران می‌بارد،
    continue #به خواندن ادامه بده،
elif: #وگرنه،
    exit #برو بیرون و بازی کن.

که اگر بخواهیم همین دستورها را به صورت شِبْه‌ِ کد انگلیسی بنویسیم، این طور می‌شود:

if it rains,
    keep reading,
otherwise,
    go outside and play

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

if it_rains():
    keep_reading()
else:
    go_outside_and_play()

بله! پایتون امکان ارائهٔ بیشتر از یک گزینه را با کلیدواژهٔ else فراهم می‌کند. بهٔک مثال دیگر نگاه کنیم. ریبرگ می‌تواند نگاه کند و ببیند آیا دیواری رو به رویش هست، یا نه. محیط همین دور و بر ۱ را در نظر بگیرید. برای نوشتن برنامه، شما باید یک تابع جدید را برای بررسی خالی بودن رو به روی ریبرگ ()front_is_clear (رو به رو خالیه؟) به کار ببرید . ریبرگ از این تابع به همراه گزاره‌های شرطی if/else استفاده می‌کند، تا بررسی کند رو به رویش مانع هست، یا نه. با اسفتاده از این‌ها شما برنامه‌ای می‌نویسید که ریبرگ را در محیط هدایت می‌کند. چیزی مثل این:

def move_or_turn ():
    if front_is_clear():
        # something
    else:
        # something else

repeat 40:
    move_or_turn()

امتحان کنید!

با استفاده از کد بالا برنامه‌ای بنویسید که ریبرگ با آن در محیط همین دور و بر ۱ بچرخد. آیا می‌توانید برنامه را -با اضافه کردن یک سطر کد- طوری تغییر بدهید که بعد از پایان ریبرگ یک نشانه در هر گوشهٔ محیط بگذارد؟

18.2. چطور فرآیند گزارهٔ if/else را بفهمیم؟

تا حالا دیدیم که گزاره‌های def و if را می‌شود (گاهی) معادل جا زدن آن تکّه‌کد در نظر گرفت. حالت استثناء موقعی بود که شرط گزارهٔ if غلط (False) بود؛ که در آن صورت همان قسمت از کد را نادیده می‌گرفتیم. این کار تقریباً معادل حذف آن قسمت از کد بود. گزاره‌های if/else را می‌شود معادل انتخاب بین گذاشتن یک تکّه‌کد و یا یک تکّه‌کد دیگر در نظر گرفت. بنابراین:

move()
if True:
    turn_right()
else:
    turn_left()
move()

معادل این کد است:

move()
turn_right()
move()

در حالی که این کد:

move()
if False:
    turn_right()
else:
    turn_left()
move()

معادل این یکیست:

move()
turn_left()
move()

می‌توانیم این کدها را به صورت این روندنما نشان بدهیم:

../../_images/else.png