🔱کاربردهای کلیدواژه else در پایتون
انجمن علمی دانشجویی علوم کامپیوتر دانشگاه خوارزمیکوتاه، جذاب و مفید - مخصوص برنامهنویسهایی که میخوان یک قدم حرفهای تر کدنویسی کنن!✨
کلیدواژه else توی پایتون از اون دسته واژههاییه که چندین کاربرد مهم و اساسی داره. ولی بیشتر کسایی که با پایتون کار میکنن فقط از همون کاربرد اصلیش( یعنی گزارههای شرطی) استفاده میکنن. بیاید باهم ببینیم که این else اصلاً چی هست و کجاها استفاده میشه...
کاربردهای else در پایتون:
🔵گزارههای شرطی
🔵بعد از حلقهها
🔵داخل ساختار try و except
⭕کلیدواژه else در گزارههای شرطی:
کاربرد else توی گزارههای شرطی از اولین مباحثیه که هر برنامهنویسی در پایتون یاد میگیره. به مثال زیر توجه کنید:
x = 2
if x > 0:
print("x is positive")
elif x < 0:
print("x is negative")
else:
print("x is equal to zero")
خروجی این کد واضحه. این کد مثبت یا منفی بودن اعداد صحیح رو بررسی میکنه و به کاربر اطلاع میده. ولی توجه داشته باشید که عدد صفر نه مثبته و نه منفی. اینجاست که نقش else نمایان میشه...
✅در واقع بعد از اینکه تمامی شروط داخل گزارههای شرطی بررسی شد ( در مثال بالا مثبت و منفی بودن)، هر گزارهای که از بقیه شروط پیروی نمیکنه رو میشه با استفاده از else گیرانداخت. مثلاً اگر کدمون داخل مثال بالا رو بازنویسی کنیم و x رو برابر 0 قرار بدیم :
x = 0
✔اینجاست که کدهایی که داخل کلیدواژه else نوشتیم اجرا میشه و خروجی ما به اینصورت خواهد بود:
x is equal to zero
⭕کلیدواژه else بعد از حلقهها :
برای فهم بهتر این مطلب اول باید به یک سری نکات دربارهی حلقهها اشاره کنیم. یه حلقه یا به صورت طبیعی به روند خودش ادامه میده و به انتها میرسه، و یا به یکی از دلایلی که پایینتر بهش اشاره میکنیم روند طبیعیش متوفق میشه...
🎯حالتهایی که یک حلقه به صورت طبیعی به پایان نمیرسه:
🟥موقعی که در داخل حلقه از دستور break استفاده میشه.
🟥وقتی که حلقهی ما داخل یک تابع قرار داره و داخل حلقه از دستور return استفاده میشه.
🟥وقتی که داخل حلقه یک exception یا ارور اتفاق میفته. (چه به صورت طبیعی و چه با استفاده از دستور raise)
🟥وقتی که به هر دلیلی در اجرای کد ممانعت ایجاد میشه. (مثلا قطع اجرای کد به صورت دستی از ترمینال)
🟥دلایل خیلی بیشتری هم وجود داره که ما اینجا بهشون اشاره نمیکنیم، ولی مهمترینشون همین چهارتا حالته.
اینا رو گفتیم که به کاربرد else بعد از حلقهها بپردازیم. در حقیقت هروقت حلقهی ما به صورت طبیعی به پایان برسه، کدهای داخل بخش else اجرا میشن. در صورتی که به هرکدام از دلایلی که بالاتر گفته شد، حلقه به طور طبیعی به پایان نرسه، دیگه کدهای داخل بخش else اجرا نمیشن...
for i in range(1, 11):
print(i, end = " ")
else:
print("loop completed successfully...")
✅توی این مثال که یک حلقهی ساده است و کلیدواژه else بعد از اون اومده، حلقه ما از عدد یک تا ده رو (بدون رفتن به خط بعد) چاپ میکنه و به طور کاملا طبیعی به پایان میرسه. پس همونطور که گفته شد کدمون داخل بخش else هم اجرا میشه و خروجیمون به این صورت خواهد بود:
1 2 3 4 5 6 7 8 9 10 loop completed successfully...
🤔ولی با اضافه کردم یه شرط کوچولو با دستور break ، دیگه کد داخل else اجرا نمیشه.
for i in range(1, 11):
print(i, end = " ")
if i == 10:
break
else:
print("loop completed successfully")
❌اینبار توی هربار اجرای حلقه، مقدار i بررسی میشه و اگر برابر 10 باشه، حلقه ما با دستور break به صورت غیرطبیعی به پایان میرسه و دیگه کدهای داخل else اجرا نمیشن...
1 2 3 4 5 6 7 8 9 10
⭕کلیدواژه else داخل ساختار try و except :
مشابه با حلقهها اگر کدهای ما در بخش try بدون هیچ ارور یا exception اجرا بشن، کدهای داخل else هم اجرا میشن.
try:
print("hello world")
except Exception:
print("an error was raised")
else:
print("no error was raised")
✔اینجا هیچ اروری داخل بخش try رخ نمیده و به همین دلیل کد داخل else هم اجرا میشه.
hello world no error was raised
🤔اما اگه توی همین کد یه تغییر کوچولو ایجاد کنیم:
try:
print("hello world")
raise ValueError
except Exception:
print("an error was raised")
else:
print("no error was raised")
اینجا چون که ما خودمون یه ارور ساختیم دیگه کد داخل else اجرا نمیشه و به جای اون کدهای داخل بخش except اجرا میشن.
hello world an error was raised
💡شاید براتون سوال شده باشه که خب چرا اصلا از else اینجا استفاده کنیم؟ نمیشه کدها رو توی همون بخش try نوشت؟
باید اشاره کنیم که اگر داخل بخش try به یه ارور بر بخوریم، دیگه کدهای بعدی ما داخل try اجرا نمیشن و مستقیم میریم داخل بخش except.
✅مثلا اگه داخل کد قبل جای دو خط اول بخش try رو عوض کنیم.
raise ValueError
print("hello world")
❌دیگه خط دوم ما اجرا نمیشه و خواهیم داشت:
an error was raised
✍ و در آخر میرسیم به تحلیل کوییز این هفته:
توی این کوییز دوتا از کاربردهای else نمایش داده شده، اول از همه به x و y یه مقدار اولیه داده میشه:
x = y = 2
🟢بعدش حلقمون با یدونه شرط ( x بزرگتر یا مساوی 0 ) اجرا میشه.
❔اگه براتون سواله که پس z:= y + x چی شد؟ فقط بدونید که این عبارت ارزشش به ازای هر z غیر صفر درسته.
💡برای فهم بهتر این عبارت میتونید به پست قبلیمون که دربارهی کاربردهای والروس در پایتونه یه نگاه بندازید...🦭
x >= 0 # 2 >= 0 (True) z := x + y # z = 2 + 2 = 4 (True)
🟢پس با درست بودن شرطمون وارد بدنه شرط میشیم: ( دقت کنید که خروجی عملگر تقسیم در پایتون همواره float هست)
y /= x # y = 2/2 = 1.0 x -= 1 # x = 2 - 1 = 1
🟢بخش try بدون ارور اجرا شد، پس میریم داخل بخش else :
y -= z # y = 1.0 - 4 = -3.0
🟢برمیگردیم به اول شرطمون:
x >= 0 # 1 >= 0 (True) z := x + y # z = 1 + (-3.0) = -2.0 (True)
🟢شرطمون برقراره پس دوباره میریم داخل بدنه شرط:
y /= x # y = -3.0/1 = -3.0 x -= 1 # x = 1 - 1 = 0
🟢کد بدون ارور اجرا شد. میریم داخل else :
y -= z # y = -3.0 - (-2.0) = -1.0
🟢و برای بار آخر برمیگردیم به اول شرط. چرا بار آخر؟ 😉
x >= 0 # 0 >= 0 (True) z := x + y # z = 0 + (-1.0) = -1.0 (True)
🟢میریم داخل بدنه :
y /= x # y = -1.0/0 (Error)
❌و اینجاست که به تقسیم بر صفر میرسیم و پایتون ارور میده. پس ادامه بخش try دیگه اجرا نمیشه و میریم داخل بخش except :
break
🟢با دستور break از حلقه خارج میشیم. اینجا چونکه هم کدمون ارور داده و هم با یه دستور و به طور غیر طبیعی از حلقه خارج شدیم، هیچکدوم از بخشهای else اجرا نمیشن و مستقیم میریم به خط آخر:
print(y) # -1.0
پایان ✨