آشنایی با دستور if در زبان برنامه‌نویسی پایتون


ساده‌ترین روش برای تصمیم‌گیری در زبان پایتون استفاده از دستور شرطی است و با به‌کارگیری آن می‌توانیم به مفسر پایتون بگوییم که در صورت برقرار بودن یک شرط و درست بودن آن دستورات داخل بدنۀ if را اجرا کند که در همین راستا در این آموزش با نحوۀ پیاده‌سازی دستورات شرطی در زبان برنامه‌نویسی پایتون آشنا خواهیم شد.

در واقع، درک چگونگی تصمیم‌گیری مفسر پایتون با استفاده از دستورات شرطی بسیار ساده است چرا که ما هم در طول روز تصمیم‌هایی بر همین اساس می‌گیریم که برای مثال می‌توان به مواردی از این دست اشاره کرد:

- اگر هوا سرد بود لباس گرم می‌پوشم.
- اگر تشنه شوم آب می‌نوشم.

 بدیهی است که اگر هر یک از شرایط مذکور برقرار نباشند، کارهای مد نظر نیز انجام نخواهند شد. برای پیاده‌سازی دستور if در پایتون نیز از همین الگو پیروی می‌کنیم و فرم کلی آن بدین صورت می‌باشد:

if conditions:
    # block/blocks of code

همان‌طور که می‌بینید، یک دستور شرطی ساده با کیورد if به معنای «اگر» آغاز می‌شود و مفسر پایتون با رسیدن به این کیورد تصمیم‌گیری می‌کند که از همین روی در ادامۀ دستور if به دنبال شرط مد نظر می‌گردد. در ادامه و پس از نوشتن شرط مورد نظر علامت : درج می‌گردد و بدین ترتیب هِدِر این دستور مرکب به پایان می‌رسد. حال نوبت به بدنۀ دستور if می‌رسد که همچون هر دستور مرکب دیگری با رعایت تورفتگی نسبت به بلوک هِدِر نوشته می‌شود و در صورتی که شرط if برقرار باشد دستورات داخل بدنه اجرا می‌شوند. برای مثال، کد زیر را مد نظر قرار می‌دهیم:

price = int(input("How much does it cost?"))
if price <= 100000:
    print("I want it.")

در برنامۀ فوق متغیری با شناسۀ price تعریف کرده‌ایم که قیمت مربوط به کالای مد نظر را نگهداری می‌کند به طوری که با استفاده از متد ()input قیمت کالا را از ورودی گرفته و با فانکشن ()int آن را به عدد صحیح تبدیل می‌کند و در ادامه مفسر پایتون بررسی می‌کند که اگر مقدار ارجاع داده‌شده به متغیر price (قیمت ورودی) کوچک‌تر یا مساوی 100/000 بود، دستور داخل بدنۀ if اجرا شده و استرینگ «.I want it» در خروجی چاپ شود و در غیر این صورت، دستورات داخل بدنۀ if هرگز اجرا نمی‌شوند.

کد فوق را در فایلی به نام ifStatement.py ذخیره کرده و آن را اجرا می‌کنیم و با وارد کردن مقداری بزرگ‌تر از عدد 100/000 دستورات بدنۀ if اجرا نشده و هیچ مقداری در خروجی نخواهیم داشت اما این در حالی است که با دادن مقداری کمتر یا مساوی عدد 100/000 استرینگ زیر را به عنوان خروجی خواهیم داشت:

How much does it cost? 20000
I want it.

در واقع، با وارد کردن عدد 20/000 شرط برقرار شده و در ادامه دستور بدنۀ آن اجرا می‌شود که منجر به چاپ استرینگ فوق در خروجی گردیده است.

همان‌طور که در مثال قبل دیدیم، مفسر پایتون با رسیدن به یک دستور if درست بودن عبارت مقابل آن را بررسی می‌کند و در صورتی که شرط مذکور مقدار بولینی معادل True شود، وارد بدنۀ if شده و دستورات داخل آن را اجرا می‌کند که برای درک بهتر این موضوع مثال دیگری را به صورت زیر در نظر می‌گیریم:

if 1:
    print("1 equals True.")

همان‌طور که در آموزش‌های قبل اشاره کردیم، تمامی اعداد به جز 0 یا 0.0 با مقدار بولینی معادل True ارزیابی می‌شوند و از همین روی شرط مقابل دستور if همواره برقرار بوده و مقدار بولین True دارد و از همین روی دستور داخل بدنۀ آن همواره اجرا می‌شود که البته کد بالا را می‌توان به صورت زیر بازنویسی کرد که باز هم این شرط همواره برقرار است:

