علاقهمند به ریاضی و هوشمصنوعی
نقشه راه یادگیری پایتون
قبل از اینکه بدونید نقشه راه پایتـــــون چیه، پیشــــــنهاد میکنم این پست رو تو ویرگــــــول ببینید. خــــب حــــالا که میدونید پایتون چیه و چرا باید اونو یاد بگیرین شما رو به خوندن این پست دعوت میکنم.
یادگـــــیری هر زبان برنامهنویــــسی از دو بخــــش تشـکیل میشه. یکی مفاهیم پایه و اســـاســــی (Fundamental) و یکی هم مباحث پیشرفته (Advanced Topic) اون زبان برنامهنویسی. مفاهیم پایه تو پایتـــون خیلی راحتن و اونا رو خیلی راحت میشه توی چند هفته (حداکثر ۲ ماه اگه اولین بارتون باشه میخواین برنامهنویسی کنید) یــاد گرفت. من تو این پست اول به تشریح نقشه مفاهیم سادهتر میپـردازم و بعد ســـــراغ مباحث پیـــشرفته میرم.
توجه : دستهبندی مفاهیم پایتون تو این پست بر اساس تجربیات خود من هست نه منبع خاصی.
۱. مفاهیم پایه و اساسی (Fundamental Of Python)
فرض کنید میخواین یه برنامه بنویسین که براتون کارای محاسباتی انجام بده و یا اینکه بخواین تو یه مـــــسابقه حل مسئـــــــــله شرکت کنید. تا حالا فکر کردین بعضی وقتا که میخواین فایلهای خودتون رو مرتب کنید خیــلی ازتون وقت میگیره! همه اینا رو با مفاهــــیم مقدماتی و پایه پایــــتون میتونید به راحتی انجام بدین. میتونید با داشتن تفکر الگوریتمی و ریاضیـــاتی و دونستن حداقلی از پایــــــتون توی مسابقات شرکت کنید و به سرعت برای سوالا کد بزنید، چون پایتون کد زدن رو آسون میکنه!
۱.۱. ورودی و خروجی
اولین مفـــهــــومی که توی هر زبان برنامــــهنویـــــسی یاد میــگـــیرین نحوه دریـــــافـــــت ورودی استـــاندارد (STDIN) و نحوه ارسال خروجی استاندارد (STDOUT) هست. شاید بخواین از کاربر یه مقداری رو دریافت کنید یا شایدم بخواین یه چیزایی رو به کاربر نشون بدین.
۱.۲. متغیرها و انواعشون
فرض کنید از کاربر یه عدد میگیرین و میخواین بعدا از اون استفاده کنید ولی نمیدونـید اونو کجا ذخیره کنید؟! متغیر چیزیه که شما باید تو این شرایــــط ازش استفاده کنید. متغیرا تو زبــانای برنامهنویسی دقیقا مثل متغیرها تو جبر ریاضی میمونن. مثلا عدد ۱۵ رو توی متغیری به اسم X قرار میدیم و بعدا اگه بگیم X منظـورمون همون عدد ۱۵ هست. توی زبان برنامهنویسی علاوه بر اعداد حقیق میتونــــــــیم از متغــــــیرا برای ذخیره کردن کاراکترها، رشتهها و مقادیر منطقی (صفر و یک) استفاده کنیم. به طور کلی تو پایتون چند نوع متغــــیر وجــــود دارن که به صورت زیر هستن.
- رشتهها (String)
- منطقی (Boolean)
- اعداد اعشاری (Float)
- اعداد صحیح (Integer)
۱.۳. دستورات کنترلی
برای انجام کارای تکراری از دستورات کنترلی مثل حلقه for و while استفاده میشه. همینطور بــرای شرطگذاری تو پایتون از دستورات if و else و ترکیب این دوتا یعنی elif استفاده میکنیم. دانشمندای کامپـیوتر میگن که هر برنامهای تو دنیا به یه سری متغیر و دستورات کنــــــــترلی ساده ختــــم میشه. یعنی اینکه این دستورات مهمترین ساختار هر زبان برنامهنویسی هستن.
۱.۴. توابع و کاربردشون
بعضی موقعها میخواین یه کار رو چندین بار انجام بدین. برا اینکه یه ساختار داشته باشین که با اســتفــــــاده از اون یه سری از کارا به صورت خودکـــــــار انجام بشه از تابع استفاده میکنیم. تابع دقــــــــیقا مثل مفهوم تابــــــع تو ریاضیه. بعضی از توابع ورودی میگیرن و بعـــضـــیـــــاشون نمیگیرن. به هر حال بســــتــــگی به هدفــــــمـــــون داره. تو پایتون دو نوع تابع وجود داره که الان براتون میگم.
- توابع ساده (Simple Function)
- توابع ناشناس (Lambda Function)
از نظر من شما باید حداقل با توابع زیر آشنا باشید و بتونید کارای مختلفی با اونا انجام بدین. یاد گرفـــــــتن توابع متفاوت تو یه زبان برنامهنویسی این قدرت رو به شما میده که کدتون رو به صورت تمیزتر بنویــــــسید و این نکته رو فراموش نکنید که این توابع توسط افراد خبرهای پیادهسازی شـــدهاند که با این وجود بســـــیار بهینه میباشند.
- تابع map که روی یه شئ قابل پیمایش اجرا میشه و همه مقادیرو طبق خواسته شما تغییر میده.
- تابع sum که مجموع مقادیر یه شئ قابل پیمایشو محاسبه میکنه.
- توابع min و max که به ترتیب کمترین و بیشترین مقدار یه شئ قابل پیمایشو پیدا میکنه.
- تابع filter که مقادیر خاصی از یه شئ قابل پیمایشو برا شما پیدا میکنه.
- تابع any که چک میکنه آیا حداقل یکی از مقادیر یه شئ قابل پیمایش شرایط اعلامشده رو داره یا نه.
- تابع all که چک میکنه آیا همه مقادیر یه شئ قابل پیمایش شرایط اعلامشده رو دارن یا نه.
۲. ساختماندادهها (Data Structures)
وقتی این همه داده و اطلاعات اطراف خودمــــون میبینیم باید انتظار داشـــــته باشیـــم این هــــمه داده به صورت خیلی ساده و بدیهی مدیریت و سازماندهی نمیشن. نحوه ذخیرهسازی دادهها روی سرعت و نحـوه دسترسی به اونا و پیدا کردن یه مقدار مشخص بین انبوهی از اون دادهها تاثیرگذاره. هر ساختمان داده یه ساختار مشـخص داره که داده رو به یه روش مشخص توی خودش ذخیـــــره میکنه و البته برای دستــــرســـــی به دادهها هم روش خاص خودش رو داره. ساختماندادهها و طراحی الگوریتم یکی از مهمترین درسای دانشگاهه که یه مهـــنـــــدس کامپیوتر باید روی مفاهیم اونا تسلط داشته باشه. اما مهمترین و سادهترین ساخـــــــتماندادههایی که تو پایتون هستن رو تو ادامه میتونید ببینید.
۲.۱. لیست (List)
بوقتی که میخوایم یه سری از اطلاعـات رو پیش هم نگه داریم از لیست استفاده میکنیم. به طـــور کلـــی شاید اسم آرایه (Array) رو شنیده باشید. آرایهها به دو نوع پویـــــا (Dynamic) و ایســــــتا (Statistic) نقسیم میشن. آرایه ایستا محدودیتهای زیادی داره ولی ســـــرعت اون نسبت به آرایه پویا خیــــــلی بیشتره. محدودیتهایی که آرایه ایستا داره به این صورته.
- همه مقادیری که توی این نوع آرایه ذخیره میشن هم نوع هستن مثلا همشون عدد صحیح باشن.
- تعداد مقادیری که میخوایم توی این نوع آرایه ذخیره کنیم باید از قبل مشخص بشه.
- اضافه کردن یه مقدار جدید به آرایه بعد از تعریفش امکانپذیر نیست.
- و ...
اما آرایههای پویا با وجود سرعت کم همهی معایــــــــــــب آرایه ایستا رو برطرف میکنن و به هــــــمین خاطر بوجود اومدن. پایتون از آرایه پویا استفاده میکنه. به طور کلی به آرایههای پویا لیـــــست هم میگن. عملــــیاتهایی که روی یه لیست میتونید انجام بدین به این صورتن.
- اضافه کردن یک یا چند مقدار مشخص
- حذف یه مقدار مشخص
- پیدا کردن یه مقدار مشخص
- دسترسی به یک یا چند مقدار توی مکانهای (Indices) مشخص
۲.۲. مجموعه (Set)
این ساختارها دقیقا مثل مجوعهها تو ریــــــاضی میمــونن با این تفاوت که میشه تو اونا متـــــــغیرهــــــــایی از نوع مختلفی ذخیره کرد. تفاوتهای مجموعه نسبت به لیست به این صورته.
- سرعت دسترسی و پیدا کردن یه مقدار مشخص تو مجموعه خیلی بیشتره.
- ترتیب مقادیر از الگوی مرتبی مثل ترتیب مقادیر لیست پیروی نمیکنه.
بعد از ایجاد یه مجموعه شما احتمالا نیاز دارین یه سری عملیات روی اون انجام بدین. عملیاتهایی که روی یه مجموعه میتونید انجام بدین به شکل زیر هستن.
- اضافه کردن یه مقدار مشخص
- حذف یه مقدار مشخص
- پیدا کردن یه مقدار مشخص
- ادغام کردن دو مجموعه
- اجتماع (Union) و اشتراک (Intersection) بین دو مجموعه
- تفاضل (Subtraction) و تفاضل تقارنی (Symmetric Subtraction) بین دو مجموعه
۲.۳. لغتنامه (Dictionary)
فرض کنید میخــــــــــواین به جای اســــــتفاده از اندیس عددی به عنوان دسترسی به مقادیــــر یه لیست از اندیس رشتهای هم بتونید اســــتفاده کنید. یعنی مثلا به جای اینکه بگــــین خونه اول مـــــقدارش چـــــنده بگــــین خونـــهی ساریـــنا مقــــدارش چنده. مثلا مــــــیتونید سن هر نفر رو با توجه به اســــمش ذخیره کنید. هر مقـــــداری که توی لغـــــــــتنامه قرار میگیره یه کلید (Key) متمیاز و یه مقــــــدار (Value) مشخص داره. کلـــــید مثل همون اندیس میمونه تو آرایه و لیست. عملیاتهایی که میتونید روی یه لغتنامه انجام بدین به این صورتن.
- اضافه کردن یه مقدار با کلید مشخص
- حذف یه مقدار مشخص با کمک کلید اون
- پیدا کردن یه مقدار مشخص با کمک کلید اون
- ادغام کردن دو لغتنامه
- دسترسی به مقادیر و کلیدها به صورت مستقل
۳. کتابخونههای مفید و کاربردی (Useful Libraries)
خیلی از کاراتون رو میتونید با کتابخونههای آماده که توی پایتون به صورت پیشفرض وجود داره انجام بدین. به طور کلی تعداد خیلی زیادی کتابخونه تو پایتون هست که من چندتا از اون را براتون میگم.
۳.۱. کتابخونه ریاضی
با استفاده از این کتابخونه که تو پایتون به نام math قابل استفاده است میتونید کارای محاســباتی و ریاضیاتی مختلفی انجام بدین. توابع و مقادیری که توی این کتابخونه هست به صورت زیر دستهبندی میشن.
- توابع جبری مثل بزرگترین مقسومعلیه مشترک، قدر مطلق، جزء صحیح و ...
- توابع مثلثاتی مثل سینوس، کسینوس، ثانژانت و ...
- توابع توانی و لگاریتیمی مثل لگاریتم، توان، جذر و ...
- مقادیر کاربردی مثل عدد پی، عدد نپر، مقدار فرضی بینهایت و ...
۳.۲. کتابخونه زمان و تاریخ
با استفاده از این کتابــــخونه که تو پایــــتون به نام datetime قابل استفاده است میتونید با تاریــــخ و زمان بازی کنید. بعضی کارای شـــــما نیاز داره که به تاریــــــخ یه زمان مشخص دسترسی داشته باشین. کارای جالــــــبی که با استفاده از این کتابخونه میتونید بکنید به شکل زیر هستن.
- دسترسی به زمان و تاریخ
- ایجاد مقایسه بین دو یا چند تاریخ و زمان مشخص
- استفاده از قالببندی زمان و تاریخ مشخص و متنوع
۳.۳. کتابخونه کار با سیستمعامل
این کتابخونه مثل یه خط فرمان کنترل کل سیســــــــتمعامل رو به شـــــــما میده. فرض کنید میخــــــواین یه سری از فایلهاتون رو مرتب کنید. با کمک این کـــتــابـــخــونــه این کار رو با کمترین زمان ممــــکن میتونید انجام بدین. مهمترین کارای مختلفی که با این کتابخونه میشه انجام داد به شکل زیر هستن.
- تغییر نام فایلها
- انتقال فایلها
- ایجاد و حذف پوشهها
- پیمایش ساختار درختی پوشهها و فایلها
- استفاده از خط فرمان سیستمعامل
اما برای اینکه بتونید به صورت کاربردیتر از این کتابخونه استفــــاده کنید بهتره که کار با فایلها و به عبارتی I/O رو تو پایتون بلد باشــــــین. دستـــــورات کار با فایل به صورت پـــــیشفرض تو پایتون هستن و لازم به اســــتفاده از کتابخونه خاصی نیست. کارایی که میتونید با استفاده از این دستورات انجام بدین به این شکل هستن.
- ایجاد فایلهای متنی و باینری
- ویرایش فایلهای متنی و باینری
- کپی کردن فایلهای متنی و باینری
در دنیا قالبهای خاصی برا ذخیرهسازی دادهها در قالب فایلهای متنی ارائه شده. به عنـوان مثــال میتونیم به قالب اکسامال (XML)، جیسون (JSON) و سیاسوی (CSV) اشاره کرد. پایتون دارای یـــک کــتــابــخانه به نام json میباشد که میتوانید از آن برای کار با قالب جیسون استفاده کنید.
۴. مباحث پیشرفته (Advanced Topic)
خب دیگه بعد از معرفی کلی ساختارهای اصلی پایتون وقتشه که یه سر به مفاهیم پیشرفته بزنــــیم. با توجه به پیشرفته بودن این مفاهیم یاد گرفتن اوناهم نسبت به مباحث قبل ســـخــــــتتـره. خب بریم سراغ این مفاهیم.
۴.۱. برنامهنویسی شئگرایی (Objected Oriented Programming)
با استفاده از این مفهوم میتونید چیزایی که توی دنیای واقعی وجود داره رو تو پایتون شبــیـــهســــازی کنید. توی پایتون شما میتونید متغیر عددی، رشتهای، منطقی تعریف کنید ولی شاید بخواین یه متغیر از نـــوع انـــســان یا اتومبیل تعریف کنید :) با این وجود یاد گرفتن این مفهوم و انس گرفتن با مفهوم بسیار قشنگ شـــئگـــرایـــی تو درک مفاهیم پیچیده برنامهنویسی کمکتـــــــون میکنه. مفاهیم اصلی که تو پایتـــــون در زمــــینه شـــــئگرایی وجود دارن به شکل زیر هستن.
- کلاسهای ساده، والد و فرزند
- مفهوم ارثبری
- توابع ایستا، شخصی، نیمه شخصی و ...
- انواع دسترسیها
- کپسولهسازی و انواع متغیرها
- و ...
۴.۲. پردازشهای موازی و تردها (Parallel Processes & Threads)
شاید بخواین یه سری کارها رو باهم انجام بدین. مثلا اگه یه سایت داشته باشین و بخــواین بــه یه میلیون نفـــر نفر از اعضای وبسایت تو یه لحظه پیام بدین اگه به صورت همروند انجام نشه باید به ترتیب و یکــــــی یکـــــــی به افراد پیام داده بشه. به طور مثال اگه دادن هر پیام ۲ ثانیه از وقت CPU رو بگیره آخــــرین نفر بعد از ۲,۰۰۰,۰۰۰ یعنی حدود ۲۳ روز پیام رو دریافت میکنه. ۲۳ روز خیــــــــــــلی زیاده برا جلوگیری از این کارا از پردازش مــــــــوازی استفاده میکنیم.
۴.۳. برنامهنویس سوکت (Socket Programming)
برا برنامهنویسی تو محیط شبکه از این مفهوم و ساختار استفاده میکنیم. مثلا میخواین یه برنامه بنویسین که یه سری دستور رو از طریق کامپیوتر شماره ۱ شـــبکه و کامپیوتر شماره ۲ شـــبکه ارسال کنه یا حتی شاید بخواین یه چتروم توی شبکه خصوصی خودتون با پایتون بسازین.
۵. معرفی چندتا از برنامههای ساده پایتونی خودم
تو این بخش میخوام ســــهتا از برنامههایی که خــــودم وقتی تازه مفاهـــیم بالا رو تو پایتون تموم کرده بـــودم رو بهتون توضیح بدم. بریم سراغ برنامهها :)
۵.۱. ترک سیگار
این برنامه خیلی سادست ولی خب یکم جالبه. شما به برنامه میگین که میخواین سـیگار بکشین و برنامه چک میکنه اگه شما تو دو ساعت گذشته سیگار نکشیده باشین بهتون میگه بـــازم میخــــوای بــکــشی؟ و بعد از تایید شما تاریخ و زمان اون لحظه رو ثبت میکنه. اما اگه تو دو ساعت گذشته سیگار کشیده باشـــــین بهتون میگه که چقدر مونده تا بتونید یه سیگار دیگه بکشین.
۵.۲. چتروم دو نفره آفلاین
این برنامه دو تا بخش داره یکی کلاینت و یکی هم سرور. ابتدا سرور یه پورت و آیپی از شما میگـــیره و طـــــــبق اون یه سوکت رو شبکه ایجاد میکنه. بعدش شما با کلاینت به اون آیپی و پورت وصل میشین. الـان میتونید دونفره با هم چت کنید. مثلا میتونید سرورو رو لپتاپتون اجرا کنید و با اجرای کلاینت رو گوشـــیتــون به لپـــتــــاپ وصل بشین.
۵.۳. شجرهنامه (FamilyTree)
تو این برنامه علاوه بر مفاهیم پایتون مفاهیم ساخــــــتمانداده درخــت رو هم باید بدونید. اعضای خونوادتون رو به این برنامه میدین و بعد از اون میتونید به این اطلاعات به صورت ساختاریافته و سازماندهی شده دسترسی داشته باشین. مثلا اگه بگین که پسر شما نسبتش با پدرتون چیه برنامه میگه که نوه پسری.
۶. متخصص پایتون (Python Expert)
خب این همه توضیح دادیم حالا نهایتا شما باید بعد این همه یادگـــیــــری چیکار کنید. الـــبته بایــد بــگــــم که من مطالب رو گسترش دادم وگرنه اگه علاقه داشته باشــین یادگیری این مفاهــــیم خیلی براتون شـــــیـــرین و جذاب میشه. بعد از یـــــادگیری این مــفــاهــیـــم شـما باید حوزه موردنظر خودتون رو انتخاب کنید. اینکه میخـــواین وارد هـــــــوشمصــــــنوعی بشین یا طراحی وبســــایت یا تحلیل داده و چــندین حوزه دیگه. به طور کلی حــــوزههایی که میتونید انتخاب کنید به صورت زیر هستن.
- توسعه وبسایت به کمک کتابخونههای Django و Flask
- دانشمند داده یا مهندس یادگیری ماشینی به کمک تعداد خیلی زیادی کتابخونه
- برنامهنویس علمی جهت انجام کارهای محاسباتی و ...
- و ...
۷. منابع یادگیری پایتون
پایتون چون خیلی زبان محبوبیه منابع زیادی برای یادگیریش وجود داره. دورهای زبان اصلی زیــادی از انتشارات یودمی و سایر انتشارات مـــعـروف دنیا توی سایت فرینمدیا در دسترسی هست. اما میتونم بـــگم قــــویتـــریـــن آموزش فارسی برا پایتون آموزش تعاملی سایت کوئرا هست. این آموزش تمامی ســـرفصلها رو با تــمـــرینهای مربوطه در اختیار شما قرار میده. این آموزش ساعتها و ساعتها برای طـــــــراحی و بهبود زمان برده. دوره کوئرا روز به روز توسط فیدبکهای شما عزیزان توسط این تیم در حال بهبوده.
با تشکر؛ محمدرضا کریمینژاد کوچکترین عضو کوئرا
دستیار آموزشی دانشگاه شمسیپور، برنامهنویس و پشتیبان علمی کوئرا
مطلبی دیگر از این انتشارات
انتخاب زبان برنامه نویسی برای میکروکنترلر الکترونیک
مطلبی دیگر از این انتشارات
شروع برنامه نویسی PHP از صفر تا صد! - بخش اول: مقدمه
مطلبی دیگر از این انتشارات
دیزاین پترن، الگوی طراحی Builder