خب در جلسه قبلی با عبارات و عملگرهای شرطی آشنا شدیم. توی این جلسه می خواهیم که یک عبارت شرطی رو با استفاده از دستور if به اجرا درآوریم و حالت های مختلف رو بررسی کنیم.
برای استفاده از دستور if باید از حالت تورفتگی کدها استفاده کنیم. در مورد این موضوع در جلسه پنجم آشنایی پیدا کردیم. چون دستور if یک دستور مرکب هستش پس باید از این حالت استفاده کنیم. شیوه استفاده از این دستور به صورت زیر است.
x = 10
if x>0:
print x,"is positive"
بیاید یک تحلیل ساده ای روی این کد داشته باشیم. ابتدا متغیری با نام x تعریف شده و مقدارش برابر با ۱۰ قرار گرفته. توی خط پایینش از شرط استفاده کردیم. گفتیم که اگه مقدار x از صفر بزرگتره، پس خط پایین رو اجرا کن. توی خط پایین گفته شده که مقدار X یک مقدار مثبته.
به شکل و استایل دستور if دقت کنید. می بینید که بعد از عبارت شرطی از : استفاده شده به این معنا که اگه نتیجه این عبارت شرطی True بود دستور بعد از اون رو اجرا کن. همچنین می بینید که دستور بعد از اون کمی با فاصله از حاشیه قرار گرفته، همونطور که گفتم این حالت رو بهش می گن تورفتگی!
استفاده از حالت دوگانه
دستور بالا رو اجرا کنید ولی اینبار بجای مقدار ۱۰ مقدار ۱- رو به x نسبت بدید. حالا شرط رو اجرا کنید. چه اتفاقی می افته؟ هیچ. چرا؟ چون شما هیچ حالتی رو در صورتی که مقدار شرط برابر با False شد در نظر نگرفتید. عبارت else در برنامه نویسی برای تعیین حالت دوگانه استفاده میشه. به این صورت که اگه دستور شرطی اول مقدارش true نبود بدنه else اجرا میشه. حالا بیاید کد بالا رو طوری تغییر بدیم که اگه مقدار x از ۰ کوچیکتر بود پیغام بده که این عدد منفی هستش.
x = -1
if x>0:
print x,"is positive"
else:
print x,"is negative"
خب در این حالت خواهید دید که برنامه خروجی مناسب رو به ما نشون می ده.
حالا یه مشکل دیگه، اگه به این برنامه مقدار صفر رو بدیم چی میگه؟ هیچ. چرا؟ چون براش تعیین نکردیم. ولی اینجا یه مشکلی هست ما فقط دو حالت داریم یا if یا else … خب چطوری این مسئله رو حل کنیم؟!
از من بشنوید کاری نداره. یکی دیگه از مفاهیمی که باید باهاش آشنا بشیم دستورات شرطی زنجیرهای هستش. این دستور در حالتی اتفاق می افته که ما با بیشتر از دو حالت سر و کار داریم. برای استفاده از این حالت از دستور elif استفاده می کنیم. به صورت زیر:
x = 0
if x>0:
print x,"is positive"
elif x<0:
print x,"is negative"
else:
print x,"is zero"
در دستور بالا ابتدا بررسی شده که x از صفر بزرگتره؟ اگه هست دستور بعدی اگه نیست برو به شرط بعدی! شرط بعدی میگه x از صفر کوچیکتره؟ پس دستور بعدی اگه نیست حالت آخر رو بررسی کن.
در یک شرط می تونید از n تا elif استفاده کنید. این کار بسته به برنامه ای هستش که می نویسید.
دقت کردید نسبت دادن دستی به متغیر یه ذره کار ساده و بی مزه ایه؟! نظرتون چیه یه تابع بنویسیم که یه ورودی داشته باشه و براساس ورودی بهمون بگه که این مقدار مثبته، منفیه و یا صفره؟! من که نظرم مثبته پس بیاید شروع کنیم:
def pnz(x):
if x>0:
print x,"is positive"
elif x<0:
print x,"is negative"
else:
print x,"is zero"
خب حالا برای استفاده از این برنامه کافیه که مقدارهای مختلفی مثل ۱۰ و ۰ و ۱- رو به تابع بدید … ببینید برنامه تون به درستی کار میکنه یا نه.
دستورهای شرطی به صورت تودرتو
این حالت در واقع زمانی استفاده میشه که بخواید براساس جواب شرط اولی شروط دیگه رو بنویسید. اگه یه مثال ساده توی زندگی رو بهتون بگم خیلی ساده می تونید این موضوع رو درک کنید:
صبح از خواب بیدار می شید ساعت رو نگاه می کنید، آیا ساعت ۷ هستش یا نه اگه هفته خب آیا امروز جمعه نیست؟ نه پس پاشو صبحونه بخور چون باید بری سر کار، آیا بارون می باره؟ خیر پس لازم نیست چتر ببری؟ آیا هوا سرده؟ آره پس باید کت بپوشی و این مسئله همینطور جلو میره. در این حالت ها هستش که ما از حالت تودرتو استفاده می کنیم. در مثال قبلی که اعداد مثبت و منفی و صفر رو تشخیص می دادیم می تونستیم از همین حالت استفاده کنیم. به مثال پایین توجه کنید.
def pnz(x):
if x>0:
print x,"is positive"
else:
if x<0:
print x,"is negative"
else:
print x,"is zero"
pnz(10)
pnz(0)
pnz(-1)
خوب در ادامه قصد داریم که چند تا موضوع مرتبط با شرط رو بررسی کنیم و بعد دیگه این موضوع رو خاتمه بدیم بریم سراغ بقیه چیزهای باحال پایتون. خب در بالا که با شرط آشنا شدیم و اون رو به درستی تعریف کردیم.
استفاده سادهتر از عبارت های تودرتو شرطی
اگه یادتون باشه موضوع تودرتو نویسی شروط رو با هم بحث کردیم. یه شرط رو می زاریم و براساس اون شرط یه شرط دیگه رو اجرا می کنیم. حالا بجای اینکار میتونید در بعضی از مواقع از عملگر شرطی and استفاده کنید. این کار به ما کمک میکنه کدهای کمتری بنویسیم. به مثال پایین دقت کنید:
if x>0:
if x!=0:
print x,"is positive"
توی مثال بالا گفته شده که اگه x بزرگتر از صفر بود و برابر با صفر نبود، چاپ کن که x مثبته. ولی همین کد رو میتونیم توی حالت دیگهای به صورت کوتاهتری بنویسیم. چطوری به مثال پایین دقت کنید:
if x>0 and x!=0:
print x,"is positive"
بگذارید به شما دلیل آنکه یک خروجی داشتید را بگویم. در مثال اول گفته شده که اگه شرط اول True بود برو خط بعدی، خط بعدی چیه؟ خط بعدی هم یه شرط دیگهاس. ولی در نهایت این دو شرط به یک دستور print خاتمه پیدا می کنند. پس دستور print در حالتی اجرا میشه که جواب دو شرط قبل از خودش True باشه. حالا مثال دوم، تعریف عملگر and رو اگه یادتون باشه اینجوری گفتیم که اگه جواب هر دو طرف True باشه مقادیر بعد از خودش رو نمایش می ده … این دقیقا همون کاریه که توی مثال اول انجام دادیم.
دستور return
بسیاری از اوقات وقتی یک تابع را مینویسیم، می خواهیم که در یک نقطه خاص ادامه بدنه تابع اجرا نشود. برای مثال میخواهید تابعی بنویسید که زوج یا فرد بودن اعداد مثبت را تشخیص دهد. برای اینکار ابتدا باید شرطی بنویسید که کنترل کند، عدد ورودی صفر و یا منفی نباشد. بعد از این کنترل حال به سراغ محاسبات اصلی باید رفت. پس استفاده از if , else های متعدد در این حالت معقول نیست بجای این کار میتوانید از مثال زیر استفاده کنید.
def fun(x):
if x <= 0:
print "Please Enter a number greater than 0"
return
if x%2 == 0:
print x,"is Even"
else:
print x, "is Odd"
همانطور که میبینید در این مثال ابتدا صفر و یا منفی بودن مقدار بررسی میشود اگر جواب این شرط true باشد با مقدار return برخورد خواهد کرد. این مقدار دستورات بعد از خود را نادیده میگیرد و به بیرون از تابع مراجعه میکند.
درک این قضیه بسیار ساده است کافیست در نظر داشته باشید که هر بار با مقدار return بربخورید از بدنه تابع بیرون خواهد آمد.
در ادامه این قسمت از آموزش پایتون می خوایم که در رابطه با حلقه ها صحبت کنیم. خب تصور کنید که شما می خواید یه کاری رو چندین بار تکرار کنید. توی دنیای واقعی اون کار رو به صورت دستی باید به همون تعداد که می خوایم انجام بدیم، ولی یکی از ویژگی هایی که توی دنیای کامپیوتر وجود داره، خودکارسازیه! یعنی چی؟ یعنی اینکه شما یک بار کاری رو انجام می دید، بعد اگر خواستید به تعداد معینی کامپیوتر به صورت خودکار اون کار رو انجام میده. برای پیاده سازی چنین حالتی توی دنیای کامپیوتر از حلقه استفاده میکنیم.
برای ساختن حلقه توی پایتون از while و if استفاده می کنیم. در این مقاله قصد دارم که هر دو روش رو به صورت خیلی واضح توضیح بدم.
دستور While
تصور کنید که می خواهید عدد ۱ تا عدد ۹ را به صورت صعودی نشان دهید. یقینا استفاده از ۹ دستور پرینت به صورت مجزا کار معقول و منطقی نیست. برای همین باید از حلقه استفاده کنیم. حالا چطوری؟
a = 10
b = 1
while b<a:
print b
b = b+1
شرح دستور: توی دستور بالایی اول از همه یه متغیر a و b تعریف کردیم و مقدارشون رو به ترتیب برابر ۱۰ و ۱ قرار دادیم. توی دستور اصلی while گفتیم، تا زمانی که مقدار b از a کوچیکتره بدنه دستور رو اجرا کن. اگه دستور درست بود که بدنه دستور اصلی اجرا میشه. توی بدنه دستور اولین بار b چاپ می شه و بعد از اون به مقدار b یکی اضافه می شه. این کار اضافه شدن انقدر تکرار پیدا می کنه که مقدار b برابر میشه با ۱۰ و در این صورت مقدار دستور اصلی while برابر با false میشه و از بدنه دستور خارج میشه.
اگر دستور بالا رو اجرا کنید، خروجی درست رو می بینید.
حلقه بی پایان
توی بدنه دستور while همیشه باید در نظر داشته باشیم که مقادیر اصلی (در مثال بالا a و b) باید تغییر کنند، در غیر اینصورت حلقه بی پایان خواهد شد. حلقه بی پایان به حلقه ای گفته می شود که در آن از بدنه while هیچوقت خارج نشویم.
برای مشاهده چنین حالتی کافیه که خط آخر دستور بالایی رو پاک کنید. به صورت زیر:
a = 10
b = 1
while b<a:
print b
حال از این دستور خروجی بگیرید، خواهید دید که به صورت مرتب در حال چاپ شدن مقدار ۱ است. این روند تا زمان خارج شدن از برنامه ادامه پیدا می کنه.
دستور for
دستور for نیز برای ساختن یک حلقه به کار برده می شود. کارکردن با آن شاید کمی ساده تر به نظر بیاید اما در نهایت همان خروجی را خواهید داشت که while به شما می دهد. استفاده کردن از for ساده است. کافی است که متغیری تعریف کنید و یک محدوده را برای حلقه معین نمایید. به مثال زیر دقت کنید:
for a in [1,2,3,'Dog']:
print a
در این مثال گفته شده که متغیر a را برابر با مقادیر 1 , 2 , 3 , Dog قرار بده و هر بار اون رو چاپ کن. در حقیقت هر بار که دستور پرینت اجرا می شود یکی از مقادیر چاپ می شود.
تصور کنید که میخواهید با استفاده از دستور for اعداد ما بین ۱ تا ۱۰ را چاپ کنید. مطمئنا انجام چنین کاری مانند زیر درست نیست:
for a in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
print a
به همین دلیل باید یک راه سریعتر برای تولید این اعداد باشد. تابعی در پایتون وجود دارد با نام range. با استفاده از این تابع می توانید اعداد ما بین دو عدد مشخص شده را بدست آورید. برای استفاده از این دستور کافیست که از حالت زیر استفاده کنید:
range(1, 10)
مقادیر تولید شده این تابع ۱،۲،۳،۴،۵،۶،۷،۸ و۹ است. پس برای دریافت عدد ۱۰ آخرین مقدار تابع بالا را برابر ۱۱ قرار بدهید. اما چگونه می شود از این دستور در حلقه for استفاده کرد؟
یک مثال ساده از این حالت را می توانید در دستور زیر مشاهده کنید:
for a in range(1, 10):
print a
استفاده از break و continue
در استفاده از حلقه ها دو دستور تحت عنوان break و continue وجود دارد. هر کدام از این دستورها با حلقه ما به صورت خاص خود برخورد می کنند:
دستور break: هر وقت مفسر پایتون به این دستور برخورد بکند، از حلقه خارج می شود. برای مثال تصور کنید شما حلقه ای طراحی کردهاید که در آن حلقه هر عددی که وارد می شود براساس معتبر بودن عدد روی آن اعمالی انجام می گیرد. اما اگر مقدار عدد معتبر نباشد از حلقه خارج می شود.
بگذارید مثالی در دنیای واقعی را بیان کنم. تصور کنید شما ۱۰ شکلات دارید. با هر بار اجرای حلقه یکی تعداد شکلات ها کاهش پیدا می کند. زمانی که به مقدار ۵ رسید می خواهیم فورا به ما هشدار بدهد … در مثال پایین، چنین حالتی را پیاده سازی کردهایم.
Chocolate = 10
while Chocolate>0:
print "Number of Chocolate is: ", Chocolate
Chocolate = Chocolate-1
if(Chocolate==5):
break
print "Oh Chocolate is going to be end"
در حقیقت در این مثال break باعث می شود که از حلقه خارج شده و دستور انتها را چاپ کند.
دستور continue
این دستور نیز شبیه به break از انجام ادامه حلقه خودداری می کند اما تفاوت اینجاست که دستور continue از حلقه خارج نمی شود بلکه دوباره به ابتدای حلقه بر می گردد.
استفاده از حلقه تودرتو
در بعضی از حالت ها مجبور هستید که از چندین حلقه درون یک حلقه استفاده کنید. برای این حالت نیز مشکلی وجود ندارد. با مشاهده مثال زیر می توانید از دستور کلی چنین حالتی را بهتر متوجه شوید:
Chocolate = 10
mom = "is sleep"
while Chocolate >0:
while mom=="is sleep":
print 'mom is sleep so eat Chocolate'
if Chocolate !=0:
Chocolate = Chocolate-1
break
print "Chocolate is end of"
شرح دستور: در این دستور مقدار متغیر Chocolate برابر با ۱۰ و مقدار متغیر mom برابر با is sleep است. در حلقه ابتدا بررسی می کند که اگر مقدار شکلات ها از صفر بیشتر بود، حلقه بعد از آن را بررسی کن. حلقه دوم بررسی می کند که آیا مادر خواب است یا خیر. اگر خواب بود به دستورهای بعدی مراجعه کن.
در واقع با استفاده از این حالت می توانید دستورهای پیچیده تری مانند جدول ضرب بنویسید و یا کارهای دیگری را انجام دهید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید