هر چه می خوانم می فهمم بیشتر نمی دانم - دانش آموخته برق و کامپیوتر سابق
پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت هشتم: عبارات شرطی)
سلام رفقا
آموزش پایتون رو برای ورود به دنیای هوش مصنوعی شروع کردیم. اگر اولین باره با پایتون آشنا می شید به لینک زیر برید و از اول بیاین جلو.
این قسمت که بخش هشتم آموزش پایتون هست در ارتباط با شرط هست. خب این خیلی به زبون ما ها نزدیکه می گیم اگر این بود این کارو کن و اگر اون بود اون کارو کن اگرم هیچ کدوم نبود این کارو کن. همینی که الان گفتم به زبان پایتون می شه :
number = 5
if number > 2:
print("Number is bigger than 2.")
elif number < 2: # Optional clause (you can have multiple elifs)
print("Number is smaller than 2.")
else: # Optional clause (you can only have one else)
print("Number is 2.")
چون 5 از 2 بزرگتره جمله اول چاپ میشه. اگر از Else if که در زبون های دیگه رایجه استفاده کنید خطا می گیره. پس یادتون باشه توی پایتون Elif هست. پس اگر جلوی if عبارت درست یا همون True بود اون شرط اجرا میشه. مثلا در مثال ما number>2 هست یعنی 5>2 یک عبارت درست True هست که دستورات داخلش اجرا میشن.
نکته جالب اینه که می شه شرط یک خطی هم نوشت اگر با زبون های برنامه نویسی دیگه کار کرده باشید از این ساختار سورپرایز می شید. مثال زیر رو ببینید:
n = 5
"Hello" if n > 2 else "Bye"
# 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: '', "", (), []
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 "Hello World"
"Hello World"
>>>"" and "Pancakes"
""
عملگر 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
خسته نباشید. یک سری نکات دیگه هم این زیر به مرور اضافه می شه ولی همینایی که گفتم فعلا کفایت می کنه. اگر سوالی دارید کامنت کنید.
درس بعدی در مورد حلقه ها هست:
مطلبی دیگر از این انتشارات
دنیای شیرین پردازش با OpenCL
مطلبی دیگر از این انتشارات
آموزش پایتون کلید ورود به دنیای هوش مصنوعی (گام دوم - قسمت شانزدهم:دیکشنری)
مطلبی دیگر از این انتشارات
دیتا ساینس، اینبار خوشگلتر!