> > > آموزش زبان برنامه نویسی پایتون از 0 تا 100
> > > قسمت یازدهم
سلام خدمت همه علاقه مندان به پایتون.
اگر یادتون باشه در قسمت قبل با چند کلاس و تابع تو کار آشنا شدیم و ساختار داده ای لیست رو معرفی کردیم.
در این قسمت قرار شد مهم ترین فرق ساختار داده ای رشته و لیست رو یاد بگیریم، که این امر میتونه برای نوشتن برنامه های کاربردی خیلی مهم باشه.
> > > قسمت یازدهم
سلام خدمت همه علاقه مندان به پایتون.
اگر یادتون باشه در قسمت قبل با چند کلاس و تابع تو کار آشنا شدیم و ساختار داده ای لیست رو معرفی کردیم.
در این قسمت قرار شد مهم ترین فرق ساختار داده ای رشته و لیست رو یاد بگیریم، که این امر میتونه برای نوشتن برنامه های کاربردی خیلی مهم باشه.
بهتره اول یک بار دیگه شباهت ها رو مرور کنیم.
_ هم لیست ها و هم رشته ها قابلیت این رو داشتن در اعداد صحیح ضرب بشن.
_ هم لیست ها و هم رشته ها قابلیت این رو داشتند با ساختار داده ای همجنس خودشون جمع بشن.
_میتونستیم با استفاده از براکت ها به کاراکتر ها در رشته ها و به اعضا در لیست دسترسی داشته باشیم و قسمتی از یک رشته یا لیست رو به دلخواه جدا کنیم.
_ هم لیست ها و هم رشته ها قابلیت این رو داشتن در اعداد صحیح ضرب بشن.
_ هم لیست ها و هم رشته ها قابلیت این رو داشتند با ساختار داده ای همجنس خودشون جمع بشن.
_میتونستیم با استفاده از براکت ها به کاراکتر ها در رشته ها و به اعضا در لیست دسترسی داشته باشیم و قسمتی از یک رشته یا لیست رو به دلخواه جدا کنیم.
مهمترین فرق این دو ساختار اینه که شما میتونید اعضای موجود در لیست رو تغییر بدید، ولی نمیتونید کاراکتر های موجود در رشته رو تغییر بدید.
در آموزشهای آنلاین وقتی این بحث رو مطرح میکردم بعضی ها میگفتن در رشته ها هم این عمل قابل انجامه و مثال زیر رو براش میزدن.
> > > test = "salam"
> > > test = test[:3]
و با یه نگاه حق به جانب (البته آموزش آنلاین بود ولی خوب این نگاه رو حس میکردم) منتظر جواب بعدی من بودند !
کاری که تو این مثال انجام شده در واقع ساختن یک متغیر جدید هستش، نه تغییر مقدار اون.
> > > test = "salam"
> > > test = test[:3]
و با یه نگاه حق به جانب (البته آموزش آنلاین بود ولی خوب این نگاه رو حس میکردم) منتظر جواب بعدی من بودند !
کاری که تو این مثال انجام شده در واقع ساختن یک متغیر جدید هستش، نه تغییر مقدار اون.
خوب در این قسمت میخوام فرق بین تابع و کلاس رو بهتون بگم. البته نه فرق کلی، بلکه به اندازه نیاز.
خوب برنامه نویسان 0 کیلومتر الان نه میدونن کلاس چیه و نه میدونن تابع چیه !
من هم هنوز صلاح نمیدونم که این دو مبحث رو تدریس کنم، پس چرا میخوام فرقشون رو بگم؟
به زودی میفهمید !
خوب برنامه نویسان 0 کیلومتر الان نه میدونن کلاس چیه و نه میدونن تابع چیه !
من هم هنوز صلاح نمیدونم که این دو مبحث رو تدریس کنم، پس چرا میخوام فرقشون رو بگم؟
به زودی میفهمید !
تابع:
اگر بخوام خیلی خیلی ساده بیانش کنم، میشه بهش گفت یک قطعه کد برنامه نویسی که میتونه ورودی یا ورودی هایی رو بگیره و در صورت لزوم خروجی هم داشته باشه و هدف خاصی رو دنبال میکنه.
کلاس:
کلاس هم درست مثل تابع میتونه ورودی یا ورودی هایی داشته باشه. تفاوت مهمش اینه که کلاس میتونه شامل چندین تابع باشه.
در واقع کلاس و تابع مثال استان و شهرستان رو دارن!
اگر بخوام خیلی خیلی ساده بیانش کنم، میشه بهش گفت یک قطعه کد برنامه نویسی که میتونه ورودی یا ورودی هایی رو بگیره و در صورت لزوم خروجی هم داشته باشه و هدف خاصی رو دنبال میکنه.
کلاس:
کلاس هم درست مثل تابع میتونه ورودی یا ورودی هایی داشته باشه. تفاوت مهمش اینه که کلاس میتونه شامل چندین تابع باشه.
در واقع کلاس و تابع مثال استان و شهرستان رو دارن!
متد:
یا همون method
به تابع یا تابع هایی که داخل یک کلاس هستند متد گفته میشه.
قبلا هم گفتم که وقتی شما یک رشته میسازید در واقع یک شئ از کلاس ()str میسازید و وقتی دارید یک عدد رو پردازش میکنید دارید یک شئ از کلاس ()int رو پردازش میکنید !
خوب این کلاس ها هم شامل یک سری متد های مفید برای کار کردن با شئ مورد نظر هستند.
این متد ها انقدر مفید هستند و زندگی رو برای برنامه نویسان آسون میکنند که من صلاح دیدم بهتون طرز استفاده ازشون رو یاد بدم قبل از این که به تابع و کلاس برسیم !
یا همون method
به تابع یا تابع هایی که داخل یک کلاس هستند متد گفته میشه.
قبلا هم گفتم که وقتی شما یک رشته میسازید در واقع یک شئ از کلاس ()str میسازید و وقتی دارید یک عدد رو پردازش میکنید دارید یک شئ از کلاس ()int رو پردازش میکنید !
خوب این کلاس ها هم شامل یک سری متد های مفید برای کار کردن با شئ مورد نظر هستند.
این متد ها انقدر مفید هستند و زندگی رو برای برنامه نویسان آسون میکنند که من صلاح دیدم بهتون طرز استفاده ازشون رو یاد بدم قبل از این که به تابع و کلاس برسیم !
کافیه بعد از ساختار داده ای و یا متغیری که ساختار داده ایمون رو توش ذخیره کردیم، با رعایت یک نقطه اسم متد مورد نظر رو که باید در کلاس همون ساختار داده ای باشه، بیاریم! البته همونطور که گفتم متد ها تابع هستند و تابع هم پرانتز داره و میتونه ورودی یا ورودی هایی داشته باشه، که ورودی ها با کاما یا , از هم جدا میشن.
برای مثال فکر کنید میخوایم از متد ()isdigit برای رشته ها استفاده کنیم:
"puriya".isdigit()
یا
test = "puriya"
test.isdigit()
در اینجا به اصطلاح میگیم متد ()isdigit روی رشته ظاهر شده، توجه کنید که هر ساختار داده ای متد های خاص خودش رو داره.
برای مثال فکر کنید میخوایم از متد ()isdigit برای رشته ها استفاده کنیم:
"puriya".isdigit()
یا
test = "puriya"
test.isdigit()
در اینجا به اصطلاح میگیم متد ()isdigit روی رشته ظاهر شده، توجه کنید که هر ساختار داده ای متد های خاص خودش رو داره.
چند متد خوب از کلای ()str :
isdigit() :
اگر رشته ای که این متد روش ظاهر شده باشه، قابل تبدیل به ساختار داده ای عددی باشه، مقدار True رو برمیگردونه و در غیر این صورت مقدار False
split() :
اگر این متد رو روی یک رشته ظاهر کنید، به صورت پیشفرض کاراکتر یا کاراکتر هایی رو که با فاصله از هم جدا شدند رو جدا میکنه و تحت ساختار داده ای لیست بهمون میده.
همچنین اگر یک حرف رو به عنوان ورودی به این متد بدیم، به جای فاصله از اون حرف استفاده میکنه و اگر یک عدد هم در ورودی دوم بهش بدیم به اندازه همون عدد برای جداسازی کاراکتر یا کاراکتر ها تلاش میکنه.
lower() :
کاراکتر های لاتین بزرگ موجود در رشته رو به حروف کوچک لاتین تبدیل میکنه.
upper() :
درست برعکس ()lower ، یعنی حروف کوچک رو به حروف بزرگ تبدیل میکنه.
find():
یک رشته به عنوان ورودی دریافت میکنه و در رشته ای که این متد روش ظاهر شده به دنبال اون رشته ورودی میگرده و اگر پیدا کرد اون رشته رو، عدد ایندکس ابتدای اون رشته ورودیو برمیگردونه و اگر پیدا نشد عدد 1- رو میده.
replace() :
دو رشته قبول میکنه و در رشته ای که روش ظاهر شده جای اون دو رشته ورودی رو با هم عوض میکنه.
تصویر پایین به درک مطلب کمک میکنه :
isdigit() :
اگر رشته ای که این متد روش ظاهر شده باشه، قابل تبدیل به ساختار داده ای عددی باشه، مقدار True رو برمیگردونه و در غیر این صورت مقدار False
split() :
اگر این متد رو روی یک رشته ظاهر کنید، به صورت پیشفرض کاراکتر یا کاراکتر هایی رو که با فاصله از هم جدا شدند رو جدا میکنه و تحت ساختار داده ای لیست بهمون میده.
همچنین اگر یک حرف رو به عنوان ورودی به این متد بدیم، به جای فاصله از اون حرف استفاده میکنه و اگر یک عدد هم در ورودی دوم بهش بدیم به اندازه همون عدد برای جداسازی کاراکتر یا کاراکتر ها تلاش میکنه.
lower() :
کاراکتر های لاتین بزرگ موجود در رشته رو به حروف کوچک لاتین تبدیل میکنه.
upper() :
درست برعکس ()lower ، یعنی حروف کوچک رو به حروف بزرگ تبدیل میکنه.
find():
یک رشته به عنوان ورودی دریافت میکنه و در رشته ای که این متد روش ظاهر شده به دنبال اون رشته ورودی میگرده و اگر پیدا کرد اون رشته رو، عدد ایندکس ابتدای اون رشته ورودیو برمیگردونه و اگر پیدا نشد عدد 1- رو میده.
replace() :
دو رشته قبول میکنه و در رشته ای که روش ظاهر شده جای اون دو رشته ورودی رو با هم عوض میکنه.
تصویر پایین به درک مطلب کمک میکنه :
متد های بیشتری وجود داره و قدرت همین متد ها هم بیشتر از این حرفاست.
معرفی این متد ها تنها یک پیش زمینه بود برای شما که باید کاملش رو خودتون از طریق جستجو در اینترنت یا تست کردن و ... یاد بگیرید، چون تعدادشون خیلی زیاده و جای آموزشش اینجا نیست.
معرفی این متد ها تنها یک پیش زمینه بود برای شما که باید کاملش رو خودتون از طریق جستجو در اینترنت یا تست کردن و ... یاد بگیرید، چون تعدادشون خیلی زیاده و جای آموزشش اینجا نیست.
چند متد خوب از کلاس ()list :
remove() :
یک ورودی میگیره و در صورت وجود اون ورودی در لیستی که متد روش ظاهر شده، اون عضو رو حذف میکنه و توجه کنید که این متد هیچ خروجی نداره و فقط عضو پاک میکنه.
append() :
ورودی رو که بهش میدید به لیستی که روش ظاهر شده اضافه میکنه (به آخر لیست).
index() :
به عنوان ورودی یکی از اعضای موجود در لیستی که روش ظاهر شده رو میگیره و عدد ایندکس اون عضو در لیست رو میده.
تصویر زیر به درک مطالب کمک میکنه:
remove() :
یک ورودی میگیره و در صورت وجود اون ورودی در لیستی که متد روش ظاهر شده، اون عضو رو حذف میکنه و توجه کنید که این متد هیچ خروجی نداره و فقط عضو پاک میکنه.
append() :
ورودی رو که بهش میدید به لیستی که روش ظاهر شده اضافه میکنه (به آخر لیست).
index() :
به عنوان ورودی یکی از اعضای موجود در لیستی که روش ظاهر شده رو میگیره و عدد ایندکس اون عضو در لیست رو میده.
تصویر زیر به درک مطالب کمک میکنه:
یکی از مهم ترین مواردی که شما رو یک برنامه نویس موفق و حرفه ای میکنه ، دونستن همیناست !
سازندگان این زبان این متد ها رو برای راحتی برنامه نویسان این زبان بوجود آوردن و یادگرفتن این متد ها میتونه در سرعت برنامه نویسی و توسعه نرم افزار خیلی کمک کنه.
باز هم تاکید میکنم که حتما این پیش زمینه رو جدی بگیرید.
یادگیری یک زبان برنامه نویسی 2 مرحله داره. مرحله اول یادگیری قواعد زبانه و مرحله دوم یادگیری کتابخانه استاندارد اون زبانه. در این جا من مرحله اول رو بهتون یاد میدم که خوب خیلی مهم تره، یعنی آموزش زبان پایتون از 0 تا 100.
بعد از یادگیری زبان نیاز به یادگیری کتابخانه ها دارید، این پیش زمینه رو برای این معرفی کردم که از الان به فکر یادگیری اونها هم بیفتید.
در جلسه بعد دوست دارم شما رو با مفهوم کتابخانه آشنا کنم.
سازندگان این زبان این متد ها رو برای راحتی برنامه نویسان این زبان بوجود آوردن و یادگرفتن این متد ها میتونه در سرعت برنامه نویسی و توسعه نرم افزار خیلی کمک کنه.
باز هم تاکید میکنم که حتما این پیش زمینه رو جدی بگیرید.
یادگیری یک زبان برنامه نویسی 2 مرحله داره. مرحله اول یادگیری قواعد زبانه و مرحله دوم یادگیری کتابخانه استاندارد اون زبانه. در این جا من مرحله اول رو بهتون یاد میدم که خوب خیلی مهم تره، یعنی آموزش زبان پایتون از 0 تا 100.
بعد از یادگیری زبان نیاز به یادگیری کتابخانه ها دارید، این پیش زمینه رو برای این معرفی کردم که از الان به فکر یادگیری اونها هم بیفتید.
در جلسه بعد دوست دارم شما رو با مفهوم کتابخانه آشنا کنم.
> > > آموزش زبان برنامه نویسی پایتون از 0 تا 100
> > > قسمت دوازدهم
سلام خدمت همه علاقه مندان به پایتون.
در قسمت قبلی از لیست ها و تفاوتشون با رشته ها گفتیم، و معنی متد رو هم فهمیدیم و چند متد خوب هم یاد گرفتیم.
انتظار من از شما این بوده و هست که فقط به این آموزش اتکا نکنید، همونطور که گفتم متد های زیاد و پرکاربردی وجود داره که میتونید یاد بگیرید و یک پله از بقیه بالاتر باشید.
در این قسمت قرار شد با مفهوم کتابخانه آشنا بشید و همچنین دوست دارم با مفهوم تابع هم آشناتون کنم.
شاید دوستانی که کمی با پایتون آشنایی دارند بپرسن پس دیکشنری ها و چندتایی ها و ست ها رو کی یاد میدی؟
عجله نکنید، حالا که کمی کد نویسی پایتون رو بلد هستین بهتره تابع رو یاد بگیرید و بقیه مثال هامون همگی در توابع باشن که اینا خودش تمرینای خوبی میشه براتون. و بعد از این که توابع و دیکشنری ها و ست ها و چند تایی ها رو یاد گرفتیم، میرسیم به حلقه for. چون حلقه for در پایتون بر روی اشیا عمل میکنه که قابل پیمایش هستند، و وقتی آموزش این اشیا هنوز تکمیل نشده، آموزش حلقه for و نحوه کارکردنش سردرگمتون میکنه.
همچنین این آموزش مثل بقیه آموزش هایی که حد اقل خودم دیدم و خوندم (بالاخره منم یه زمانی مشغول یادگیری بودم دیگه) نیست، فرقش چیه؟
مثال بستن پیچ با دست یا آچار فرانسه ! پایتون یک زبان شئ گراست، و برای این شئ گرایی ابزار قوی هم داره، ولی اگر به اکثر برنامه نویسان پایتون در ایران بگید برای شما برنامه پایتون بنویسند، شاید همشون برنامه رو بدون استفاده از شی گرایی بنویسند !
البته مقصر اونها نیستند، مقصر آموزنده ای بوده که 20 فصل پایتون آموزش داده ولی فقط در فصل بیستم شئ گرایی رو توضیح داده و آموزش تمام شده !
اما من قصد دارم هرچه زود تر وارد شئ گرایی بشیم، حتی اگر شده قبل از حلقه for و چند ساختار داده ای دیگه.
> > > قسمت دوازدهم
سلام خدمت همه علاقه مندان به پایتون.
در قسمت قبلی از لیست ها و تفاوتشون با رشته ها گفتیم، و معنی متد رو هم فهمیدیم و چند متد خوب هم یاد گرفتیم.
انتظار من از شما این بوده و هست که فقط به این آموزش اتکا نکنید، همونطور که گفتم متد های زیاد و پرکاربردی وجود داره که میتونید یاد بگیرید و یک پله از بقیه بالاتر باشید.
در این قسمت قرار شد با مفهوم کتابخانه آشنا بشید و همچنین دوست دارم با مفهوم تابع هم آشناتون کنم.
شاید دوستانی که کمی با پایتون آشنایی دارند بپرسن پس دیکشنری ها و چندتایی ها و ست ها رو کی یاد میدی؟
عجله نکنید، حالا که کمی کد نویسی پایتون رو بلد هستین بهتره تابع رو یاد بگیرید و بقیه مثال هامون همگی در توابع باشن که اینا خودش تمرینای خوبی میشه براتون. و بعد از این که توابع و دیکشنری ها و ست ها و چند تایی ها رو یاد گرفتیم، میرسیم به حلقه for. چون حلقه for در پایتون بر روی اشیا عمل میکنه که قابل پیمایش هستند، و وقتی آموزش این اشیا هنوز تکمیل نشده، آموزش حلقه for و نحوه کارکردنش سردرگمتون میکنه.
همچنین این آموزش مثل بقیه آموزش هایی که حد اقل خودم دیدم و خوندم (بالاخره منم یه زمانی مشغول یادگیری بودم دیگه) نیست، فرقش چیه؟
مثال بستن پیچ با دست یا آچار فرانسه ! پایتون یک زبان شئ گراست، و برای این شئ گرایی ابزار قوی هم داره، ولی اگر به اکثر برنامه نویسان پایتون در ایران بگید برای شما برنامه پایتون بنویسند، شاید همشون برنامه رو بدون استفاده از شی گرایی بنویسند !
البته مقصر اونها نیستند، مقصر آموزنده ای بوده که 20 فصل پایتون آموزش داده ولی فقط در فصل بیستم شئ گرایی رو توضیح داده و آموزش تمام شده !
اما من قصد دارم هرچه زود تر وارد شئ گرایی بشیم، حتی اگر شده قبل از حلقه for و چند ساختار داده ای دیگه.
کتابخانه چیه و به چه دردی میخوره؟
فکر کنم یه مثال جالب بتونم بزنم، پس خوب دقت کنید:
فرض کنید شما یک نجار هستید، ابزار و سایل مورد نیاز شما هم فقط ایناست :
میخ، چکش، چوب.
اگر چکش شما اطلاعاتی از میخ داشته باشه و طبق اون اطلاعات ساخته شده باشه، شما فقط میتونید باهاش میخ بکوبید، ولی اگر صرفا برای ضربه زدن درست شده باشه، شما میتونید تو %90 جاهایی که نیاز به ضربه زدن دارید ازش استفاده کنید. همچنین میخ هم یه همین شکل، اگر راجع به ساختار چوب و چکشی که قراره بش ضربه بزنه و ... بدونه، فقط تو همین شرایط میشه ازش استفاده کرد، ولی اگر فقط برای فرو رفتن در هرچیزی ساخته شده باشه، همیشه مورد استفاده قرار میگیره.
اگر مطلب بالا رو درک کردید، بهتون تبریک میگم، چون شما شئ گرایی رو درک کردید !
در شئ گرایی فقط شما که برنامه نویس هستید از اشیا مختلف برنامتون آگاه هستین و تا اونجا که ممکنه اشیا نباید از هم آگاه باشن، مثل یک نجار که از ابزار و وسایلش آگاهه.
در این صورت میتونید در برنامه های دیگه هم از اون اشیا استفاده کنید.
کتابخانه به یک یا چند قطعه کد برنامه نویسی، و گاهی اوقات هم یک یا چند فایل که هر کدوم شامل یک یا چند قطعه کد برنامه نویسی هستند،گفته میشه.
اگر این کتابخانه به صورت کاملا شئ گرا پیاده سازی شده باشه شما همه جا میتونید ازش استفاده کنید، و اگر شی گرایی در اون کتابخانه ضعیف باشه، فقط در موارد خاص میتونید ازش استفاده کنید.
هر کسی میتونه یک کتابخانه برنامه نویسی بنویسه، ولی هر کسی نمیتونه یک کتابخانه قوی برنامه نویسی درست کنه.
برای مثال کتابخانه جنگو (django):
یک چهارچوب نرم افزاری قوی برای ساختن برنامه های وب با قدرت و کیفیت بالا.
کتابخانه جنگو از چند کتابخانه دیگر تشکیل شده که شما میتونید جداگانه از آن کتابخانه ها بدون استفاده از جنگو نیز استفاده کنید، که مثال خوبی از شئ گرایه.
فکر کنم یه مثال جالب بتونم بزنم، پس خوب دقت کنید:
فرض کنید شما یک نجار هستید، ابزار و سایل مورد نیاز شما هم فقط ایناست :
میخ، چکش، چوب.
اگر چکش شما اطلاعاتی از میخ داشته باشه و طبق اون اطلاعات ساخته شده باشه، شما فقط میتونید باهاش میخ بکوبید، ولی اگر صرفا برای ضربه زدن درست شده باشه، شما میتونید تو %90 جاهایی که نیاز به ضربه زدن دارید ازش استفاده کنید. همچنین میخ هم یه همین شکل، اگر راجع به ساختار چوب و چکشی که قراره بش ضربه بزنه و ... بدونه، فقط تو همین شرایط میشه ازش استفاده کرد، ولی اگر فقط برای فرو رفتن در هرچیزی ساخته شده باشه، همیشه مورد استفاده قرار میگیره.
اگر مطلب بالا رو درک کردید، بهتون تبریک میگم، چون شما شئ گرایی رو درک کردید !
در شئ گرایی فقط شما که برنامه نویس هستید از اشیا مختلف برنامتون آگاه هستین و تا اونجا که ممکنه اشیا نباید از هم آگاه باشن، مثل یک نجار که از ابزار و وسایلش آگاهه.
در این صورت میتونید در برنامه های دیگه هم از اون اشیا استفاده کنید.
کتابخانه به یک یا چند قطعه کد برنامه نویسی، و گاهی اوقات هم یک یا چند فایل که هر کدوم شامل یک یا چند قطعه کد برنامه نویسی هستند،گفته میشه.
اگر این کتابخانه به صورت کاملا شئ گرا پیاده سازی شده باشه شما همه جا میتونید ازش استفاده کنید، و اگر شی گرایی در اون کتابخانه ضعیف باشه، فقط در موارد خاص میتونید ازش استفاده کنید.
هر کسی میتونه یک کتابخانه برنامه نویسی بنویسه، ولی هر کسی نمیتونه یک کتابخانه قوی برنامه نویسی درست کنه.
برای مثال کتابخانه جنگو (django):
یک چهارچوب نرم افزاری قوی برای ساختن برنامه های وب با قدرت و کیفیت بالا.
کتابخانه جنگو از چند کتابخانه دیگر تشکیل شده که شما میتونید جداگانه از آن کتابخانه ها بدون استفاده از جنگو نیز استفاده کنید، که مثال خوبی از شئ گرایه.