فهرست عناوین

موضوع قبلی

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

موضوع بعدی

21. خلاصه

20. نا...درست!

ریبرگ ناراحت است. باران و برف نمی بارد. با این همه او نمی‌تواند برود بیرون و برای مسابقهٔ دو با مانع تمرین کند. می‌پرسید چرا؟ چون ریبرگ منتظر است که شما «نه»ی پایتونی not را یاد بگیرید.

20.1. الآن وقت منفی بافیست

توی پایتون می‌توانیم چیزی که نادرست باشد را با نوشتن not True (نادرست) مشخّص کنیم که معادل همان غلط (False) است. به همین ترتیب، not False (غیرغلط) معادل True (درست) است.

20.2. خواهش می‌کنم ریبرگ را شاد کنید!

قبل‌تر برنامه‌ای نوشتید که کاری می‌کرد که ریبرگ از موانع بپرد. یک قسمت‌هایی از آن این طور بود:

def run_jump_or_finish ():
    if at_goal():
        # یک سری کار

    elif front_is_clear():
        #  یک سری کار

    else:
        #  یک سری کار

امتحان کنید!

با بازنویسی این برنامه در سه نسخه و انتخاب ترکیب‌های مختلفی از کلیدواژه نقیض (not) و ترکیب‌های مختلفی از گزاره‌های if/elif/else ریبرگ را خوشحال کنید.

بهتر است از قالب نمونه کد این زیر استفاده کنید. ولی به این که کلیدواژهٔ not کجا می‌آید و چه چیزی در هر قسمت از کد هست، بیشتر دقّت کنید.

#گزینهٔ اوّل:
def run_jump_or_finish ():
     if at_goal():
         # یک سری کار

     elif not front_is_clear():
         # یک سری کار

     else:
         # یک سری کار

# گزینهٔ دوم ... چالش برانگیزتر:
def run_jump_or_finish ():
     if not at_goal():
         if front_is_clear():
            # یک سری کار

         else:
            # یک سری کار

     else:
           # یک سری کار


# گزینهٔ سوم
def run_jump_or_finish ():
     if not at_goal():
         if not front_is_clear():
             # یک سری کار

         else:
             # یک سری کار

         else:
             # یک سری کار

20.3. یک گزینهٔ دیگر

همین الآن دیدید که بدون تغییر در هدف نهایی کد، چطور می‌شود ترتیبی که گزاره‌های شرطی قرار می‌گیرند را در یک تکّه‌کد if/elif/else تغییر داد. ‌برنامه‌نویس‌های مختلف معمولاً تدابیر متفاوتی برای رسیدن به نتیجهٔ یکسان به کار می‌برند. همچنین ‌برنامه‌نویس‌های مختلف با به کاربردن توابع مختلف، برنامه‌های متفاوت ولی با کاربری یکسانی را می‌نویسند.

تابع ()front_is_clear به ریبرگ می‌گوید که آیا چیزی راهش را بند آورده‌ یا نه. خروجی این تابع برای آب، دیوار آجری، پرچین و ... -که تا حالا ندیده‌ایم ولی در آینده می‌بینیم- یکسان است. برای تشخیص دیوار یک تابع ویژه هست که به آن ()wall_in_front می‌گویند. حدس زدن طرز کار کد آن را به عهدهٔ خودتان می‌گذارم.

امتحان کنید!

برنامه‌ای بنویسید که از ()wall_in_front به جای ()not front_is_clear استفاده کند.