مبحثی که در این درس به آن اشاره خواهیم کرد، دستورات شرطی در پایتون است که بسیار ارزشمند و پر کاربرد است. با ما همراه باشید. پیشنهاد میکنیم پیش از مطالعهی این درس، مقالهی نگاهی کلی به مقدمات پایتون را مطالعه کنید.
همانگونه که در جریان هستید برنامه و نرم افزار چیزی جز اعمال یک سری فرمان و دستورالعملها نیست. اما یک برنامه همواره به صورت خط به خط و پشت سر هم و بدون در نظر گرفتن قید و شروط اجرا نمیشود. بلکه بر اساس محاسبات عبارتهای ریاضی و یک سری شروط همواره به عمل میانجامد که با اعمال این شروط امکان دارد برخی از خطوط به صورت کلی از مدار برنامه خارج شده و هرگز اجرا نشوند. بهعبارت دیگر، ممکن است شما نخواهید یک برنامه از خط ۱ شروع به خطایابی شود. دستورشرطی کنترلی (Flow Control Statements) این امکان را برای شما فراهم میکنند تا دستورالعملها و فرمانهای زبان برنامهنویسی پایتون متناسب با یک سری شرایط اجرا شوند.
دستورالعملهای شرطی معمولا به صورت فلوچارت نمایش داده میشوند تا درک و مفهوم آنها متناسب با الگوریتم اجرایی با دقت بالاتری ارائه شود. به تصویر زیر توجه کنید:
الگوریتم یک پیاده روی برای شما عزیزان به صورت فلوچارت به نمایش گذاشته شده است. هر فلوچارت با یک Start آغاز و با یک End به اتمام میرسد. شروط نیز داخل بیضی قرار داده میشود که اگر شرط برقرار باشد دستور بعدی و اگر برقرار نباشد دستوری متفاوت اجرا خواهد شد. بنابراین قبل از اینکه روی این فلوچارت دقیق تر شوید به شما توصیه میکنیم با مفاهیم yes و no آشنایی بیشتری پیدا کنید.
علاوه بر نوع دادهای عدد صحیح، اعشاری و رشتهای، نوع دادهای بولین منطقی (Boolean) وجود دارد که تنها دو مقدار True و False را میپذیرد. درنظر داریم که در زبان برنامهنویسی پایتون همواره مقادیر باینری با حروف بزرگ T و F شروع میشوند. برای روشن شدن این موضوع عبارات زیر را در Python Interactive نرم افزار خود وارد کنید:
>>> spam = True >>> spam True >>> true Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> true NameError: name 'true' is not defined >>> True = 2 + 2 SyntaxError: assignment to keyword
همانگونه که ملاحظه میکنید، مقادیر باینری درون یک رشته ذخیره میشود. اگر شما بخواهید آن را به عنوان یک مقدار به شل ارسال کنید با خطا مواجه خواهید شد. همچنین اگر سعی کنید که نام متغیر خود را Ture یا False قرار دهید مشابه دستور 2+2=True خطا دریافت میکنید.
عملگرهای مقایسهای دو مقدار را مقایسه کرده و محاسبات را به خط بعدی انتقال میدهند. انواع عملگرهای مقایسهای با خروجی بولین به صورت زیر هستند:
مفهوم عملگر ============================================ == مساوی بدون دو مقدار != عدم تساوی دو مقدار < کوچکتر از > بزرگتر از <= کوچکتر مساوی >= بزرگتر مساوی
این عملگرها مقادیر Ture و False را باز میگردانند. به مثالهای زیر توجه کنید:
>>> 42 == 42 True >>> 42 == 99 False >>> 2 != 3 True >>> 2 != 2 False >>> 'hello' == 'hello' True >>> 'hello' == 'Hello' False >>> 'dog' != 'cat' True >>> True == True True >>> True != False True >>> 42 == 42.0 True >>> 42 == '42' False #جون هیج عددی معال یک رشته نیست
>>> 42 < 100 True >>> 42 > 100 False >>> 42 < 42 False >>> eggCount = 42 >>> eggCount <= 42 True >>> myAge = 29 >>> myAge >= 10 True
سوال: تفاوت بین عملگرهای == و = چیست؟
پاسخ: عملگر == دو متغیر را از نظر مقدار بررسی میکند که آیا مقادیر آنها دقیقا یکسان است یا نه! درحالیکه عملگر = به عنوان یک انتساب بین مقدار و متغیر مورد استفاده قرار میگیرد.
سه عملگر بولین وجود دارد که به صورت and، or و not مورد استفاده قرار میگیرند.
عملگرهای بولین باینری
عملگرهای and و or همیشه برای دو مقدار بولین (یا عبارات) مورد استفاده قرار میگیرند.بدین صورت عمل میکنند که اگر دو مقدار Trueباشند پاسخ Ture را ارسال میکنند و درغیر این صورت مقدار False را در خروجی نمایش میدهند.
>>> True and True True >>> True and False False
جدول این عملگر به صورت زیر میباشد:
مقدار محاسبه شده عبارت ====================================== True and True True True and False False False and True False False and False False
از طرفی اگر عملگر or بهکار گرفته شود آنگاه اگر هر دو مقدار یا تنها یکی از آنها True باشد جواب True را نمایش و در غیراین صورت جواب False را در خروجی چاپ میکند.
>>> False or True True >>> False or False False
جدول این عملگر به صورت زیر میباشد:
مقدار محاسبه شده عبارت ====================================== True and True True True and False True False and True True False and False False
و اما عملگر not اگر مورد استفاده قرار بگیرد در برابر مقدار True جواب False و در برابر مقدار False جواب True را در خروجی چاپ میکند. به جدول زیر توجه کنید:
مقدار محاسبه شده عبارت ====================================== not True False not False True
همچنین در جریان هستید که میتوان عملگرهای مقایسهای و بولین با همدیگر ترکیب کرد و عبارتهای دیگری را ایجاد نمود. به مثال زیر توجه کنید:
>>> (4 < 5) and (5 < 6) True >>> (4 < 5) and (9 < 6) False >>> (1 == 2) or (2 == 2) True
که اگر بخواهیم خط اول این مثال را تشریح کنیم بدین صورت عمل خواهیم کرد:
(4 < 5) and (5 < 6) | True and (5 < 6) | True and True | True
حال اجازه بدهید به قسمت مهم دستور شرطی کنترلی در زبان برنامه نویسی پایتون بپردازیم.
یکی از پرکاربردترین دستورات شرطی در پایتون، دستور if است. این دستور بدین صورت عمل میکند که اگر شرط آن برقرار باشد مقدار True را انتخاب کرده و دستورهایی که درون این شرط وجود دارند را اجرا میکند. هر دستور شرطی if شامل اجزایی است که در ذیل به آنها اشاره خواهیم کرد:
به مثال زیر توجه کنید:
if name == 'Alice': print('Hi, Alice.')
برای روشنتر شدن این مثال و دستورات شرطی در پایتون به شما پیشنهاد میکنیم قبل از کدنویسی آنها را به صورت فلوچارت طراحی کنید. هم اکنون برای مثال فوق فلوچارت زیر را خواهیم داشت:
بنابراین برنامه ابتدا وارد بررسی شرط میشود که آیا شرط برقرار است یا خیر؟ در صورتیه شرط برقرار بود عبارت Hi, Alice. را چاپ میکند و درغیر این صورت برنامه را خاتمه میدهد.
دستور شرطی if را گاهی میتوان با گزینههای دیگر ارتقا داد و آن را هوشمندتر کرد. برای این کار از جملهی else استفاده خواهیم کرد. بدینصورت که اگر شرط برقرار نبود عبارتهای داخل دستور else اجرا خواهند شد. هر دستوری که شامل else باشد از اجزای زیر تشکیل شده است:
به مثال قبلی باز میگردیم و آن را با استفاده از دستور else ارتقاء میدهیم:
if name == 'Alice': print('Hi, Alice.') else: print('Hello, stranger')
گاهی میخواهیم چندین دستور شرطی if را با یکدیگر ادغام کنید تا با اعمال شروط مختلف یک برنامه اجرا شود و در غیراینصورت اگر شرط دیگری برقرار بود به کدهای درون آن عمل کند. این حالت پیچیدهترین نوع دستور if است. هر دستور شرطی elif از چند قسمت تشکیل شده است:
حال مثال قبلی را ارتقاء میدهیم و پیشرفتهترین حالت دستور شرطی if را برای شما عزیزان تشریح میکنیم:
if name == 'Alice': print('Hi, Alice.') elif age < 12: print('You are not Alice, kiddo.')
همینطور که ملاحظه کردید دو شرط مختلف برای برنامهی خود ایجاد کردیم تا با برقرار بودن هر یک از شروط کدهای مربوط به آن اجرا شود. بنابراین فلوچارت این مثال به صورت زیر خواهد بود:
همچنین میتوان مجموعه کد فوق را بسط داد و مثال زیر را ایجاد کرد:
if name == 'Alice': print('Hi, Alice.') elif age < 12: print('You are not Alice, kiddo.') else: print('You are neither Alice nor a little kid.')
بنابراین فلوچارت مجموعهی کد فوق به صورت زیر خواهد بود. این کد بدین صورت عمل میکند که اگر هر یک از شروط برقرار نباشد، دستورهای داخل بلاک :else برقرار خواهد شد:
گاهی نیاز است مجموعهای از کدها را برای تعداد اجرا کرد. یعنی درواقع کدها را داخل یک حلقه قرار داده و آنها را مدام تکرار کنید. برای انجام اینکار میتوان از دستور حلقهی while استفاده کرد. این حلقه بدین صورت عمل میکند که اگر شرط آن برقرار باشد حلقه شروع به کار کرده تا زمانیکه از شرط خارج شود. هر دستور حلقهی while از چندین قسمت تشکیل شده است:
اگر مثال زیر را بررسی کنید متوجه خواهید شد که حلقهی while بسیار شبیه به دستور شرطی if است با این تفاوت که دستور شرطی if پس از اجرا شدن به اتمام رسیده و خط بعدی آن اجرا خواهد شد. درحالیکه دستور حلقهی while اجرا خواهد شد و پس از به اتمام رسیدن، به ابتدای حلقه پرش کرده و مجددا کدها را اجرا میکند تا از شرط خارج شود:
#if Statements spam = 0 if spam < 5: print('Hello, world.') spam = spam + 1 #while Statements spam = 0 while spam < 5: print('Hello, world.') spam = spam + 1
همانطور که در مثال فوق ملاحظه میکنید ابتدا مقدار spam برابر ۰ در نظر گرفته شده است. سپس حلقهی while بررسی میشود و اگر شرط spam کوچکتر از ۵ برقرار بود مجموعهی کدهای درون آن اجرا خواهد شد. سپس در انتها یک مقدار به spam اضافه میشود. این حلقه تا ۵ مرتبه تکرار میشود. به فلوچارت این مثال دقت کنید:
یک راه میانبر همیشه در برنامهنویسی وجود دارد که با استفاده از آن میتوان در هر لحظهای که اراده کرد از شروط خارج شد. این دستور break نام دارد و معمولا برای خروج از حلقهها از آن استفاده میشود. ساختار این دستور تنها شامل یک کلمهی break است. برای روشنتر شدن این موضوع مثال زیر را بررسی میکنیم:
while True: print('Please type your name.') name = input() if name == 'your name': break print('Thank you!')
این مثال بدین صورت عمل میکند که اگر چنانچه نام وارد شده توسط کاربر برابر مقدار your name نبود دستور break اجرا شده و ادامهی برنامه در خارج از حلقه اتفاق بی افتد و عبارت Thank You چاپ شود. بنابراین فلوچارت برنامه فوق به صورت تصویر زیر است:
همانند عبارت break، جملهای تحت عنوان continue وجود دارد که درون حلقه اتفاق میافتد. هنگامیکه این دستور اجرا شود فورا برنامه به خط اول حلقه انتقال پیدا میکند.
توجه: جهت تولید حلقههای نامحدود باید شرط حلقه را روی Ture تنظیم کنید.
حلقهی while تنها زمانیکه شرط آن برقرار باشد اجرا خواهد شد اما اگر شما بخواهید یک مجموعهی کد را به تعداد مشخص اجرا کنید باید چه کاری انجام دهید؟ انجام این کار با استفاده از حلقهی for و تابع ()range امکانپذیر است. هر حلقهی for از اجزای مشخص تشکیلشده است که در ذیل به آنها اشاره خواهیم کرد:
برای تفهیم بیشتر دستور حلقهی for مثال زیر را بررسی میکنیم:
print('My name is') for i in range(5): print('Jimmy Five Times (' + str(i) + ')')
همانطور که ملاحظه میکنید اولین مقدار برای i برابر ۰ است و سپس دستورات داخل حلقهی for اجرا شده و عبارت Jimmy Five Times 0 در خروجی چاپ میشود. سپس برنامه به ابتدای حلقه باز میگردد و مقدار i را برابر ۱ قرار میدهد. این عمل تا زمانیکه مقدار i برابر ۴ میشود ادامه پیدا میکند. تابع ()range مقادیر i را با گام ۱ تقسیم میکند. بنابراین فلوچارت برنامه فوق به صورت زیر خواهد بود:
در نهایت خروجی این مثال به صورت زیر خواهد بود:
My name is Jimmy Five Times (0) Jimmy Five Times (1) Jimmy Five Times (2) Jimmy Five Times (3) Jimmy Five Times (4)
شروع، توقف و گامهای تابع ()range
همانطور که در جریان هستید تابع ()range معمولا در حلقهی for مورد استفاده قرار میگیرد. این تابع دارای ۳ آرگومان است که به ترتیب اولین آرگومان برای شروع، دومین برای توقف و سومین آرگومان برای گام هر مرحله مورد استفاده قرار میگیرد. در ضمن وارد کردن تمام آرگومانها الزامی نیست به عنوان مثال:
for i in range(12, 16): print(i)
خروجی این مثال به صورت زیر خواهد بود:
12 13 14 15
در نظر دارید که هر دو مقدار اول و دوم همواره باید وجود داشته باشند و حضور سومین آرگومان الزامی نیست. چون اگر این آرگومان وجود نداشته باشد به صورت پیشفرض گام حرکتی ۱ ثبت میشود.
یک مثال کاملتر از این حالت ارائه خواهیم داد:
for i in range(0, 10, 2): print(i)
خروجیای که برای شما به نمایش گذاشته خواهد شد برابر است با:
0 2 4 6 8
نمونهی دیگری را در اختیار شما قرار میدهیم:
for i in range(5, -1, -1): print(i)
در این مثل همانطور که پیداست از عدد ۵ شروع کرده و با گام حرکتی ۱- به سمت عقب حرکت میکنیم تا به مقدار ۱- برسیم. بنابراین در خروجی داریم:
5 4 3 2 1 0
گاهی برای استفاده از توابع مختلف در زبان برنامه نویسی پایتون ابتدا باید کتابخانههای استاندارد آنها را بارگذاری کنیم. هر ماژول در برنامههای پایتون شامل یک سری مجموعه توابع هستند که شمارا در تولید برنامه کمک میکنند. مثلا ماژول math امکانات ریاضیاتی و توابع ریاضی را در اختیار شما قرار میدهد. یکی از این توابع random نام دارد که اعداد تصادفی تولید میکند. قبل از استفاده از هر تابع ابتدا باید ماژول (کتابخانه) مربوط به آن را فراخوانی (import) کنید. نحوهی فراخوانی یک ماژول به صورت زیر است:
به مثال زیر توجه کنید:
import random for i in range(5): print(random.randint(1, 10))
همانطور که ملاحظه میکنید تابع random به همراه متد randint فراخوانی شده است که حاصل خروجی به صورت مجموعه از اعداد تصادفی صحیح بین ۱ و ۱۰ است:
4 1 8 4 1
در صورت اضافه کردن چند ماژول به صورت همزمان میتوان نام هر یک با کاما (,) از یکدیگر جدا کرد:
import random, sys, os, math
اتمام برنامه با استفاده از ()sys.exit
گاها برای شما پیش آمده که هر یک از برنامههای فوق را اجرا کرده اید و تحت هیچ شرایطی با وجود به اتمام رسیدن خطوط برنامه، نرم افزار شما متوقف نمیشود. در این حالت از دستور ()sys.exit استفاده میشوداین تابع در کتابخانهی sys قرار دارد. به مثال زیر توجه کنید:
import sys while True: print('Type exit to exit.') response = input() if response == 'exit': sys.exit() print('You typed ' + response + '.')
اگر دستور فوق را در IDE خود اجرا کنید متوجه خواهید شد که این حلقه به صورت نامحدود و نامتناهی کار میکرد تا زمانیکه کاربر ورودی exit را وارد کند و سپس از طریق تابع ()sys.exit برنامه خارج شود.
به شما تبریک میگوییم! با مطالعهی این فصل اطلاعات بسیار مفیدی از نحوهی کار با دستورات شرطی در پایتون بدست آوردید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.