> > > آموزش زبان برنامه نویسی پایتون از 0 تا 100
> > > قسمت پانزدهم
سلام. امیدوارم سال خوبی رو شروع کرده باشید و تعطیلات عید رو به شادی پشت سر گذاشته باشید.
خوب قرار بود در این جلسه بعد از حل تمرین های جلسه ی قبل، توابع بازگشتی رو توضیح بدم.
> > > قسمت پانزدهم
سلام. امیدوارم سال خوبی رو شروع کرده باشید و تعطیلات عید رو به شادی پشت سر گذاشته باشید.
خوب قرار بود در این جلسه بعد از حل تمرین های جلسه ی قبل، توابع بازگشتی رو توضیح بدم.
تمرین ها رو یه بار دیگه نگاه میکنیم 👇
تمرین اول:
تابعی بنویسید که یک آرگومان عدد بگیره و اعداد زوج بین 0 تا اون عدد رو در ساختار داده ای لیست بهمون بده. (حواستون باشه که وقتی میگم "بهمون بده" اصلا منظورم چاپ کردنشون نیست، بلکه تابع باید خروجی داشته باشه.)
تمرین دوم:
تابعی بنویسید که خروجی تمرین بالا رو (یعنی لیستی که اعداد زوج درش ذخیره شدن) رو به عنوان آرگومان بپذیره و اعداد لیست رو با هم جمع کنه و بهمون بده.
تمرین سوم:
تابعی بنویسید که خروجی تابع بالا رو (یعنی یک عدد) به عنوان آرگومان بپذیره و بهمون بگه عدد چند رقمیه (مقدار رقم هارو باید تحت عنوان عدد بهمون بده)
تمرین چهارم:
تابعی بنویسید که 3 تابع قبل رو به کار بگیره، به این صورت که بهش عدد میدیم به عنوان آرگومان و بعد از گرفتن لیست اعداد زوج بین 0 و اون عدد از تابع اول، اعداد لیست رو جمع میکنه و در آخر میگه اون عدد چند رقمیه.
تمرین اول:
تابعی بنویسید که یک آرگومان عدد بگیره و اعداد زوج بین 0 تا اون عدد رو در ساختار داده ای لیست بهمون بده. (حواستون باشه که وقتی میگم "بهمون بده" اصلا منظورم چاپ کردنشون نیست، بلکه تابع باید خروجی داشته باشه.)
تمرین دوم:
تابعی بنویسید که خروجی تمرین بالا رو (یعنی لیستی که اعداد زوج درش ذخیره شدن) رو به عنوان آرگومان بپذیره و اعداد لیست رو با هم جمع کنه و بهمون بده.
تمرین سوم:
تابعی بنویسید که خروجی تابع بالا رو (یعنی یک عدد) به عنوان آرگومان بپذیره و بهمون بگه عدد چند رقمیه (مقدار رقم هارو باید تحت عنوان عدد بهمون بده)
تمرین چهارم:
تابعی بنویسید که 3 تابع قبل رو به کار بگیره، به این صورت که بهش عدد میدیم به عنوان آرگومان و بعد از گرفتن لیست اعداد زوج بین 0 و اون عدد از تابع اول، اعداد لیست رو جمع میکنه و در آخر میگه اون عدد چند رقمیه.
تمرین اول 👇
def test1(number):
list = []
index = 0
while index < number:
if index % 2 == 0: # agar adad zoj bud
list.append(index)
index = index + 1
return list
نیاز به توضیح نداره، یه لیست خالی ایجاد کردیم و اعداد رو از صفر تا آرگومان ریختیم توش (در صورت زوج بودن ) و در آخر لیست رو به عنوان مقدار تابع بازگشت دادیم.
def test1(number):
list = []
index = 0
while index < number:
if index % 2 == 0: # agar adad zoj bud
list.append(index)
index = index + 1
return list
نیاز به توضیح نداره، یه لیست خالی ایجاد کردیم و اعداد رو از صفر تا آرگومان ریختیم توش (در صورت زوج بودن ) و در آخر لیست رو به عنوان مقدار تابع بازگشت دادیم.
تمرین دوم 👇
def test2(list):
sum = 0
index = 0
while index < len(list):
sum = sum + list[index]
index = index + 1
return sum
یه عدد صفر در نظر گرفتیم و لیست اعداد رو پیمایش کردیم و به هر عدد رسیدیم، اونو با عددی که در نظر گرفته بودیم جمع کردیم.
اما یه راه خیلی ساده تر:
تابع تو کار ()sum در پایتون دقیقا کارش همینه، یعنی مجموعه ای از اعداد رو میگیره و جمعشون رو بهمون میده، پس کد قبل رو کوتاه تر میکنیم:
def test2(list):
return sum(list)
def test2(list):
sum = 0
index = 0
while index < len(list):
sum = sum + list[index]
index = index + 1
return sum
یه عدد صفر در نظر گرفتیم و لیست اعداد رو پیمایش کردیم و به هر عدد رسیدیم، اونو با عددی که در نظر گرفته بودیم جمع کردیم.
اما یه راه خیلی ساده تر:
تابع تو کار ()sum در پایتون دقیقا کارش همینه، یعنی مجموعه ای از اعداد رو میگیره و جمعشون رو بهمون میده، پس کد قبل رو کوتاه تر میکنیم:
def test2(list):
return sum(list)
تمرین سوم 👇
این تابع قراره یه عدد رو به عنوان آرگومان بگیره و بگه چند رقمیه, خوب ابتدا عدد رو از ساختار داده ای عدد به رشته تبدیل میکنیم، بعدش با تابع ()len تعداد کاراکتر هاش در میاد:
def test3(number):
return len(str(number))
به همین راحتی !
این تابع قراره یه عدد رو به عنوان آرگومان بگیره و بگه چند رقمیه, خوب ابتدا عدد رو از ساختار داده ای عدد به رشته تبدیل میکنیم، بعدش با تابع ()len تعداد کاراکتر هاش در میاد:
def test3(number):
return len(str(number))
به همین راحتی !
تمرین چهارم و آخر 👇
قرار بود تو این تمرین از 3 تابع که در تمرین های قبل نوشته شد استفاده کنیم به این صورت که به این تابع یه عدد میدیم، عدد رو به تابع تمرین اول میده و اون یه لیست از اعداد زوج از 0 تا اون عدد بهمون میده، بعد این لیست اعداد رو به تابع تمرین دوم میدیم و اون برامون جمعش میکنه و در آخر جمع اعداد رو به تابع تمرین سوم میدیم و اون میگه عدد چند رقمیه!
روش معمولی:
def test4(number):
list = test1(number)
sum = test2(list)
length = test3(sum)
return length
روش حرفه ای و کوتاه تر:
def test4(number):
return test3(test2(test1(number)))
خیلی راحته فقط کافیه به یاد بیارید که اولویت با داخل پرانتزه !
قرار بود تو این تمرین از 3 تابع که در تمرین های قبل نوشته شد استفاده کنیم به این صورت که به این تابع یه عدد میدیم، عدد رو به تابع تمرین اول میده و اون یه لیست از اعداد زوج از 0 تا اون عدد بهمون میده، بعد این لیست اعداد رو به تابع تمرین دوم میدیم و اون برامون جمعش میکنه و در آخر جمع اعداد رو به تابع تمرین سوم میدیم و اون میگه عدد چند رقمیه!
روش معمولی:
def test4(number):
list = test1(number)
sum = test2(list)
length = test3(sum)
return length
روش حرفه ای و کوتاه تر:
def test4(number):
return test3(test2(test1(number)))
خیلی راحته فقط کافیه به یاد بیارید که اولویت با داخل پرانتزه !
پس کل این 4 تمرین رو در 14 خط کد برنامه نویسی نوشتیم !
این تمرینا فقط یه سری مثال بودن که کمک کردن بفهمیم کجا ها لازم نیست الکی متغیر بسازیم و یادگرفتن توابع پیش ساخته ی پایتون مثل ()sum میتونه خیلی کمک کننده باشه، و همچنین تقسیم برنامه بین چند تابع که هر کدوم وظیفه ی خاصی رو انجام میدن، میتونه مارو تبدیل کنه به یه برنامه نویس مرتب و منظم !
این تمرینا فقط یه سری مثال بودن که کمک کردن بفهمیم کجا ها لازم نیست الکی متغیر بسازیم و یادگرفتن توابع پیش ساخته ی پایتون مثل ()sum میتونه خیلی کمک کننده باشه، و همچنین تقسیم برنامه بین چند تابع که هر کدوم وظیفه ی خاصی رو انجام میدن، میتونه مارو تبدیل کنه به یه برنامه نویس مرتب و منظم !
حالا وقت این رسیده یه نگاه اجمالی به توابع بازگشتی بندازیم:
قبل از توضیح دوست دارم بهتون بگم که اصلا به چه دردی میخوره؟
تا بحال چیزی به نام زبان های تابعی به گوشتون خورده؟
اصلا میدونید فرقشون با زبان های شئ گرا مثل پایتون چیه؟
یه خصوصیت مهمشون اینه که (اگر از نوع pure functional باشن) حلقه ندارن !
پیش خودتون فکر میکنید که چطور ممکنه یه زبان حلقه نداشته باشه و یا این که زبان های تابعی زبان های ضعیفی هستند و ...
اما اینطور نیست و بهتره بدونید برنامه های بسیار قدرتمندی هم با این زبان ها نوشته شده، مثل سیستم چت فیسبوک یا chat.facebook.com که توسط یه برنامه که به زبان تابعی نوشته شده اجرا میشه و تونسته چت رو همزمان بین چندین میلیون نفر کاربر فعال برقرار کنه !
خوب بجای حلقه از چی استفاده میشه؟
از توابع بازگشتی.
قبل از مثال زدن این رو بگم که درسته پایتون از توابع بازگشتی پشتیبانی میکنه، ولی همچین لازمم نیست که حتما یادش بگیرید.
قبل از توضیح دوست دارم بهتون بگم که اصلا به چه دردی میخوره؟
تا بحال چیزی به نام زبان های تابعی به گوشتون خورده؟
اصلا میدونید فرقشون با زبان های شئ گرا مثل پایتون چیه؟
یه خصوصیت مهمشون اینه که (اگر از نوع pure functional باشن) حلقه ندارن !
پیش خودتون فکر میکنید که چطور ممکنه یه زبان حلقه نداشته باشه و یا این که زبان های تابعی زبان های ضعیفی هستند و ...
اما اینطور نیست و بهتره بدونید برنامه های بسیار قدرتمندی هم با این زبان ها نوشته شده، مثل سیستم چت فیسبوک یا chat.facebook.com که توسط یه برنامه که به زبان تابعی نوشته شده اجرا میشه و تونسته چت رو همزمان بین چندین میلیون نفر کاربر فعال برقرار کنه !
خوب بجای حلقه از چی استفاده میشه؟
از توابع بازگشتی.
قبل از مثال زدن این رو بگم که درسته پایتون از توابع بازگشتی پشتیبانی میکنه، ولی همچین لازمم نیست که حتما یادش بگیرید.
زمان نوشتن یک تابع، شما میتونید داخل تابع، خود همون تابعی که دارید مینویسید رو صدا بزنید، در این صورت هر بار تابع اجرا میشه به خودش میرسه و خودش رو اجرا میکنه و ... به همین شکل تشکیل حلقه میده !
یه مثال میزنم که یه حلقه بی نهایته !
👇👇👇👇
یه مثال میزنم که یه حلقه بی نهایته !
👇👇👇👇
خوب به راحتی میتونیم با اضافه کردن یک سری شرط، برای توابع بازگشتی حد خاصی رو تعیین کنیم 👇
من نمیدونم شما چه برنامه ریزی برای آینده ی برنامه نویسیتون دارید، ولی اگر قصد این رو دارید که به یه زبان تابعی مهاجرت کنید، بهتره که توابع بازگشتی رو تو یه زبان قابل فهم و ساده مثل پایتون تمرین کنید.
در جلسه ی بعد، بعد از چند مثال کاربردی، به سراغ تعریف کلاس ها میریم، و از اینجا به بعد دیگه قراره شئ بسازیم، و بقیه ی مباحث رو در کلاس ها تمرین میکنیم و یاد میگیریم.
در جلسه ی بعد، بعد از چند مثال کاربردی، به سراغ تعریف کلاس ها میریم، و از اینجا به بعد دیگه قراره شئ بسازیم، و بقیه ی مباحث رو در کلاس ها تمرین میکنیم و یاد میگیریم.
خوب در این جلسه قصد داریم به ادامه مباحث شی گرایی بپردازیم و به احتمال زیاد مبحث شی گرایی رو تموم کنیم
ممکن است شما بخواهید کلاسی تعریف کنید که فقط و فقط از این کلاس جهت ارث بردن استفاده کنید و هیچ منظور دیگری از تعریف این کلاس نداشته باشید در این گونه مواقع می توانید کلاس رو به صورت abstract تعریف نمایید کلاس های های abstract فقط و فقط برای ارث بردن و همچنین تقویت مبحث کپسوله سازی تعریف می شوند از کلاس های abstract نمی توان شی ای ساخت و یا ازشون اجرایی گرفت کلاس های abstract تمام ویژگی های یه کلاس عادی رو به جز ایجاد شی از کلاس رو دارند و برای کپسوله سازی که قبلا در بخش متدها این مبحث رو توضیح دادیم بهترین گزینه هستن