if 1 == True:
    print("1 equals True.")

طبق توضیحات ارائه‌شده بدیهی است که بازنویسی دستور شرطی به صورت زیر منجر بدین می‌شود تا دستور داخل بدنۀ آن هرگز اجرا نگردد:

if 0:
    print("0 equals False")

علاوه بر قرار دادن مقادیر بولین در جلوی کیورد if امکان استفاده از عملگرهای مقایسه‌ای همچون اپراتورهای == و =! یا سایر عملگرهای مقایسه‌ای از جمله > و < نیز جلوی این دستور شرطی برای دولوپرها فراهم شده است.

نکته
مسئلهٔ قابل‌توجه اینکه بسیاری از دولوپرهای مبتدی عملگر انتساب = را اشتباهاً به جای عملگر == (تساوی) مورد استفاده قرار می‌دهند. در واقع، عملگر تساوی به مقایسۀ تساوی مقدار و نوع دو عملوند می‌پردازد اما این در حالی است که عملگر انتساب به منظور انتساب شیئِ سمت راست عملگر به متغیری در سمت چپ آن به کار گرفته می‌شود.

علاوه بر اپراتورهای مقایسه‌ای می‌توانیم از عملگرهای بولینی نیز برای مقایسۀ مقادیر بولین استفاده کنیم که این نوع عملگرها همچون اپراتورهای مقایسه‌ای در نهایت یک مقدار بولین True یا False را برمی‌گردانند که در ادامه به بررسی چند مورد از آن‌ها می‌پردازیم.

عملگر and
این عملگر دو عملوند در سمت چپ و راست خود می‌گیرد و در صورتی مقدار بولین True را در خروجی برمی‌گرداند که مقدار هر دو عملوند برابر با مقدار بولین True ارزیابی شود اما در صورتی که حداقل یکی از دو عملوند برابر با مقدار بولین False ارزیابی شود، عملگر مقدار False را برمی‌گرداند که این نکات را به طور خلاصه در قالب جدول زیر آورده‌ایم:

نتیجه عبارت
True True and True
False True and False
False False and True
False False and False

عملگر  or
این عملگر نیز مانند and دو عملوند در سمت چپ و راست خود می‌گیرد با این تفاوت که اگر حداقل مقدار یکی از دو عملوند سمت چپ و راست برابر با مقدار بولین True ارزیابی شود، مقدار بولین True را در خروجی برمی‌گرداند و تنها در صورتی مقدار False را برمی‌گرداند که هر دو عملوند آن برابر با مقدار بولین False ارزیابی شوند که این نکات را به طور خلاصه در قالب جدول زیر آورده‌ایم:

نتیجه عبارت
True True or True
True True or False
True False or True
False False or False

عملگر  not
بر خلاف عملگرهای and و or این عملگر یک عملوند می‌گیرد و تنها کاری که not انجام می‌دهد این است که مقدار بولینی مخالف مقدار ارزیابی‌شده برای عملوند خود را ریترن می‌کند به طوری که ارزیابی این عملگر را می‌توان به صورت زیر خلاصه کرد:

نتیجه عبارت
False not True
True not False

عملگر not را می‌توانیم به صورت پشت‌سرهم نیز بیاوریم به طوری که مثلاً خواهیم داشت:

>>> not not not not True
True

توجه داشته باشیم که عملوندهای این عملگرها می‌توانند هر دستوری با مقدار ارزیابی‌شده به صورت بولین باشند که برای مثال دستورات زیر را می‌توانیم در نظر بگیریم:

>>> (3 > 4) or (5 > 4)
True
>>> (4 < 5) and (5 < 6)
True
>>> not "a" == "A"
True

پیش از پایان آموزش و به منظور درک بهتر دستورات if در زبان برنامه‌نویسی پایتون یک مثال کاربردی در ادامه پیاده‌سازی کرده‌ایم که در آن گفته‌ایم اگر مقدار سن کاربر بین 20 تا 29 سال بود یکسری پیغام در خروجی برای کاربر نمایش داده شود و در غیر این صورت هیچ کاری انجام نشود. این برنامه را به دو شکل می‌نویسیم که در حالت اول از شرط‌های تودرتو برای پیاده‌سازی استفاده کرده‌ایم:

age = int(input("Please enter your age-->"))
if age >= 20:
    if age < 30:
        print("You're in your twenties,")
        print("Enjoy it!")

