پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت هشتم: عبارات شرطی)

سلام رفقا

آموزش پایتون رو برای ورود به دنیای هوش مصنوعی شروع کردیم. اگر اولین باره با پایتون آشنا می شید به لینک زیر برید و از اول بیاین جلو.

آموزش پایتون جلسه اول

این قسمت که بخش هشتم آموزش پایتون هست در ارتباط با شرط هست. خب این خیلی به زبون ما ها نزدیکه می گیم اگر این بود این کارو کن و اگر اون بود اون کارو کن اگرم هیچ کدوم نبود این کارو کن. همینی که الان گفتم به زبان پایتون می شه :

number = 5
if number > 2:
    print(&quotNumber is bigger than 2.&quot)
elif number < 2: # Optional clause (you can have multiple elifs)
    print(&quotNumber is smaller than 2.&quot)
else: # Optional clause (you can only have one else)
    print(&quotNumber is 2.&quot)

چون 5 از 2 بزرگتره جمله اول چاپ میشه. اگر از Else if که در زبون های دیگه رایجه استفاده کنید خطا می گیره. پس یادتون باشه توی پایتون Elif هست. پس اگر جلوی if عبارت درست یا همون True بود اون شرط اجرا میشه. مثلا در مثال ما number>2 هست یعنی 5>2 یک عبارت درست True هست که دستورات داخلش اجرا میشن.

نکته جالب اینه که می شه شرط یک خطی هم نوشت اگر با زبون های برنامه نویسی دیگه کار کرده باشید از این ساختار سورپرایز می شید. مثال زیر رو ببینید:

n = 5
&quotHello&quot if n > 2 else &quotBye&quot
# Out: 'Greater than 2'

می گه Hello رو چاپ کن اگر n بزرگتر از 2 بود و اگر نبود Bye رو چاپ کن. این مثل خوندن در زبان انگلیسی هست. به جز کارای ساده که توی یک خط قراره انجام بشه از این نوع تعریف شرط استفاده نکنید چون خوانایی (فهموندن به دیگران) رو کاهش می ده.

همه عبارت های زیر اگر جلوی شرط قرار بگیرن False هستن. این خیلی باعث خطا می شه . مثلا فرض کنید نوشتیم if 0 این یعنی این شرط اجرا نمیشه چون صفر نقش False داره.

None
False
0, or any numerical value equivalent to zero, for example 0L, 0.0, 0j
Empty sequences: '', &quot&quot, (), []
Empty mappings: {}
User-defined types where the __bool__ or __len__ methods return 0 or False

به جز اینایی که این بالا گفتم بقیه چیزا True حساب میشه. حالا بریم سر وقت عملگر های منطقی :

عملگر AND :

این مثل "و" خودمون هست مثلا 1و2. اگر دو طرف AND مقدارش True باشه خروجیش هم True هست. در غیر این صورت خروجیش False هست. مثال زیر رو نگاه کنید :

x = True
y = True
z = x and y # z = True

x = True
y = False
z = x and y # z = False

x = False
y = True
z = x and y # z = False

x = False
y = False
z = x and y # z = False

مثلا بالا که واضحه چی شد جفت طرف ها درست باشه خروجی هم درسته. حالا مثال زیر رو نگاه کنید که یکم سخت تره. در این جور مثال ها اگر دو طرف شرط درست باشن طرف راست خروجی هست و اگر حتی یکیش هم نادرست باشه طرف چپ خروجیه ( اگر نفهمیدید چی شد زیاد مهم نیست به مرور که با این زبان کار کنید دستتون میاد). قسمت آخر رو دقت کنید چون طرف چپ "" هست و به معنی false هست پس خروجی خودش می شه.

>>> 1 and 2
2
>>> 1 and &quotHello World&quot
&quotHello World&quot
>>>&quot&quot and &quotPancakes&quot
&quot&quot

عملگر Or :

این مثل "یا" خودمون هست. خروجیش وقتی false هست که جفت طرف ها false باشه. مثال زیر رو نگاه کنید:

x = True
y = True
z = x or y # z = True

x = True
y = False
z = x or y # z = True

x = False
y = True
z = x or y # z = True

x = False
y = False
z = x or y # z = False

مثال زیر رو نگاه کنید :

>>> 1 or 2
1
>>> None or 1
1
>>> 0 or []
[]

اگر جفتشون درست باشه خروجی اولی می شه. ولی اگر یکیش یا جفتش نادرست باشه (مثل خط 3 و5) خروجی آخری می شه.

عملگر Not :

اینم دیوی کلاه قرمزی هست یعنی اگر درسته نتیجش غلط میشه اگر نادرست نتیجه درست مثال :

x = True
y = not x # y = False
x = False
y = not x # y = True

محاسبه از روی تنبلی

مثال زیر رو نگاه کنید :

>>> def print_me():
    print('I am here!')
>>> 0 and print_me()
0

خط اول و دوم یک تابع تعریف کردیم که کارش اینه که I am here رو چاپ کنه ولی اصلا اجرا نمی شه چرا ؟!

چون که پایتون می دونه که and وقتی خروجیش True میشه که جفتش True باشه حالا وقتی اولی 0 هست یعنی False پس دیگه نمیره سراغ دومی همون اولی رو میده بیرون. پس تنبلیش بی حکمت نیست.

دقت کنید !

مثال زیر رو نگاه کنید.

>>> a = 1
>>> b = 6
>>> if a and b > 2:
...         print('yes')
...   else:
...         print('no')
yes

هدفمون اینکه که بگیم اگر a و b جفتشون بزرگتر از 2 بودن yes رو بده به خروجی خب چون a مقدارش 1 هست پس نباید yes رو توی خروجی نشون بده که این کارو می کنه چرا ؟!

چون پایتون اینطوری این عبارت رو می خونه :

(a) and (b>2)

برای اینکه درستش کنیم باید از تنبلی بپرهیزیم مثل عبارت زیر :

>>> if a > 2 and b > 2:
...         print('yes')
...   else:
...         print('no')
no

یه مثال دیگه از این گونه اشتباه ها :

>>> a = 1
>>> if a == 3 or 4 or 6:
...     print('yes')
... else:
...     print('no')
yes

در حالی که باید No می داد yes داد. که این جوری درست می شه :

>>> if a == 3 or a == 4 or a == 6:
...     print('yes')
... else:
...     print('no')
no

یک راه راحترشم اینه که از in استفاده کنیم (سر جاش بیشتر توضیح می دم )

>>> if a in (3, 4, 6):
...     print('yes')
... else:
...     print('no')
no

خسته نباشید. یک سری نکات دیگه هم این زیر به مرور اضافه می شه ولی همینایی که گفتم فعلا کفایت می کنه. اگر سوالی دارید کامنت کنید.

درس بعدی در مورد حلقه ها هست:

https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D9%86%D9%87%D9%85-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7-jpuk2rsdw7d1