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


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

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

if Conditions:
    Block/Blocks of Code

همان طور که می بینید، یک دستور شرطی ساده با کیورد if به معنای "اگر" آغاز می شود. وقتی مفسر پایتون به کیورد if می رسد، می فهمد که باید تصمیم گیری انجام دهد. بنابراین در ادامه ی دستور if به دنبال یک شرط می گردد. این شرط برای این است که مفسر بداند چه نوع مقایسه ای باید انجام دهد. پس از نوشتن شرط مورد نظر باید علامت : درج شود تا سربند این دستور مرکب به پایان برسد. حال باید بدنه ی دستور if را مانند هر دستور مرکب دیگر، با رعایت تورفتگی در یک بلوک مجزا در زیر بلوک سربند قرار دهیم. در صورتی که شرط if برقرار باشد، دستوراتی که در این بدنه قرار می گیرند اجرا خواهند شد. برای مثال برنامه ی زیر را که در فایل ifStatement.py ذخیره کرده ایم در نظر بگیرید:

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

در این برنامه از کاربر که فرضاً یک فروشنده است درخواست می شود تا قیمت یک کالا را اعلام کند. ورودی کاربر با استفاده از متد ()input گرفته می شود و با استفاده از متد ()int تبدیل به یک عدد صحیح می شود و متغیری با شناسه ی price به آن منتسب می شود. در ادامه، مفسر پایتون شرط دستور if را بررسی می کند. برای مثال در این جا ارزیابی به این صورت است که آیا مقدار ارجاع داده شده به متغیر price کم تر از 100000 است یا خیر. در صورتی که نتیجه ی این دستور مقایسه ای درست باشد، دستور داخل بدنه ی if اجرا خواهد شد، اما در صورت نادرست بودن شرط if، یعنی در شرایطی که عدد وارد شده از سوی فروشنده بیش تر از 100000 باشد، مفسر پایتون وارد بدنه ی آن نخواهد شد و دستورات بدنه ی if هرگز اجرا نخواهد شد!

همان طور که در مثال بالا دیدید، زمانی که مفسر پایتون به یک دستور شرطی if می رسد درست بودن عبارت جلوی آن را بررسی می کند، و در صورتی که نتیجه ی آن درست یا معادل True باشد وارد بدنه ی دستور if می شود. حال دستور زیر را در نظر بگیرید:

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

در صورت اجرای این دستور، چون عبارت جلوی if همواره مقدار True دارد (قبلاً گفتیم که مفسر پایتون تمام اعداد به جز 0 را برابر با مقدار بولین True و عدد 0 یا 0.0 را برابر با مقدار بولین False ارزیابی می کند)، این شرط همواره برقرار است و دستور داخل بدنه ی آن همیشه اجرا می شود. البته کد بالا را می توان به صورت زیر هم نوشت که باز هم این شرط همواره برقرار است:

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 در زبان برنامه نویسی Python، پیش از پایان این بخش می خواهیم یک برنامه ی کوچک نوشته و در آن در دستورات شرطی 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!")

اسکریپت این برنامه را در فایل nestedIf.py ذخیره می کنیم. همان طور که می بینید در این برنامه ابتدا دستور شرطی if اول -یعنی if خارجی- بررسی می شود. در صورتی که سن وارد شده بیش تر از یا برابر با 20 باشد، مفسر پایتون دستورات مرتبط با این if را اجرا می کند. حال این دستورات عبارتند از یک دستور شرطی if دیگر. در صورتی که مقدار شرط این دستور if دوم -یا بهتر بگوییم دستور if داخلی- درست باشد، یعنی سن کاربر کم تر از 30 باشد، مفسر پایتون وارد بدنه ی دستور if دوم شده و دستورات پرینت داخل آن را اجرا می کند که عبارتند از چاپ عبارت های You`re in your twenties و !Enjoy it که به ترتیب به معنی «شما در دهه سوم زندگی خود به سر می برید،» و «حالشو ببر!» می باشند. توجه داشته باشید که اگر هر کدام از این شرط ها اصطلاحا True نباشند، برنامه ی ما هیچ نوع خروجی نخواهد داشت!

همان طور که گفتیم این برنامه را می توانیم به شکلی دیگر و تنها با یک دستور if بنویسیم. در این صورت لازم است دو شرط را با هم ترکیب کنیم. اسکریپت این برنامه به صورت زیر است که آن را در فایل CombinedConditions.py ذخیره می کنیم:

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

همان طور که می بینید در این جا از عملگر بولین and استفاده کرده ایم و با ترکیب شرط ها، دستور if داخلی را حذف کردیم. خروجی حاصل از اجرای دو برنامه تفاوتی نخواهند داشت. برای مثال یک نمونه از خروجی این برنامه به صورت زیر است:

Please enter your age-->25
You're in your twenties,
Enjoy it!
>>>
به خاطر داشته باشید
یکی از چیزهایی که برنامه نویسان و توسعه دهندگان حرفه ای را از مبتدیان متمایز می سازد، کدهای بهینه است. ما به عنوان یک برنامه نویس حرفه ای، همواره می بایست تمام تلاش خود را به کار بندیم تا با تعداد خطوط کد کمتری، به هدفی واحدی دست یابیم. آشنایی با راه کارهای کوتاه کردن کد و بهینه سازی سورس کد، یکی از چیزهایی است که در دراز مدت می تواند شما را آماده ی ورود به جمع برنامه نویسان حرفه ای کند. لذا، به نظر می رسد که استفاده از راه کار دوم به مراتب بهتر از به کارگیری از دو دستور شرطی if در داخل یکدیگر باشد.
دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
سلام ببخشید برابر نباشد رو جا ب جا زدید(=!)
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