در کد فوق، متغیری با شناسۀ age تعریف کرده‌ایم که عدد ورودی از سمت کاربر در آن نگهداری می‌شود و در دستور شرطی اول گفته‌ایم که چنانچه مقدار منتسب به متغیر age بزرگ‌تر یا مساوی عدد 20 بود، دستور شرطی دوم چک شود و در صورتی که دستور شرطی دوم نیز برقرار بوده و عدد ورودی کاربر مابین 20 و 30 باشد، بدنۀ داخلی دستور شرطی دوم اجرا شده و دو استرینگ مربوطه در خروجی چاپ می‌شوند و توجه داشته باشیم که اگر هر یک از دو شرط فوق اصطلاحاً True نباشند، برنامۀ ما هیچ نوع خروجی نخواهد داشت.

حال اسکریپت این برنامه را در فایلی به نام nestedIf.py ذخیره کرده و آن را اجرا می‌کنیم و همان‌طور که اشاره کردیم، در صورتی که عدد ورودی خارج از بازۀ اعداد 20 تا 30 قرار داشته باشد، برنامه هیچ خروجی نخواهد داشت اما با وارد کردن عددی در بازۀ مذکور، خروجی برنامه به صورت زیر خواهد بود:

Please enter your age-->27
You're in your twenties,
Enjoy it!

همان‌طور که ملاحظه می‌شود، عددی در بازۀ 20 تا 30 وارد کرده‌ایم و بدین ترتیب دستورات بدنۀ شرط اول اجرا شده و دستور شرط داخلی نیز برقرار بوده و از همین روی دستورات بدنۀ آن اجرا می‌شود که در نهایت استرینگ‌های مربوطه در خروجی چاپ می‌شوند.

به خاطر داشته باشید
یکی از مهارت‌هایی که برنامه‌نویسان حرفه‌ای را از مبتدی‌ها متمایز می‌سازد کدنویسی به صورت بهینه است به طوری که برنامه‌نویسان حرفه‌ای همواره باید سعی کنند تا تسک‌های مد نظر خود را با تعداد خطوط کد کمتری پیاده‌سازی کنند. در واقع، آشنایی با راه‌کارهای بهینه‌سازی و کوتاه کردن سورس‌کد یکی از قابلیت‌هایی است که در درازمدت منجر به تقویت مهارت‌های کدنویسی در برنامه‌نویسان می‌گردد.

حال اگر بخواهیم برنامۀ فوق را با استفاده از تنها یک دستور شرطی پیاده‌سازی کنیم، لازم است تا کد مثال قبل بدین صورت تغییر دهیم:

age = int(input("Please enter your age-->"))
if age >= 20 and age < 30:
        print("You're in your twenties,")
        print("Enjoy it!")

همان‌طور که می‌بینید، دو دستور شرطی مربوط به مثال قبل را با استفاده از اپراتور بولینی and با هم ترکیب کرده و در یک سطر نوشته‌ایم. اسکریپت فوق را در فایلی به نام CombinedConditions.py ذخیره کرده و آن را اجرا می‌کنیم که خروجی حاصل از اجرای دو برنامه نیز با یکدیگر تفاوتی ندارند اما بر اساس آنچه که در نکات بالا اشاره کردیم، به نظر می‌رسد که استفاده از راه‌کار دوم به مراتب بهتر از به‌کارگیری دو دستور شرطی تودرتو باشد و یکی از چندین راه‌کاری است که در نهایت منجر به شکل‌گیری مهارت‌های کدنویسی حرفه‌ای در افراد می‌گردند.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
Mrj
Mrj
۱۳۹۵/۰۶/۱۶
ببخشید نظر قبلیم خیلی واضح نبود.
اونجا من int رو حذف کردم و بجاش عدد 100000 رو بهش "(دابل کوتیشن) اضاف کردم.
حالا میخوام بدونم چه ضرورتی داره از int استفاده کنیم در حالی که میشه با استفاده از کد های کمتر به همان نتیجه دست یافت.
با تشکر
Mrj
Mrj
۱۳۹۵/۰۶/۱۶
با سلام.
اگر کدی را که نوشته اید،به اینصورت ویرایش کنیم

price = input("How much does it cost?...")
if price <= "100000":
print("I want it.")

باز هم کد درست کار خواهد کرد پس چه لزومی دارد از دستور int استفاده کنیم که کد را طولانی تر خواهد کرد؟؟
با تشکر.
amingar
amingar
۱۳۹۵/۰۳/۲۳
چرا دستور If رو کامل توضیح نداده اید ؟ منظور قسمت های elif و else است
کاربر میهمان
نجفیمن یک کاربر مهمان هستم
۱۳۹۴/۱۱/۰۹
سلام این ارور چیه؟
if 1:
... print("1 equals true".)
File "", line 2
print("1 equals true".)
^
IndentationError: expected an indented block