
سلام. به دوره آموزشی اصول برنامه نویسی و پایتون مقدماتی موسسه علوم و فنون کیش خوش اومدین. من میلاد مساوات هستم مدیر گروه آموزش رشته کامپیوتر موسسه و مدرس این دوره.
ما توی این دوره قصد داریم شما رو با اصول اولیه برنامهنویسی آشنا کنیم تا بتونید فارغ از اینکه با چه زبانی قصد برنامهنویسی دارید و یا هدفتون از ساخت یک برنامه طراحی یک وبسایت باشه یا یک برنامه تحت ویندوز یا هر سیستمعامل دیگه، با اصول اولیه برنامهنویسی آشنا بشید.
یکی از نکات بسیار مهم این آموزش اینه که حتما باید با ما همکاری کنید و همزمان که در کلاسها شرکت میکنید جزوه همه جلسات رو مطالعه کنید، تمارین هر جلسه رو انجام بدید و توی کارگاههایی که برگزار میشه شرکت کنید. مهمتر اینکه باید روحیهی پژوهشگری داشته باشید و صرفا به این دوره آموزشی اکتفا نکنید.
منظورم از روحیهی پژوهشگری اینه که تمام مطالبی که در کلاس گفته میشه رو بعد از کلاس و تا جلسه بعدی در موردش تحقیق کنید و توی موتور جستجوی گوگل در موردشون جستجو کنید و اطلاعات خودتون رو تکمیل کنید. ما توی عصری زندگی میکنیم که یادگیری از هر زمان دیگهای سادهتر و قابل دسترستر شده؛ چرا که بستر اینترنت و محتواهای موجود همواره به صورت رایگان توسط اشخاصی تولید شده و در اختیار شما قرار گرفته تا بتونید در هر زمینهای متخصص بشید.
پس اگر این نکات رو پذیرفتید و آمادهی یه ماجراجویی جذاب و شگفتانگیز هستید بریم سراغ جلسه صفر این دوره!

چگونه برنامه نویسی را شروع کنیم؟
جزوه جلسه صفر مقاله
چگونه برنامه نویسی را شروع کنیم؟
جلسه صفر دوره آموزش برنامه نویسی کامپیوتر
توی این جلسه قصد داریم اول مفهوم کامپیوتر، نرمافزار، سختافزار، برنامهنویسی، کاربردها، روشها و انواع زبانها برنامهنویسی رو براتون شرح بدیم تا پیش از اینکه شروع به ماجراجویی کنید، زیرساخت دانش و علم شما در این مورد افزایش پیدا کنه. ما توی این دوره سعی میکنیم از شاخ و برگ دادن بیخودی به مطالب بپرهیزیم و به صورت کاربردی مطالب رو ارائه کنیم.
ضمناً دلیل اینکه این جزوه به زبان عامیانه تألیف شده اینه که ارتباط خوبی با مطالب برقرار کنید و درگیر عبارات و واژههای رسمی و غیرقابل درک نشید.
بریم سراغ مطلب اول یعنی مفهوم کامپیوتر و اجزای اون:
درس اول: کامپیوتر و اجزای آن
قرارداد مهم: از این به بعد هر جا از عبارت کامپیوتر استفاده کردیم بدونید که منظورمون تمام انواع دستگاهها شامل کامپیوتر شخصی (Personal Computer)، لپتاپ، تبلت، گوشی موبایل و... هستش. یعنی هر دستگاهی که با برق یا باتری کار میکنه و دارای پردازنده، ورودیها، خروجیها و حافظه هستش.
اجزای هر سیستم کامپیوتری به صورت کلی از ورودی، پردازشگر، خروجی و انواع حافظه تشکیل شده. عملکرد این سیستم به این شکله که یک سری ورودی از طریق دستگاههایی مثل ماوس، کیبرد، میکروفن، دوربین و... وارد سیستم میشه و توی بخش حافظه دائم ذخیره میشه. بعد، پردازشگر دادهها رو از حافظه دائم به حافظه موقت منتقل میکنه تا بتونه با سرعت بالایی روی اونها پردازشهای مختلفی رو انجام بده. بعد از پردازش اطلاعات از طریق دستگاههای خروجی مثل مانیتور، ویدیوپروژکتور، پرینتر، اسپیکر و... به شما نمایش داده میشه.
این دستگاهها بسته به سیستمی که در حال استفاده از اون هستید متغیر هستند مثلا توی یک گوشی موبایل، صفحه نمایش و تاچ اسکرین گوشی موبایل شما همزمان کار ورودی و خروجی رو انجام میدن پس خیلی مهمه که کارکرد این اجزا رو درک کنید و بتونید توی استفاده از یک سیستم فرق ورودی، خروجی، پردازشگر و حافظه رو تشخیص بدید و اونها رو به درستی شناسایی کنید.
همونطور که توی توضیحات بالا مشاهده کردید، پردازشگر دادهها رو از یک حافظه دائمی به یک حافظه موقت منتقل میکنه و بعد پردازش رو روی حافظه موقت انجام میده و گاهی نتیجه رو روی حافظه دائم ذخیره میکنه. دلیلش هم اینه که سرعت پردازشگرها بسیار بالا و معمولا سرعت حافظههای دائم بسیار پایینه. به عنوان مثال وقتی شما یک ویدیو روی سیستم خودتون باز میکنید، ویدیو از هارد یا فلش مموری شما به رم (RAM) یا همون حافظه موقت شما منتقل میشه و ویدیو توسط پردازشگر از روی حافظه موقت پردازش میشه و به شما نمایش داده میشه.
برای درک بهتر عملکرد حافظه موقت بیاید فرض کنیم توی این مثال حافظه موقت نداریم؛ با توجه به اینکه سرعت حافظه دائم شما از پردازشگرتون خیلی خیلی پایینتره، موقع نمایش ویدیو، تصاویر رو به صورت شکسته شکسته مشاهده میکردید. یعنی انگار یه سری عکس پشت سر هم دارن نمایش داده میشن و دیگه ویدیوی شما خاصیت ویدیو بودن خودش رو از دست میداد.
پیشنهاد میکنم حتما در خصوص انواع حافظه جستجو انجام بدید و با انواع حافظه دائم و موقت و کارکردشون آشنا بشید.
حالا که با اجزای اصلی کامپیوتر آشنا شدید بیاید از یه زاویه دیگه هم اجزای کامپیوتر رو بشناسیم:
همونطور که توی تقسیمبندی بالا مشاهده میکنید هر کامپیوتری از 2 بخش اصلی سختافزار (Hardware) و نرمافزار (Software) تشکیل شده. سختافزار به تمامی اجزای قابل لمس و نرمافزار به تمامی اجزای غیرقابل لمس گفته میشه.
سختافزارها هم به 2 بخش اصلی و جانبی تقسیم میشن. سختافزارهای اصلی به اجزایی گفته میشه که سیستم برای فعالیتش به اونها نیاز داره و بدون اونها امکان فعالیت درست رو نداره. برد اصلی یا مادربرد (Motherboard)، حافظه رم (RAM)، هارد، پردازشگر (CPU)، کارت گرافیک (GPU)، کارت شبکه (Network Adapter) بعضی از سختافزارهای اصلی سیستم کامپیوتری هستن. فلش مموری، پرینتر، ماوس، کیبرد، میکروفن، وبکم هم بعضی از سختافزارهای جانبی هستن.
نرمافزارها هم به 2 دستهی اصلی سیستمی و کاربردی تقسیم میشن. نرمافزارهای سیستمی به نرمافزارهایی گفته میشه که رابط بین انسان و کامپیوتر هستن و معمولا مستقیما با سختافزارها در ارتباط هستن. این نرمافزارها به انسان کمک میکنن که بتونن از سختافزارهای کامپیوتر به درستی استفاده کنن. سیستمعاملها مهمترین و شناختهشدهترین نرمافزارهای سیستمی هستن که از انواع اونها میشه به سیستمعامل ویندوز، سیستمعامل لینوکس، سیستمعامل اندروید، سیستمعامل IOS و... اشاره کرد.
نرمافزارهای کاربردی هم همونطور که از اسمشون مشخصه برای یک کاربرد مشخص و خاص ازشون استفاده میشه. مثلا Word یک نرمافزار واژهپردازه که برای تایپ متون ازش استفاده میشه.
تحقیق: 10 سختافزار اصلی، 10 سختافزار جانبی، 10 نرمافزار سیستمی و 10 نرمافزار کاربردی بنویسید و برای هر کدوم یک پاراگراف کوتاه توضیح بدید و کارکردشون رو بیان کنید.
درس دوم: مفهوم برنامهنویسی
برنامهنویسی کامپیوتری یا برنامهسازی کامپیوتری (Programming) به مجموعه اقداماتی گفته میشه که یک شخص یا شرکت یک مسئله یا نیاز انسانی رو به یک نرمافزار (Software) تبدیل میکنه تا بشه از طریق اون نیاز یا مسئله موجود برطرف بشه.
برنامهنویسی کامپیوتری به اشتباه توسط خیلیها با عبارت کدنویسی مترادف و هممعنی در نظر گرفته میشه. کدنویسی یک بخش از فرآیند برنامهنویسی یا برنامهسازیه و همه فرایند برنامهنویسی نیست.
برای اینکه ما بتونیم یک برنامه یا نرمافزار تولید کنیم باید بتونیم با کامپیوتر حرف بزنیم. همونطور که میدونید 2 نفر وقتی میخوان با هم حرف بزنن باید زبان مشترک (مثلا فارسی) داشته باشن، و اگر به 2 زبان متفاوت با هم حرف بزنن (مثلا فارسی و انگلیسی) احتمالا هیچکدوم حرف اون یکی رو متوجه نخواهند شد.
ماشین یا کامپیوتر هم یک زبان مشخصی داره که فقط از 2 حرف 0 و 1 تشکیل شده. در صورتی که زبان انسانی از انواع حروف الفبا و واجهای آوایی تشکیل شده. یعنی مثلا کلمه سلام به زبان کامپیوتر میشه 0101111000010001010000100111111 !!!!!!!
همونطور که زبان هر کشور و اجتماعی تا حد زیادی ریشه در فرهنگ و رفتار اون جامعه داره زبان ماشین هم نشون دهنده شیوه تفکر و رفتارشه. 0 یا 1 که همون هست و نیست یا True و False هم ازش یاد میشه.
برای کامیپوتر همه چیز اینجوری درک میشه که یه چیزی یا هست یا نیست!!!
مثلا زیبایی و زشتی از نظر انسان یه مفهوم نسبیه یعنی یه چیزی میتونه کمی زیبا یا کمی بیشتر یا خیلی زیبا باشه ولی از نظر کامپیوتر یه چیزی یا زیبا هست یا نیست!!! همینجا یکی از کارهایی که ما میتونیم به کمک برنامهنویسی انجام بدیم مشخص میشه. یعنی میتونیم مفاهیم نسبی رو به زبان منطقی به کامپیوتر بفهمونیم.

کار با انواع دادهها و متغیرها
جزوه جلسه اول مقاله
انواع دادهها و متغیرها
جلسه اول آموزش برنامه نویسی کامپیوتر
حالا که با مفاهیم پایه کامپیوتر و برنامهنویسی آشنا شدید وقتشه که بریم سراغ اصل مطلب یعنی شروع کار برنامهنویسی. پس با ما همراه باشید تا وارد مسیر هیجانانگیز برنامهنویسی بشیم.
درس اول: دستور
هر برنامه از یک سری جملات امری یا دستوری تشکیل شده و هر دستور توی یک خط از برنامه نوشته میشه. ما در طول روز جملات دستوری زیادی رو استفاده میکنیم مثلا میگیم: بیا پیشم، به من زنگ بزن، بیا با هم بریم استخر، یه موزیک برام بفرست و... اینها همه دستوراتی هستن که ما در طول روز به انسانها میگیم.
یه برنامه کامپیوتری هم تشکیل شده از یک سری دستور که خط به خط باید اونهارو بنویسیم. این خطوط برنامه که ما مینویسیم در اصل داریم به جای انسان به کامپیوتر دستور میدیم که یه کار مشخصی رو انجام بده.
نکته: همونطور که یک دستور توی زبان انسان باید توسط مخاطب شناخته شده باشه توی ماشین هم به همین صورته باید دستوری بدیم که کامپیوتر اون رو بشناسه.
دستورات برنامهنویسی توی هر زبان برنامهنویسی مختص همون زبانه ولی شباهتهایی هم بین دستورات هر زبان وجود داره.
ویژگی مشترک بین دستورات همه زبانهای برنامهنویسی اینه که این دستورات به صورت خط به خط و از بالا به پایین اجرا میشن. مثلا به تکه کد زیر دقت کنید:
تکه کد بالا شامل 2 خط دستور خیلی سادهست. دستور اول به کامپیوتر میگه کلمه Hello! رو نمایش بده و دستور دوم میگه کلمه Goodbye! رو نمایش بده. همونطور که میبینید با اجرای این 2 خط کد، اول کلمه Hello! و بعد کلمه Goodbye! نمایش داده شده.
تمرین: کد بالا رو به شکلی تغییر بدید که اول کلمه Goodbye! و بعد کلمه Hello! نمایش داده بشه (یعنی برعکس حالتی که توی تصویر بالا میبینید.
درس دوم: انواع داده
دادهها انواع مختلفی دارن مثلا عدد، متن، مقدار منطقی، تصویر و...
هر زبان برنامهنویسی شکل دادههای منحصر به فرد خودش رو داره ولی فارغ از اینکه با چه زبانی قراره برنامهنویسی کنید بهتره که انواع دادهها رو به صورت استاندارد یاد بگیرید و اونها رو درک کنید. اگر انواع داده رو همین اول درک نکنید احتمال زیاد در آینده به مشکلات زیادی بر میخورید پس کمی دقت کنید و انواع دادهها رو یاد بگیرید.
1) دادههای عددی صحیح: این نوع از داده شامل اعداد صحیح مثل 1 و 2 و 3 و 4 و... هستن. که توی جدول زیر انواع اونها رو مشاهده میکنید:
نوع اول اعداد بین -128 تا +128 هستن و 1 بایت از حافظه رو اشغال میکنن که بهشون میگیم int8.
نوع دوم از -32768 تا +32767 هستن و 2 بایت از حافظه رو اشغال میکنن که بهشون میگیم int16 یا short
نوع سوم هم از حدود -2 میلیارد تا حدود +2 میلیارد هستن و 4 بایت فضا اشغال میکنن که بهشون میگیم int32 یا long
نکته بسیار مهم اینه که این نوع داده شامل اعداد اعشاری مثل 1.5 نیستن و این نوع داده جنس دیگهای هستن به نام Float یا Double
2) دادههای float یا double که توی زبانهای برنامهنویسی مختلف یکی از این اسامی به کار برده میشه. این نوع داده اعداد اعشاری رو شامل میشن و فرقشون با اعداد صحیح اینه که حافظه بیشتری رو اشغال میکنن. دادههای float هم توی زبانهای مختلف زیردستههای مختلفی داره که بسته به همون زبون میتونید درموردش جستجو کنید و اطلاعات کسب کنید.
3) دادههای منطقی یا Boolean: این نوع داده شامل 2 مقدار 0 و 1 یا درست و غلط یا True و False هستن. این شکل از داده زمانی به کار میره که بخوایم وجود یا عدم وجود یه چیزی رو نشون بدیم. یا اینکه بخوایم موضوعی رو بررسی کنیم که 2 حالت بیشتر نداره مثلا زن یا مرد بودن. یا مجرد و متأهل بودن و...
4) کاراکتر یا char: این نوع از داده شامل کاراکترهای متنی و علائم نگارشی و... مثل a و b و c و ? و ! و... هستن.
5) رشتههای متنی یا String یا Text: این نوع از داده شامل متنها هستن. میشه اینطور گفت که stringها لیست به هم چسبیدهای از کاراکترها (char) هستن.
6) لیست و آرایه: این نوع از داده در اصل یک نوع داده مستقل نیست بلکه لیستی از یک نوع از 5 نوع دادهای است که در بالا معرفی کردیم. مثلا لیست یا آرایهای از اعداد صحیح، لیست یا آرایهای از اعداد اعشاری، لیست یا آرایهای از کاراکترها (که میشن همون stringها)، لیست یا آرایهای از رشتهها، لیست یا آرایهای از مقادیر منطقی (true or false). در برنامهنویسی به زبانهای پیشرفته آرایهها میتوانند دارای ابعاد بیشتری از یک بُعد باشند که به آنها ماتریس و تنسور گفته میشود.
درس سوم: متغیرها و دستور Print
متغیرها در برنامهنویسی، ظروفی هستند که دادهها را نگهداری میکنند. هر متغیر بسته به دادهای که قصد نگهداری از آن را دارد انواع مختلفی دارد. مثلا دادههای عدد صحیح در متغیری از این جنس ذخیره شده و دادهای از جنس رشته متنی در متغیری از جنس رشته ذخیره میشود.
در زبانهای برنامهنویسی قدیمی، قبل از ریختن مقدار توی متغیرها، باید متغیر رو تعریف کنیم اما توی زبانهای برنامهنویسی جدید مثل پایتون، دیگه نیازی به تعریف متغیر نیست و فقط کافیه مقدار مورد نظر رو توی متغیر بریزید. به صورت خودکار مفسر میتونه جنس متغیر رو تشخیص بده. به تکه کد زیر دقت کنید.
توی تکه کد بالا عدد صحیح 12 را در متغیری به نام a، عدد اعشاری 24.5 را در متغیری به نام b، کاراکتر m را در متغیری به نام c، رشته milad را در متغیری به نام d و عبارت منطقی True در متغیری به نام e ذخیره شده و توی خطوط بعدی به کمک دستور print محتویات داخل هر متغیر نمایش داده شده.
توی تکه کد بالا هم به کمک دستور print و type، جنس متغیرهای a و b و c و d و e رو نمایش دادیم.
ویدیوی جلسه اول ویدئو
انواع دادهها و متغیرها

شرط و Print F
جزوه جلسه دوم مقاله
شرط و Print F
جلسه دوم آموزش برنامه نویسی کامپیوتر
توی جلسه پیش حسابی با انواع داده و متغیر کار کردیم و با کمک زبان پایتون تونستیم یه سری متغیر رو مقداردهی کنیم بعد روشون یه سری عملیات ریاضی ساده مثل جمع و تقسیم انجام بدیم و در نهایت هم اونها رو با دستور Print نمایش بدیم.
انتظار داریم که خودتون مقادیر رشتهای رو هم براشون متغیر ساخته باشید و بعد از پر کردن متغیرها اونها را Print کرده باشید. درست مثل متغیرهای عددی!
اما توی این جلسه قصد داریم به جای پر کردن دستی مقادیر توی متغیرها، مقادیر رو از کاربر بگیریم و توی متغیرها بریزیم و در نهایت با دستور Print نمایششون بدیم. همچنین قصد داریم با دستورات شرطی هم شروع به کار کنیم.
درس اول: دریافت ورودی با دستور input در پایتون
به تکه بالا دقت کنید. توی تکه کد بالا با دستور input یه مقدار رو از کاربر دریافت کرده، مقدار وارد شده رو توی متغیری به نام name مقداردهی و در نهایت هم مقدار داخل متغیر name رو چاپ کردیم.
همونطور که میبینید توی دستور input یه متنی به این شکل "Please insert your name" هم نوشتیم که کاملا اختیاریه و میتونید بسته به نیاز خودتون این پیغام رو تغییر بدید. مثلا اگر قصد دارین یه عدد از کاربر بگیرین میتونید پیغام "Please insert number" رو توی پرانتر دستور input بنویسید.
این پیغام فقط برای نمایش به کاربره و بهتره که متناسب با مقدار ورودی که میخواید از کاربر بگیرید نوشته بشه.
تمرین: یه برنامه بنویسید که از کاربر 2 تا عدد بگیره، اونها رو با هم جمع کنه و نتیجه رو نمایش بده.
درس دوم: استفاده از متغیرها در دستور Print
حالا فرض کنین میخوایم نام کاربر رو بپرسیم و توی خروجی بنویسیم نام شما ..... است. پس باید بتونیم دستور print رو طوری استفاده کنیم که وسطش هم متغیر نام رو وارد کنیم.
همونطور که میبینید توی تکه کد بالا توی خط اول با دستور input و پیغام "Please your insert number" نام کاربر رو پرسیدیم و نتیجه رو ریختیم توی متغیری به اسم name؛ بعد با کمک دستور print پیغامی رو به کاربر نمایش دادیم که با استفاده از حرف f پیغاممون یه پیغام داینامیک شده.
توی درسها قبلی وقتی از دستور print استفاده میکردیم، پیغام استاتیک رو کاربر نمایش میدادیم. یعنی یه متن ثابت که هیچ ربطی به رفتار مخاطب نداشت. ولی الان نمایش پیغاممون دیگه استاتیک نیست و به رفتار مخاطب بستگی داره. یعنی اگر مخاطب اسمش رو Milad وارد کنه پیغامی که نمایش داده میشه به شکل زیره:
Your name is : Milad
ولی اگر مخاطب اسمش رو Ali وارد کنه پیغامی که با دستور بالا نمایش داده میشه به شکل زیره:
Your name is : Ali
توجه کنید که برای انجام این عمل یه f قبل از دابل کوتیشن اول رشته گذاشتیم و متغیرمون رو داخل آکولاد باز و بسته قرار دادیم.
تمرین: یه عدد از کاربر بگیرید و توی خروجی پیغامی به این شکل رو نمایش بدید: عدد وارد شده شما .... است.
دقت کنید که توی تمرین بالا فرقی نمیکنه که پیغامی که نمایش میدید فارسی باشه یا انگلیسی. فقط کافیه رشته فارسی یا انگلیسی خودتون رو داخل دابل کوتیشن قرار بدید؛ حتی اگر رشته شما فارسی باشه عملیات به درستی انجام میشه. اما پیشنهاد میکنم فعلا از زبان انگلیسی استفاده کنید تا برنامههای شما استاندارد و قابل ارائه توی جوامع بینالمللی باشه.
درس سوم: دستورات شرطی (if-elif-else):
حالا وقتشه یه مقدار پیچیدگی برنامه خودمون رو بیشتر کنیم و برای این کار از دستورات شرطی استفاده کنیم. قبل از آشنایی با ساختار نوشتن دستور شرطی بیاید با فلوچارت دستورات شرطی آشنا بشیم:
توی دستورات شرطی همواره با دادههای از جنس منطقی (جلسات قبلی درس دادیم) طرف هستیم. یعنی جواب یه شرط یا صحیحه یا غلط! اگر صحیح بود یه بخشی از کد اجرا میشه اگه غلط بود یه بخش دیگه.
توی مثال بالا فرض کنین از کاربر نامش رو میپرسیم، و میخوایم اگه اسمش Milad بود، M چاپ کنه و اگه Milad نبود Other چاپ کنه.
- توی تکه کد بالا توی خط اول اسم کاربر رو پرسیدیم و ریختیم توی متغیری به اسم name.
- توی خط دوم با دستور if یه شرط نوشتیم و گفتیم اگه name مساوی با Milad بود. آنگاه
- توی خط سوم گفتیم چاپ کن M رو
- توی خط چهارم گفتیم اگر نتیجه منفی بود (یعنی name مساوی با Milad نبود):
- توی خط پنجم گفتیم چاپ کن Other رو
نکته خیلی مهم: دقت کنید که ساختار کدها رو باید درک کنید و به مرور یادتون بمونه. مثلا بعد از شرط از دو نقطه یعنی : استفاده کردیم که یه قاعده است و باید یادتون بمونه.
درس چهارم: تورفتگی در کدنویسی
این نکته انقدر مهمه که براش یه درس در نظر گرفتیم شاید توضیحش یه خط بیشتر هم نباشه ولی خیلی مهمه واسه همینم یه درس براش در نظر گرفتیم.
وقتی میخوایم بگیم یه سری خطوطمون زیرمجموعه یه خط دیگهست از تکنیک تورفتگی با دکمه TAB استفاده میکنیم. فعلا فقط توی دستورات شرطی این موضوع رو دارید میبینید که یه سری کدها زیرمجموعه حالت مثبت و یه سری کدها زیرمجموعه حالتهای منفی هستن. ولی در آینده با حالتهای دیگهای هم آشنا میشید که یه سری کد زیرمجموعه یه سری کد دیگه خواهند بود.
ویدیوی جلسه دوم ویدئو
شرط و Print F
تمرینات جلسه دوم تمرین
شرط و Print F

شرط چند حالت و عملگرهای منطقی
جزوه جلسه سوم مقاله
شرط چند حالت و عملگرهای منطقی
جلسه سوم اصول برنامه نویسی و پایتون مقدماتی
سلام امیدوارم حالتون عالی باشه. توی این جلسه میخوایم مبحث شرطها رو ادامه بدیم و راهکارهایی رو بهتون یاد بدم که بتونید شرطهای چند حالتی رو توی برنامه پیادهسازی کنید.
درس اول: شرط چند حالتی
توی جلسات قبلی یاد گرفتید که چطور با کمک دستور if و else توی پایتون یک شرط رو بررسی کنید و بر اساس نتیجه شرط یک اقدامی رو انجام بدید. مثلا اگر متغیر درجه حرارت بیشتر از 30 بود عبارت Hot و در غیر اینصورت عبارت Cold رو در خروجی نمایش بدید. حالا فرض کنید بخوایم توی همین مثال بگیم اگر دما بیش از 30 درجه بود پیغام Very Hot و اگر بین 25 تا 30 درجه بود پیغام Hot و اگر کمتر از 25 درجه بود عبارت Cold رو نمایش بدید.
همونطور که میبینید توی این مثال جواب شرط ما به جای 2 حالت، 3 حالت داره و باید بر هر کدوم از این حالات پیغام متفاوتی نمایش داده بشه. توی اینجور مواقع توی زبان برنامهنویسی پایتون از دستوری به اسم elif استفاده میکنیم.
به تکه کد بالا دقت کنید؛ توی خط اول این کد، دمای هوا رو از کاربر پرسیدیم و بعد از تبدیلش به متغیر عددی، مقدارش رو توی متغیر temp ذخیره کردیم. توی خط دوم گفتیم اگر دمای هوا (temp) بزرگتر مساوی (=<) 30 بود پیغام Very Hot رو نمایش بده.
توی خط چهارم گفتیم اگر دمای هوا کوچکتر از 30 بود و بزرگتر از 25 بود پیغام Hot رو نمایش بده. توی خط ششم گفتیم در غیر اینصورت پیغام Cold رو نمیاش بده.
نکته: همونطور که دیدید ما به زبان ماشین نمیتونیم بگیم اگر مقدار متغیرمون بین 2 تا عدد بود و باید این عبارت رو به زبان ماشین تبدیل کنیم. توی زبان ماشین گفته میشه که اگر مقدار متغیر بزرگتر از یه عددی و کوچکتر از یه عددی بود.
پس مثلا اگر بخوایم بگیم اگر مقدار متغیر هر وقت بین 25 و 30 بود، باید اینجوری بگیم:
اگر مقدار متغیر کوچکتر از 30 بود و مقدار متغیر بزرگتر از 25 بود.
همونطور که دیدید اینجا با یه عبارت جدید به نام and آشنا شدید. عبارت and توی شرط به این صورت کار میکنه که زمانی جواب عبارت مثبته که هر 2 شرط جوایشون مثبت باشه.
مثلا جواب شرط «اگر هوا 20 درجه بود و اگر هوا بارونی بود» چون از and استفاده کردیم زمانی مثبته که هم هوا 20 درجه باشه هم هوا بارونی باشه. در غیر اینصورت اگه یکی از شرطها منفی باشه یعنی هوا 20 درجه نباشه یا هوا بارونی نباشه جواب شرط منفی یا همون False هستش.
عبارت and یه عملگر منطقیه. یکی دیگه از عملگرهای منطقی or نام داره. Or معادل کلمه "یا" توی زبان فارسیه.
مثلا جواب شرط «اگر هوا 20 درجه بود یا هوا بارونی بود» زمانی مثبته که یکی از شرطها جوابش مثبت باشه. در غیر اینصورت اگر هر 2 تا شرط منفی باشه جواب کل شرط مساوی منفی میشه.
عملگرهای منطقی and و or میتونن بین 2 شرط یا بیشتر وجود داشته باشن و همیشه از همین قاعده پیروی میکنن.
پس اگر ما یه شرط با هر چند حالت داشته باشیم که بینشون and باشه زمانی جواب کل عبارت مساوی True میشه که جواب همه شرطها True باشه، اگر حتی یکی از شرطها برقرار نشه جواب False میشه.
اگر یه شرط با چند حالت داشته باشیم که بینشون عبارت or باشه، زمانی جواب کل عبارت مساوی True میشه که جواب فقط یکی از عبارتها True بشه. در غیر اینصورت اگر همه شرطها جوابشون False باشه نتیجه شرط کلی False میشه.
همونطور که توی ماتریس بالا میبینید توی عملگر منقطی AND نتیجه زمانی TRUE (سبز) میشه که تمام شرطها TRUE باشن.
همونطور که میبینید توی عملگر OR که همون "یا" هستش، جواب شرط زمانی TRUE (سبز) هستش که فقط یکی از شرطها TRUE باشن و زمانی منفی (قرمز) هستش که همه شرطها False باشن.
درک عملگرهای منطقی زمانی اتفاق میوفته که توی زندگی بتونید بهش فکر کنید و مثالهای واقعی برای خودتون بزنید.
مثلا فرض کنید من به شما میگم اگر ویدیوی این جلسه رو ببینید "و" جزوه رو بخونید میتونید این درس رو یاد بگیرید. حالا شما چه زمانی درس رو یاد میگیرید؟ زمانی که هم ویدیو رو ببینید هم جزوه رو بخونید. حالا اگر فقط ویدیو رو ببینید ولی جزوه رو نخونید آیا یاد میگیرید؟ با توجه به عملکرد AND یا همون "و" که به رنگ قرمز توی این عبارت نوشته شده، قطعا یاد نمیگیرید.
حالا اگر من بگم اگر ویدیوی این جلسه رو ببینید "یا" جزوه رو بخونید میتونید این درس رو یاد بگیرید. و شما فقط جزوه رو بخونید آیا درس رو یاد میگیرید؟ با توجه به عملکرد عبارت OR یا همون "یا" که به رنگ قرمز توی این عبارت نوشته شده با خوندن فقط جزوه یا دیدن فقط ویدیو درس رو یاد میگیرید پس نیازی نیست هم ویدیو رو ببینید هم جزوه رو بخونید.
حالا بیاید برگردیم به تکه کدی که اول این جلسه نمایش دادیم
توی این تکه کد گفتیم اگر دمای هوا کمتر از 30 درجه بود "و" دمای هوا بزرگتر مساوی 25 درجه بود، پیغام Hot رو نمایش بده. با این کار فقط زمانی پیغام HOT نمایش داده میشه که temp هم کوچکتر از 30 باشه هم بزرگتر مساوی 25 باشه. یعنی اگر temp فقط کوچکتر از 30 باشه ولی بزرگتر مساوی 25 نباشه (مثلا 24 باشه) دیگه پیغام Hot نمایش داده نمیشه و برنامه میره خط بعدی یعنی else رو جرا میکنه. همونطور که توی جلسه قبل یاد گرفتید دستورات داخل else زمانی اجرا میشدن که شرط if جوابش False باشه. اینجا هم دستورات داخل else زمانی اجرا میشن که هم شرط if و شرط elif جوابشون false باشه.
شما توی دستورات شرطی میتونید از یک if و یک else و هر تعداد elif به صورت نامحدود استفاده کنید.
مثلا فرض کنید میخوایم بگیم:
اگر دمای هوا بزرگتر مساوی 30 بود Very Hot رو نمایش بده، اگر دمای هوا بین 25 تا 30 بود عبارت Hot رو نمایش بده، اگر دما بین 10 تا 20 بود Cold و در نهایت اگر زیر 10 بود Very Cold رو نمایش بده.
توی تکه کد بالا من از یک دستور if، 2 دستور elif و یک دستور else استفاده کردم. این تکه کد دقیقا شبیه به کد قبلیه فقط یک elif بهش اضافه شده. سعی کنید با خوندن کد اون رو برای خودتون تفسیر کنید و به زبان فارسی بخونیدش.
ویدیوی جلسه سوم ویدئو
شرط چند حالت و عملگرهای منطقی
تمرین جلسه سوم مقاله
شرط چند حالت و عملگرهای منطقی

حلقههای تکرار در پایتون
جزوه جلسه چهارم مقاله
حلقههای تکرار در پایتون
جلسه چهارم آموزش برنامه نویسی کامپیوتر
سلام عرض میکنم به داشنپذیرای عزیز و دوستداشتنی دوره اصول برنامهنویسی دپارتمان آموزش انجمن هوش مصنوعی کیش. امروز با جلسه چهارم این دوره در خدمت شما هستیم تا یه قدم دیگه به سمت ورود به دنیای تکنولوژیهای نوظهور برداریم و زندگی ایدهآلی رو برای خودمون، کشورمون و کل دنیا بسازیم.
درس اول: مفهوم حلقه
توی این جلسه میخوایم در مورد مفهوم حلقه توی برنامهنویسی صحبت کنیم. مفهومی که با یادگیریش یکی از اساسیترین ویژگیهای کامپیوتر یا ماشین رو میتونید یاد بگیرید و توی برنامههای خودتون ازش استفاده کنید.
همۀ ما توی زندگیمون از وقتی که از خواب بیدار میشیم تا وقتی به خواب بریم، یه سری کارهای تکراری انجام میدیم! مثلا هر روز صبح بعد از بیدار شدن از تختخوابمون بیرون بیایم، هر روز صبح صبحانه میخوریم، هر روز صبح به مدرسه، محل کار یا دانشگاه میریم، هر روز ظهر ناهار میخوریم و کلی کار دیگه که معمولا خیلیهاش تکراری هستن و در خلل کارهای تکراری بعضی وقتها هم تنوعی ایجاد میکنیم و یه کار متفاوت انجام میدیم.
کارهای تکراری که در طول روز انجام میدیم توی اصطلاح برنامهنویسی بهش میگیم حلقههای تکرار!!!
حلقههای تکرار یا به زبان انگلیسی و رایجش (Loop) توی برنامهنویسی از دستورات خیلی خیلی مهم هستن که باید اونها رو یاد بگیریم و ازشون استفاده کنیم. میشه گفت یه برنامه، بدون استفاده از حلقه تقریبا غیرممکنه به مرحله کاربردیسازی برسه و ازش بشه استفاده کرد.
بیاید یه مثال خیلی ساده رو در مورد حلقههای تکرار با هم بررسی کنیم. فرض کنید قصد داریم عبارت Hello! رو 5 بار به کاربر نشون بدیم. قبل از اینکه حلقههای تکرار رو یاد بگیرید مجبورید 5 بار دستور Print رو بنویسید و هر بار عبارت Hello! رو نمایش بدید. برنامهای که اگر اون رو توی محیط Google Colab بنویسیم به شکل زیر باید اقدام کنیم:
درس دوم: حلقه for در پایتون
همونطور که میبینید ما داریم یه دستور تکراری رو 5 بار مینویسیم و تازه فاجعه زمانی اتفاق میوفته که به جای 5 بار نیاز بشه که 50 یا 500 بار یه دستور تکراری رو بنویسیم! اینجاست که اهمیت استفاده دستورات حلقه رو درک میتونیم درک کنیم و ازشون توی کدنویسی استفاده کنیم. حال من کد بالا رو به شکل زیر تبدیلش میکنم:
همونطور که میبینید کد 5 خطی من به کمک حلقه تکرار یا Loop تبدیل شد به یه کد 2 خطی سادهتر!
توی دستور بالا کلمه for یه دستوره مثل if و elif و else و print و input که تا الان یاد گرفتید و به صورت ثابت باید ازش استفاده بشه (و حتما به صورت حروف کوچیک نوشته بشه در غیر اینصورت برنامه ارور میده).
کلمه دوم که i هستش یه متغیر از جنس عددیه و وظیفهاش توی این تکه کد "شمارنده" هستش. کلمه in یعنی "در" و دستور range() هم مثل باقی دستورات، ثابته و هر عددی که توش قرار بگیره میشه محدودهای به اون تعداد. مثلا اینجا که عدد 5 توی تابع range() قرار گرفته، یعنی توی محدوده 5 تایی حلقه ما باید تکرار بشه.
مثل دستورات شرطی (if) یه دو نقطه (:) قرار دادیم که یعنی قراره توی خط بعدی دستوراتی زیرمجموعه این دستور بنویسیم. بعد توی خط بعدی با یک تورفتگی (دکمه TAB کیبرد) دستور print رو استفاده کردیم و پیغام Hello! رو نمایش دادیم.
اگر بخوایم تکه کد بالا رو به زبان فارسی ترجمه کنیم میگیم:
شمارندهای به اسم i تعریف کن بار اول اون رو با عدد 0 مقداردهی کن، اگر 0 توی محدودۀ range(5) بود دستورات تورفتگی رو اجرا کن! محدودهای که به شکل range(5) تعریف کردیم اعداد از 0 تا 4 رو تشکیل میدن.
نکته مهم: همیشه توی برنامهنویسی اعداد از 0 شروع میشن!
حالا بیاید فرض کنیم از ما خواسته شده دستور پرینت رو طوری بنویسیم که شماره هر بار سلام هم قبل از Hello! نمایش داده بشه. مثلاً بشه: Hello0 و Hello1 و Hello2 و Hello3 و Hello4
توی کد بالا دستور print رو به شکلی تغییر دادیم که شمارنده i هم توی کنار Hello نمایش داده بشه. توی این خط ما از یه تبدیل با تابع str() هم استفاده کردیم. همونطور که توی جلسات قبلی مشاهده کردین ما با تابع int() یه رشته رو به عدد صحیح و با تابع float() یه رشته رو به عدد اعشاری تبدیل کردیم.
حالا توی این دستور هم برای اینکه بتونیم متغیر عددی i رو با عبارت رشتهای Hello جمع کنیم و کنار هم نمایششون بدیم باید i رو از حالت عددی به یه رشته تبدیل کنیم. تابع str دقیقا همین کارو برای ما انجام داد و متغیر عددی i رو به یک رشته تبدیل کرد. حتما میدونید که میتونستیم به جای print از print(f) هم به شکل زیر استفاده کنیم:
توی این دستور عبارت {str(i)} رو به عنوان یه متغیر توی دستور print(f) استفاده کردیم؛ این کد با کد قبلی هیچ تفاوتی نداره و با هر کدوم که بیشتر حالتون خوبه میتونید کار کنید.
تمرین: اسم 5 نفر رو از کاربر بگیرید و به اونها سلام بدید. (این کار رو هم با استفاده از دستورات حلقه و هم بدون استفاده از دستورات حلقه انجام بدید تا تفاوت رو متوجه بشید:
حالت اول: با استفاده از حلقه
حالت دوم: بدون حلقه
همونطور که میبینید برنامه ما توی حالت اول یعنی زمان استفاده از حلقه در کل 3 خط بود و همون برنامه بدون استفاده از دستورات حلقه (Loop)، مجموعاً 10 خط بود و این یعنی تقریباً انجام 3 برابر کار بیهوده!!!
همونطور که دیدید ما از دستور for زمانی استفاده کردیم که میدونستیم یه کاری رو چند بار قراره انجام بدیم مثلاً توی این مثال به ما گفته شده که اسم 5 نفر رو بگیر به بهشون سلام کن! حالا اگر بهمون میگفتن اسم بگیر و به افراد سلام کن (نمیگفتن چند نفر) راهش چی بود؟ توی درس بعدی یکی دیگه از دستورات حلقه رو به شما معرفی میکنیم تا بتونید این کار رو هم انجام بدید.
ویدیوی جلسه چهارم ویدئو
حلقههای تکرار در پایتون
تمرین جلسه چهارم تمرین
حلقههای تکرار در پایتون
ویدیوی حل تمرین ویدئو
حل 10 تمرین جلسه چهارم
راهنمای حل تمرین جلسه چهارم فایل های ضمیمه
فایل حل تمرینهای EX5 تا EX14

ادامۀ مبحث حلقه + while + حلقههای تودرتو
جزوه جلسه پنجم مقاله
ادامۀ مبحث حلقه + while + حلقههای تودرتو
جلسه پنجم آموزش برنامه نویسی کامپیوتر
سلام امیدوارم حالتون عالی باشه و تا اینجای دوره براتون مفید بوده باشه. امروز وارد جلسه پنجم میشیم و مطالب مفید و کاربردی دیگهای رو در خصوص اصول برنامهنویسی بهتون آموزش میدیم.
درس اول: حلقه while در پایتون
حلقه while در پایتون زمانی استفاده میشه که شما از ابتدای برنامه نمیدونید چند بار قراره حلقهتون اجرا بشه، مثل زمانی که از شما خواسته میشه تا وقتی که کاربر عبارت exit رو وارد نکرده ازش اسم افراد رو بپرسه و به اون افراد سلام بده!
توی حلقه for پایتون توی درس قبل دیدید که ما زمانی ازش استفاده کردیم که مشخصاً بهمون گفته شده بود که اسم 5 نفر رو از کاربر بپرس و بهشون سلام کن.
تفاوت بین حلقه while و for در پایتون
تقاوت بین حلقه while و for در پایتون اینه که "زمانی از for استفاده میکنیم که میدونیم چند بار باید حلقهمون اجرا بشه ولی توی حلقه while ابتدای برنامه نمیدونیم باید چند بار حلقه اجرا بشه و قراره توی برنامه این تعداد مشخص بشه".
نحوه استفاده از دستور while در پایتون هم توی تکه کد زیر مشخص شده:
توی برنامه بالا، توی خط اول متغیر name تعریف شده و در ابتدا به صورت خالی تعریف شده. توی خط دوم به کمک دستور while گفته شده تا زمانی که name مخالف عبارت exit وارد شده بود حلقه اجرا بشه. و چون در ابتدا name مخالف exit هستش (خالیه)، حلقه اجرا میشه و نام کاربر پرسیده بشه و توی خط بعدی بهش سلام داده میشه. دوباره میره ابتدای حلقه و بررسی میکنه که آیا name مخالف exit هست یا نه، فرض کنید که ما نام رو milad وارد کردیم و بهش سلام دادیم پس حلقه دوباره تکرار میشه و از کاربر اسمش رو میپرسه و مجددا بهش سلام میده، این کار تا زمانی انجام میشه که عبارت exit رو کاربر به جای اسم وارد کنه!
درس دوم: توقف زودهنگام حلقه
حتماً براتون پیش میاد که گاهی اوقات توی حلقههای for و while بخواید حلقه رو زودتر از حالت عادی متوقف کنید. مثلاً زمانی که دارید که از کاربر اعدادی رو دریافت میکنید و میخواید اگر کاربر به جای عدد حرف وارد کرد، ادامۀ دستورات اجرا نشه و حلقه متوقف بشه در این صورت از دستور break استفاده کنید و حلقه رو زودتر از اینکه به انتها برسه متوقف کنید.
درس سوم: حلقههای تو در تو
فرض کنید که قصد داریم یه چیزی شبیه به تصویر زیر رو چاپ کنیم! همونطور که میبینید توی این تصویر 30 خط پرینت انجام شده که توی هر خط 3 ستاره چاپ شده.
نوشتن این برنامه الان برای شما تقریباً خیلی سادهست. فقط کافیه یه حلقه با تعداد تکرار 10 تا تعریف کنید و توش یه پرینت با متن "***" بنویسید. به این صورت میتونید متن بالا رو چاپ کنید.
اما اگر بخواید تصویر زیر رو توی خروجی مشاهده کنید؛ یعنی 10 خط ستاره که دیگه توی هر خط به تعداد مساوی ستاره نمیبینید، بلکه به ترتیب توی هر خط تعداد ستاره بیشتر شده و شکلی شبیه به مثلث در اومده.
همونطور که میبینید توی تصویر بالا تو خط اول یک ستاره توی خط دوم 2 ستاره، توی خط سوم 3 ستاره و به همین ترتیب تا خط دهم چاپ انجام شده. پس به نظر میرسه که غیر از حلقهای که داره برای شماره خط استفاده میشه یه حلقه دیگه هم هست که داره توی عرض حرکت میکنه. شمارنده این حلقه توی خط اول فقط 1 بار میشماره و چاپ میکنه توی خط دوم 2 بار میشماره و چاپ میکنه و همینطور ادامه میده توی خط 10، ده بار میشماره و ستاره چاپ میکنه.
پس نتیجه میگیریم که توی انگار توی هر خط، به تعداد شماره خط ستاره چاپ میشه؛ یعنی range() توش دیگه یه عدد ثابت نیست؛ بلکه شماره خط هستش که هر بار هم با اجرای حلقۀ مادر، عددش تغییر میکنه.
همونطور که میبینید این برنامه با 4 خط کد ساخته میشه که البته میدونید که میتونید تعداد خط رو هم از کاربر بگیرید یعنی اگر کاربر گفت 50 خط، برنامه شما میتونه 50 خط ستاره به این شکل چاپ کنه. فقط کافیه توی حلقۀ اول به جای 10، متغیری رو قرار بدید که توش مقداریه که کاربر وارد کرده!
توی خط اول این برنامه، حلقه اول که من بهش میگم حلقۀ مادر شروع میشه. میدونید که متغیر i قراره توی یه محدوده 10 تایی بچرخه به این شکل که بار اول مقدارش 0 خواهد بود و تا عدد 9 ادامه پیدا میکنه. توی خط دوم حلقۀ دیگهای رو تعریف کردیم که با ویژگی تورفتگی اون رو زیرمجموعۀ حلقۀ اول کردیم پس من بهش میگم حلقۀ فرزند که تو دل حلقۀ مادر قرار گرفته.
حلقۀ فرزند مثل قبل قرار نیست که به تعداد ثابت اجرا بشه، چون مثلاً به جای range(10) گفتیم range(i)؛ یعنی توی تعداد حلقه از یه متغیر به اسم i استفاده کردیم. حالا شما فکر کنید که این متغیر مقدارش چنده؟!
بار اول که حلقۀ for مادر اجرا میشه i مساوی میشه با عدد 0 و هر بار یه دونه بهش اضافه میشه. یعنی بار اولی که حلقۀ مادر اجرا میشه، حلقۀ فرزند هم یک بار اجرا میشه و یک ستاره چاپ میشه؛ بار دومی که حلقۀ مادر اجرا میشه، حلقۀ فرزند 2 بار اجرا میشه و 2 تا ستاره چاپ میشه؛ بار سومی که حلقۀ مادر اجرا میشه، حلقۀ فرزند 3 بار اجرا میشه و 3 تا ستاره چاپ میشه تا بار دهمی که حلقۀ مادر اجرا میشه و حلقۀ فرزند 10 بار اجرا میشه و 10 تا ستاره جاپ میشه.
اگر این موضوع رو درک نکردید لطفاً چند بار این متن رو بخونید و به کد دقت کنید و با یه فنجون قهوه دقایقی بهش زل بزنید!!!
حالا 2 تا نکتۀ دیگه وجود داره؛ یکی اینکه توی پایتون وقتی شما دستور پرینت مینویسید و متنی رو چاپ میکنید به صورت خودکار پایان اون متن یک اینتر توسط برنامه زده میشه و پرینت بعدی توی خط بعدی انجام میشه. یعنی به صورت عادی شما نمیتونید 2 تا متن رو با 2 تا دستور جداگونه پرینت کنار هم چاپ کنید. اما برای این چالش راهکاری وجود داره و اونم استفاده از پارامتر end=”” هستش.
دستورات توی پایتون میتونن شامل پارامترهایی باشن که برای تنظیمات بیشتر اون دستور استفاده میشه. شما تا الان برای دستور پرینت فقط یک پارامتر استفاده میکردید و اون هم متنی بود که بهش پاس میدادید! (پاس دادن یه اصطلاحه بین برنامهنویسهای فارسی زبون) اما حالا قراره به غیر از یه پارامتر متنی، یه پارامتر دیگه هم به دستور پرینت پاس بدید؛ اون پارامتر end هستش یعنی وقتی متن رو چاپ کردی بعدش چیکار کن! به صورت پیشفرض توی پارامتر end، کاراکتر اینتر قرار گرفته. ما برای اینکه بتونیم توی این مثال ستارهها رو کنار چاپ کنیم توی پرینت ستاره، کاراکتر "" یعنی پوچ رو به دستور پرینت print(“*”) پاس میدیم. یعنی بعد از چاپ ستاره هیچ کاراکتر دیگهای چاپ نکن (حتی اینتر) و منتظر دستور بعدی من باش!! اونم میگه چشم سرورم 😊
با توجه به اینکه شاید درک حلقههای تودرتو کمی برای بعضیها سخت باشه مطالب این جلسه رو به همینجا ختم میکنیم تا بتونید حسابی با حلقههای تودرتو کار کنید و تا جلسۀ بعدی به درک کاملی از موضوعات مربوط به حلقهها رسیده باشید.
درس چهارم: معرفی و کار با نرمافزار اسکرچ
اسکرچ یه زبان برنامهنویسیه که دستوراتش به شکل تصاویره و با Drag&Drop (کشیدن و رها کردن) میتونیم برنامه بنویسیم. خیلی خوبه که شما نیازی به تایپ کردن ندارین و میتونین با قرار دادن بلوکها زیر هم، برنامههای باحال بسازین.
اگه به این نکات توجه کنیم، احتمالاً درک بهتری نسبت به این برنامه کاربردی پیدا میکنیم:
الف) دستورات اصولی دقیقی نداره که حتما باید رعایت بشه، یعنی آزادی بیشتری داریم.
ب) نیاز نیست همه چیزو حفظ کنیم، چون دستورات با Drag&Drop ساخته میشن.
ج) پیدا کردن اشکال و اصلاح کردن خطاها، از یه کدنویسی معمولی، کار راحتتریه.
اسکرچ بهترین کارو انجام داده که شما با خیال خودتون به تخیل بپردازین و برنامههای خفن بسازین. اگه دوست دارید اسکرچ رو روی کامپیوترتون نصب کنید، میتونید از سایت اصلی اسکرچ به آدرس scratch.mit.edu/download رایگان دانلودش کنید.
شعار اصلی اسکرچ اینه:
"Imagine, Program, Share" که به فارسی میشه "تخیل کن، برنامه بنویس، به اشتراک بزار"
- تخیل: شما رو دعوت میکنه تا خیالپردازی کنین، حتی میتونین تصاویر مثل جادوگر و اژدها رو درست کنین.
- برنامه: شما برای اجرای ایدههاتون دستورات رو با استفاده از بلوکها به کامپیوتر میگین.
- به اشتراک بزار: تشویق میکنه که پروژهها رو با دیگران به اشتراک بذارید و از تجربیات هم استفاده کنید.
اسکرچ با این فلسفه سعی کرده که یه جامعه از برنامهنویسها بسازه که با هم ارتباط برقرار کنن و از هم حمایت کنن. میتونید از این 43 میلیون پروژه روی سایت scratch.mit.edu/explore/projects/all هر کدوم رو اجرا کنید و حتی کدهاشون رو ببینید و اگر دوست داشتید، خودتون هم میتونید اون پروژهها رو تغییر بدید.
این هم تصویری از نرمافزار اسکرچ که خدارو شکر با زبان شیرین فارسی هم سازگاری داره و میتونید زبانش رو به فارسی تغییر بدید. اینم Scratch Website.
برای اینکه سرعت دوره بالاتر بره و بتونیم اتفاقات خوبی رو کنار هم در پایان دوره رقم بزنیم، آموزش اسکرچ رو از یکی از ویدیوهای موجود توی آپارات که برای همکارام هست براتون توی محتوای همین جلسه آپلود کردم و پیشنهاد میکنم حتماً، حتماً و حتماً یه نگاهی بهش بندازید.
ویدیوی جلسه پنجم ویدئو
ادامۀ مبحث حلقه + while + حلقههای تودرتو
ویدیوی آموزش اسکرچ ویدئو
Scratch
تمرین جلسه پنجم تمرین
ادامۀ مبحث حلقه + while + حلقههای تودرتو

الگوریتم و فلوچارت + لیست
جزوه جلسه ششم مقاله
الگوریتم و فلوچارت + لیست
جلسه ششم برنامه نویسی کامپیوتر
سلام بچهها امیدوارم حالتون خوب و عالی باشه و تا الان حسابی با نحوه حرف زدن با کامپیوتر که خداییش هم کار سختیه آشنا شده باشید. قبل از هر چیز باید بگم که اصلاً نگران نباشید من دارم سعی میکنم توی بالاترین سطح ممکن ولی به زبان ساده به شما برنامهنویسی آموزش بدم تا بتونید وارد شاخههای مختلف و مرتبط به این حوزه که سرآمد اونها هوش مصنوعی هستش بشید.
ادامه دادن این دوره میتونه مغز شما رو حسابی با چالش مواجه کنه و همین چالشها باعث بشه تا بتونید تبدیل به یه آدم موفق تو هر زمینهای بشید. پیشنهاد میکنم حتما مقالهای که در این زمینه نوشتم با عنوان تأثیر برنامهنویسی بر عملکرد مغز انسان رو مطالعه کنید. خب حالا آماده باشید که بریم توی این جلسه مطالب جدیدی رو با هم بررسی کنیم و کلی و چیزای جدید یاد بگیرید.
درس اول: الگوریتم و فلوچارت
بهتره بدونید که قبل از دونستن و درک الگوریتم و فلوچارت توی برنامهنویسی تقریباً هیچی نمیدونید و هیچوقت نمیتونید به یادگیری کامل این رشته برسید. پس بیاید با هم به این موضوع مهم بپردازیم...
الگوریتم دقیقاً چیه؟
بیاید با یه مثال به این سوال پاسخ بدیم. فرض کنید شما قصد دارید یه کیک تولد درست کنید؛ برای درست کردن این کیک تولد یه سری مراحل رو انجام میدید درسته؟ به زبان خیلی ساده به این مراحل الگوریتم گفته میشه. توی این مثال الگوریتم تهیه کیک تولد این شکلیه:
موارد اولیه که شامل موارد زیر هستش آماده میکنیم و روی میز میذاریم:
شیر / آرد / تخممرغ / شکر / روغن / وانیل / بکینگ پودر / خامه / موز / توت فرنگی / قرار دادن شمع تولد
اینا قراره ورودی الگوریتم کیک باشن که در نهایت قراره توی خروجی به ما کیک تولد بدن. اما مگه میشه که این مواد خود به خود به کیک تبدیل بشن؟ مسلمه که نه!
باید یه سری اقدامات رو روی این ورودیها انجام بدید تا تبدیل به کیک بشن. مثلاً باید کارای زیر رو انجام بدید:
الک کردن آرد / هم زدن تخممرغ / ترکیب کردن آرد و شکر و تخممرغ / اضافه کردن روغن / هم زدن مجدد / اضافه کردن وانیل و بکینگ و پودر / تنظیم دمای فر به 180 درجه / ریختن مواد اولیه در ظرف مناسب فر / قرار دادن ظرف دارای مواد در فر / خارج کردن کیک از فر / تزئین کیک با خامه و توت فرنگی و موز / قرار دادن شمع تولد
به این مراحل میگن مراحل انجام الگوریتم یا پردازش دادهها (مواد اولیه) با هدف آماده کردن خروجی مورد نظر (کیک)
حالا یه نکته خیلی خیلی خیلی مهم وجود داره و اونم اینه که این مراحل باید و باید به ترتیب انجام بشن و اگر به ترتیب این اتفاق نیوفته میتونه فاجعه رقم بزنه!!! مثلاً اگر تخممرغ رو نشکنید و توی مواد نذارید و همینطور تخممرغ رو با پوست داخل فر بذارید حتماً میتونید حدس بزنید که چه اتفاق وحشتناکی میوفته!!! یا مثلاً شمع رو وسط مراحل توی مواد اولیه پخته نشده بذارید!!!
با این مثال باید کاملاً با الگوریتم آشنا شده باشید. توی برنامهنویسی هم الگوریتم دقیقاً به همین معناست. یعنی شما قراره برنامهای بنویسید که یه سری ورودی خام رو بگیره و اونها رو تبدیل به خروجی مورد نظرتون کنه. برای این کار باید کدهایی رو بنویسید که این فرآیندها رو براتون انجام بده. حتماً توجه کنید که هر خط کد شبیه به یکی از همون مراحل تهیه کیک هستش و باید با ترتیبی درستی نوشته بشه وگرنه برنامه شما به درستی کار نمیکنه.
فلوچارت دقیقاً چیه؟
الگوریتم رو که متوجه شدید چیه؟ فلوچارت ابزار ترسیم مراحل الگوریتم از ابتدا تا انتها هستش. فلوچارت شامل یه سری اشکال هندسی مثل مستطیل و مثلث هستش که به کمک این اشکال میتونید الگوریتم خودتون رو ترسیم کنید. توی شکل زیر دو نمونه فلوچارت رو میبینید:
همونطور که میبینید اجزای یه فلوچارت اشکال هندسی هستن که هر شکل یه معنی و مفهوم مشخصی داره. هر شکل معنی و مفهوم خاصی داره که تو ادامه با این اشکال آشنا میشید:
- شکل بیضی در فلوچارت: شروع یا پایان برنامه
- شکل متوازیالاضلاع در فلوچارت: دریافت ورودی از کاربر
- شکل مستطیل در فلوچارت: اجرای پردازش
- شکل لوزی در فلوچارت: بررسی شرط
به صورت مقدماتی اینها اشکال اولیه توی فلوچارت هستن و اشکال دیگهای هم برای ترسیم فلوچارت وجود داره که در آینده باهاش آشنا میشید.
چجوری الگوریتم بنویسیم؟
نوشتن الگوریتم برعکس ظاهرش اصل کار سخت و پیچیدهای نیست. فقط کافیه مثال کیک تولد رو یادتون بیارید. توی مثال کیک تولد دیدید که ما یه مسئله بزرگ و به مراحل کوچکتر تبدیل کردیم و هر مرحله رو جداگانه نوشتیم تا تشکیل یه الگوریتم رو بده.
پس شما هم وقتی میخواید یه برنامهای بنویسید اول باید اون برنامه رو به تکههای کوچکتر تبدیل کنید و مرحله به مرحله اون رو یادداشت کنید.
چجوری فلوچارت بکشیم؟
توی مرحله بعدی باید این مراحلی که یادداشت کردید با نرمافزارهای مختلف تبدیل به فلوچارت کنید. الان اصلا نیاز نیست درگیر نرمافزارهای پیچیده و تخصصی بشید میتونید با یه محیط نقاشی، ورد، پاورپوینت، فتوشاپ یا هر ابزار دیگهای فلوچارت رسم کنید.
بعد از اینکه فلوچارتهای سادهای رو ترسیم کردید میتونید برای کار حرفهایتر نرمافزار Microsoft Visio رو نصب کنید و شروع به ترسیم فلوچارتهای حرفهای کنید.
مثال الگوریتم و فلوچارت
حالا بیاید برای تمرین اول الگوریتم بنویسیم و فلوچارت رسم کنیم:
صورت مسئله EX01: برنامهای بنویسید که دمای هوا را از کاربر بپرسد، اگر دما بالای 30 درجه بود پیغام امروز هوا گرم است و اگر دما کمتر از 30 درجه بود پیغام امروز هوا سرد است را به کاربر نمایش دهد.
الگوریتم:
گام اول: شروع برنامه
گام دوم: پرسیدن دما از کاربر
کام سوم: تعریف یک متغیر عدد صحیح و مقداردهی با مقدار وارد شده توسط کاربری
گام چهارم: بررسی شرط دمای بالای 30 درجه
گام پنجم: درست بودن شرط: چاپ امروز هوا گرم است. غلط بودن شرط: چاپ امروز هوا سرد است
گام ششم: پایان برنامه
فلوچارت:
من با نرمافزار Microsoft Visio الگوریتم بالا رو به فلوچارت تبدیل کردم که شده شکل زیر:
توی شکل بالا برنامه از بیضی اول شروع شده و توی بیضی پایین به اتمام رسیده. بعد از شروع برنامه، شکل متوازیالاضلاعی که به رنگ نارنجی ترسیم شده قراره از کاربر دما رو بپرسه و بریزه توی یه متغیر. شکل لوزی سراخابیرنگ قراره بررسی که آیا دما بالای 30 درجه هست؟ اگر جواب مثبت بود سمت چپ فلوچارت یعنی چاپ امروز هوا گرم است اجرا میشه و اگر جواب نه بود سمت راست فلوچارت یعنی چاپ امروز هوا سرد است اجرا میشه.
حالا شما سعی کنید تمرینات بعدی که بهتون دادیم رو برای هر کدوم الگوریتم و فلوچارت مخصوصش رو بنویسید و بکشید و همراه با فایلهای تمرین به صورت فولدربندی شده و تمیز برای من ایمیل کنید. 😊
میدونید که هر جا هم سؤال داشتید میتونید روی پشتیبانی ما حساب کنید و بهمون پیام بدید. 😊
درس دوم: لیست در پایتون
حتماً تا اینجا مفهوم داده و متغیر رو کامل درک کردید. همونطور که میدونید که برای اینکه بتونیم اسم یک نفر رو بپرسیم و بهش سلام بدیم، باید یه متغیر به اسم دلخواه خودمون ایجاد کنیم و با کمک دستور input نام کاربر رو بپرسیم و نتیجه رو توی متغیر مورد نظرمون ذخیره کنیم.
حالا فرض کنید میخوایم برنامهای بنویسیم که به جای یه اسم، اسم دانشجوهای این کلاس رو بپرسیم، و به اونها سلام کنیم. خب یه راهش اینه که یه متغیر به اسم name تعریف کنیم و هر بار که اسم دانشجو ور میپرسیم بریزیم توی متغیر name، مقدار داخل این متغیر رو چاپ کنیم و اسم دانشجوی بعدی رو دوباره بریزی توی همین متغیر و مقدار داخلش رو چاپ کنیم. درسته که این روش هیچ مشکلی نداره اما اگر توی برنامه به ما بگن اسم این افراد رو غیر از اینکه چاپ میکنی، نگهداری هم کن دیگه این الگوریتم به درد نمیخوره چون هر بار متغیر یا همون ظرف name خالی میشه و با مقدار جدید پر میشه.
همۀ زبانهای برنامهنویسی برای این موضوع راهکاری به نام لیستها ارائه دادن. یعنی شما میتونید یه متغیری از جنس لیست بسازید و لیستی از دادهها رو (مثل اسم تعدادی دانشجو) ذخیره کنید.
برای ساختن لیست توی پایتون باید از 2 تا براکت باز و بسته استفاده کنید. توی مثال زیر من یه لیست از دانشجوها رو ساختم:
همونطور که میبینید لیست بالا 4 تا عضو داره که هر کدوم دارای یه شماره Index هستن و همونطور که قبلاً هم گفتم، شمارش توی کامپیوتر با شمارش زبان انسان فرق داره و شمارش به جای عدد یک از عدد صفر شروع میشه.
مثلاً الان “Hamed” عضو شماره صفر و “Zahra” عضو شماره یک و “Setayesh” عضو شماره 2 و “Radin” عضو شماره 3 این لیست هستن. این لیست 4 عضو داره اما چون شمارش از صفر شروع میشه، آخرین عنصر یا آیتم این لیست با عدد 3 شمارهگذاری یا ایندکسگذاری شده.
لیستها کاربردهای مختلف و زیادی دارن مثلاً میتونید لیستی از اسم پرندگان، لیست اسم ماشینها، اسم شهرها، اسم کشورها و... بسازید و بعد با این لیست کارهای زیادی انجام بدید.
دسترسی به عناصر لیست در پایتون
برای دسترسی به هر عضو از لیست پایتونی میتونید به شکل زیر اقدام کنید:
توی این تکه کد میتونید به اولین عنصر لیست students که توی تکه کد قبلی معرفی کرده بودید دسترسی پیدا کنید. مسلمه که با تغییر عدد صفر به یک میتونید به دومین عضو این لیست دسترسی پیدا کنید. به این شماره index گفته میشه. یعنی index عضو اول صفر، index عضو دوم یک و... هستش.
برش زدن لیست در پایتون
اگر نیاز داشته باشید به یه تعدادی از اعضای لیست دسترسی پیدا کنید میتونید از روش برش زدن لیست استفاده کنید. برای برش زدن لیست کافیه از علامت دو نقطه یعنی کاراکتر : استفاده کنید. به مثال زیر توجه کنید:
توی مثال بالا با استفاده از کاراکتر دونقطه و نوشتن شروع و پایان لیست قبل و بعد از این کاراکتر تونستیم به تعداد مشخصی از اعضای لیست دسترسی پیدا کنیم. توی این مثال عدد صفر قبل از دونقطه یعنی از اولین عضو؛ عدد 3 هم شماره آخرین عضویه که میخوایم عملیات برش زدن رو انجام بدیم. دقت کنید که توی روش برش زدن لیست، عدد دوم خودش شامل نیست.
تغییر مقادیر لیست
برای تغییر مقادیر لیست کافیه به شکل زیر اقدام کنید:
با این دستور میتونید عضوی که ایندکس 3 هستش (یعنی چهارمین عضو) رو تغیبر بدید. توی این مثال مقدار اولیه Radin بود که تغییر کرد به Soheil
تعداد عناصر لیست
برای اینکه متوجه بشید لیست شما چند عضو داره از دستور Len به شکل زیر باید اقدام کنید:
با لیستها میتونید کارهای خیلی جالبی بکنید که توی تمرینات این جلسه متوجهشون خواهید شد.
ویدیوی جلسه ششم ویدئو
الگوریتم و فلوچارت + لیست
دانلود نرمافزار مایکروسافت ویزیو فایل های ضمیمه
نرمافزار مخصوص ترسیم فلوچارت

آموزش ثبتنام و راهنمای حل تمارین
ساخت اکانتهای مورد نیاز ویدئو
Gmail - edX - Github
جلسه صفر CS50x ویدئو
شیوه حل و ثبت تمرین اسکرچ
راهنمای حل تمرین هفته اول ویدئو
شیوه فعالسازی CS50.dev و ثبت تمرین Hello
راهنمای حل تمرین هفته اول ویدئو
شیوۀ حل و ثبت تمرین Population
راهنمای حل تمرین هفته اول ویدئو
شیوۀ حل و ثبت تمرین Mario
راهنمای حل تمرین هفته اول ویدئو
شیوۀ حل و ثبت تمرین Cash
راهنمای حل تمرین هفته اول ویدئو
شیوۀ حل و ثبت تمرین Credit

دادههای ساختارمند
جزوه جلسه هفتم مقاله
دادههای ساختارمند
جلسه هفتم برنامهنویسی کامپیوتر
سلام عرض میکنم به هنرجویان محترم دوره برنامهنویسی مقدماتی به زبان پایتون. پیش از هر چیز ورود به سال 1403 رو به همه شما تبریک عرض میکنم و امیدوارم که امسال سالی پر از موفقیتهای بزرگ برای تکتک شما عزیزان باشه. تقریباً نیمی از دوره برنامهنویسی مقدماتی به زبان پایتون رو پشت سر گذاشتیم و کلی مفهوم و دستور کاربردی رو در کنار هم یاد گرفتیم و حالا میتونیم کلی تمرین باحال رو با همین مفاهیم و دستورات انجام بدیم.
درس اول: تاپلها (Tuple) در پایتون
تاپلها توی پایتون چیزی شبیه به لیستها هستند با این تفاوت که وقتی یک لیست رو میسازید میتونید بعدا مقادیرش رو تغییر بدید اما تاپل رو که ساختید دیگه نمیتونید مقادیرش رو تغییر بدید. شاید فکر کنید با وجود لیستها، تاپلها به درد ما نمیخورن اما اشتباه میکنید بعدها توی پروژههایی حتماً از تاپل هم استفاده خواهید کرد.
برای تعریف تاپل فقط کافیه به جای براکت که توی تعریف لیست استفاده میکردید از پرانتز استفاده کنید. به شکل زیر:
touple1 = ("Ali" , "Reza" , "Mohsen")
درس دوم: مجموعهها (Set) در پایتون
مجموعه هم یک نوع دیگه از دادههای ساختارمند مثل لیست و تاپل هستند با این تفاوت که توی مجموعهها، مقادیر وارد شده ایندکس ندارن و مقادیر تکراری هم خودکار ازشون حذف میشن. این نوع داده هم کاربردهای زیادی میتونه توی برنامهنویسی داشته باشه. مجموعهها رو به کمک آکولاد به شکل زیر تعریف میکنیم:
set1 = {"Ali" , "Reza" , "Mohsen"}
درس سوم: دیکشنری در پایتون (Dictionary)
زمانی که از لیست برای نگهداری یک سری داده استفاده میکردید برای صدا زدن هر مقدار باید از ایندکس اون مقدار استفاده میکردید. زبان برنامهنویسی پایتون یه ابزار بسیار قدرتمند به نام دیکشنری هم در اختیار شما قرار داده تا برای هر مقدار یه کلید هم تعریف کنید تا بتونید راحتتر با مقادیر مختلف کار کنید. به کد زیر توجه کنید:
student1 = {'firstname' : 'Ali' ,'lastname' : 'Ahmadi' , 'age' : '18' }
print(student1['firstname'])
توی خط اول کد بالا یه دیکشنری تعریف کردیم به اسم student1 و 3 تا فیلد نام، نام خانوادگی و سن براش ایجاد کردیم و مقداردهی کردیم.
جذابترین بخش ماجرا اینه که با ترکیب لیست و دیکشنری میتونید توی پایتون یه جدول از اطلاعات دانشآموزان رو بسازید به شکل زیر:
students = ({},{},{})
توی کد بالا من قصد دارم یه لیست دانشآموزان بسازم و اطلاعات 3 دانشآموز شامل نام، نام خانوادگی اونها رو وارد کنم. نتیجه میشه کد زیر:
students = (
{'firstname':'Ali' , 'lastname' : 'Ahmadi'} ,
{'firstname' : 'Reza' , 'lastname' : 'Mohseni'} ,
{'firstname' : 'Amir' , 'lastname' : 'Kazemi'})
print(students[0])
توی کد بالا 3 تا دانشآموز با نامهای علی، رضا و امیر تعریف کردم. هر دانشآموز با یک دیکشنری تعریف شده و توی یه لیست 3 تایی قرار گرفته. با پرینت خط آخر میتونم اطلاعات دانشآموز اول رو نمایش بدم.
دسترسی به مقادیر دیکشنری
برای دسترسی به مقادیری که توی دیکشنری وجود داره میتونید از براکت استفاده کنید و اون نام کلید رو مشخص کنید. در کد پایین مشخص کردیم که مقدار کلید firstname رو از دیکشنری student1 نیاز داریم:
print(student1['firstname'])
اگر مثل من یه لیست از دیکشنریها ساخته بودید هم میتونید به شکل زیر به مقادیر هر دیکشنری دسترسی پیدا کنید:
print(students[0]['firstname'])
توی کد بالا مقدار صفر داخل براکت اول به شماره دانشآموز اشاره میکنه (که میشه اولین دانشآموز) و مقدار firstname داخل براکت دوم به نام اولین دانشآموز اشاره میکنه. قاعدتاً باید درک کرده باشید که برای دسترسی به نام دومین دانشآموز چطور باید کد رو تغییر بدیم. و همینطور دسترسی به نام خانوادگی اولین دانشآموز یا دومین دانشآموز!
ویدیوی جلسه هفتم ویدئو
دادههای ساختارمند

شیءگرایی در برنامهنویسی
جزوه جلسه هشتم مقاله
شیء گرایی در برنامهنویسی
جلسه هشتم
سلام عزیزان امیدوارم حالتون عالی باشه. اگر تا اینجا با من همراه بودید بهتون تبریک میگم چون شما دارید تبدیل به یک شخص متفکر و خلاق میشید و قراره که اتفاقای خیلی خوبی توی زندگیتون بیوفته چون یاد گرفتید که برای مسائل مختلف راهکار پیدا کنید و تقریباً هیچ مسئلهای برای شما غیرقابل حل نیست. توی این جلسه هم قراره مطالب خیلی مهمی رو بهتون بگم پس با من همراه باشید.
درس اول: مفهوم شیء گرایی
قبل از اینکه در مورد شیءگرایی صحبت کنیم بهتره که اول یه مقدمه و تاریخچه بهتون بگم.
تا الان تمام برنامههایی که نوشتیم خیلی ساده و غیرکاربردی بود و حتما خودتون هم متوجه شدید که عملاً توی دنیای واقعی و بازار کار کسی به چنین برنامههایی نیاز نداره (مثلاً دمای هوا رو از کاربر بپرسه اگر بالای 30 درجه بود...)
همونطور که میدونید در واقعیت برنامههای کاربردی، بسیار پیچیدهتر و سنگینتر از این حرفها هستن به همین دلیل هم اواخر دهه 70 میلادی برنامهنویسی به 2 دسته رویهگرا و ساختاریافته تقسیم شد.
توی شیوه برنامهنویسی رویهگرا، تمام دستورات یه برنامه پشتسر هم نوشته میشن (مثل همین مدلی که شما تا الان انجام میدادید) این شیوه برنامهنویسی برای برنامههای کوچک و متوسط کارآمد بودن اما برای برنامههای بزرگ و پیچیده این روش اصلاً روش کارآمدی نبود به همین دلیل برنامهنویسی ساختاریافته متولد شد.
توی شیوه برنامهنویسی ساختاریافته، یه برنامه به قطعات کوچکتری به نام ماژول تقسیم میشد و هر ماژول یه وظیفه خاصی داشت؛ به کمک این روش، دیگه مشکلی برای نوشتن برنامههای بزرگ وجود نداشت چون این امکان فراهم بود که هر ماژول توسط یک نفر یا تیم مجزا نوشته بشه و با تلفیقشون برنامه اصلی خلق بشه.
اما از اونجایی که همیشه بشر به دنبال ساده کردن کارها و ساختارمند کردن اونهاست مدل ساختاریافته هم کافی نبود و مدل شیءگرایی ظهور پیدا کرد.
برای درک مفهوم شیءگرایی توی برنامهنویسی بهتره که نگاهی به جهان خلقت بندازیم تا یک بار برای همیشه این مفهوم که بین برنامهنویسها جزو مفاهیم پیچیده هم هست رو درک کنید.
توی جهان خلقت هر مخلوقی به عنوان یکی از اجزای جهان هستی شناخته میشه و دارای ماهیت منحصر به فردی هستش. مثلاً یک انسان، یک درخت، یک حیوان، یک سنگ، یک بطری آب و... هر کدوم یک شیء توی جهان هستی هستن که دارای ماهیت منحصر به فردی برای خودشون هستن.
باید این نکته رو هم بدونیم که یک انسان جزوی از دستهبندی انسانهاست و همینطور یک درخت جزوی از تمام درختهاست و باقی اجزا هم به همین شکل توی یه دستهبندی منحصر به فرد جا دارن.
توی برنامهنویسی شیءگرایی هم به هر مخلوقی که توسط انسان خلق شده یک شیء (Obejct) گفته میشه که هر شیء جزئی از یک دستهبندی بالاتر به نام کلاس (Class) هستش.
توی مثال قبلی میشه گفت: انسانها یک کلاس هستند و شما یک شیء از کلاس انسان هستید.
با این مثال کاربردی و ساده امیدوارم که کلیات شیءگرایی رو درک کرده باشید.
ما توی برنامهنویسی کلاسهای زیادی داریم که از اونها اشیای مختلفی تولید میشن. مثلاً وقتی یک متغیر از جنس رشته رو تعریف میکنید و مقداردهیش میکنید در اصل دارید یک شیء از کلاس متغیرهای رشتهای رو خلق میکنید. به زودی با کلاسها و اشیای زیادی قراره کار کنید و کامل مفهوم شیءگرایی رو درک کنید.
همونطور که میدونید هر انسان به عنوان یک شیء توی دنیای واقعی 2 تا مولفه اصلی داره. یکی ویژگیهای اون انسان هستش و دومی کارهایی که اون انسان انجام میده.
- مثال ویژگیهای یک انسان: اسم، سال تولد، جنسیت، رنگ پوست، قد، وزن، رنگ چشم و...
- مثال کارهایی که یک انسان انجام میده: خوابیدن، بیدار شدن، غذا خوردن، حرف زدن و...
واضحه که تمام انسانهای دنیا هر 2 سری مؤلفههای بالا رو دارن پس میشه انسان رو توی برنامهنویسی به عنوان یک کلاس (Class) تعریف کرد و براش یک سری مشخصه (Attribute) و یک سری متد (Method) تعریف کرد.
حالا بیاید با درک مثالهای بالا وارد فضای کدنویسی بشیم تا به صورت عملی کار کردن با کلاسها، اشیاء، مشخصهها و متدها آشنا بشیم. به دستور زیر دقت کنید:
a = [1,2,3]
طبق چیزایی که تا الان یاد گرفتید توی دستور بالا، a یک لیست هستش که توش مقادیر 1 و 2 و 3 قرار گرفته و به همین خاطر جنس متغیر a الان list هستش.
حالا با یادگیری مفهوم شیءگرایی میشه یه جور دیگه هم به این موضوع نگاه کرد. میشه گفت a یک شیء هستش از کلاس list. برای اینکه خودتون هم به این موضوع پی ببرید فقط کافیه دستور پایین رو بنویسید تا نتیجه رو مشاهده کنید:
print(type(a))
با دستور بالا توی خروجی عبارت زیر رو مشاهده خواهید کرد:
<class 'list'>
و این یعنی دقیقاً چیزی که من گفتم. a یک شیء هستش از کلاس list
حالا بیاید با یکی از متدهای این شیء که دیگه حالا اسمش a هستش آشنا بشیم. برای دسترسی به متدهای هر شیء فقط کافیه بعد از اسم اون شیء یه نقطه بزارید تا لیست متدهای اون شیء ظاهر بشه. به دستور زیر دقت کنید:
a.append(4)
توی دستور بالا به کمک متد append شیء لیست که برای اضافه کردن به آیتم به لیست اضافه میشه، تونستیم عدد 4 رو به این لیست اضافه کنیم. حال مقادیر لیست ما که قبل از این دستور 1 و 2 و 3 بود تبدیل شده به لیستی که مقادیرش 1 و 2 و 3 و 4 هستش.
خبر خوبی که براتون دارم اینه که توی پایتون شما هم میتونید به سادگی کلاسهای جدیدی بسازید که مشخصهها و متدهای ساختگی شما رو داشته باشن. یعنی شما تبدیل میشید به یک خالق!!!
اصل کپسوله سازی در برنامه نویسی شی گرا چیست؟
کپسولهسازی بدین معنا است که تمامی اطلاعات مهم، درون شی نگهداری میشوند و نمیتوان به آنها از بیرون کلاس دسترسی داشت.
به عبارتی، با ساخت یک شی به عنوان نمونهای از کلاس، مشخصهها و متدهای کپسولهسازی شده از بیرون کلاس قابل دسترسی و ویرایش نیستند و فقط میتوان به دادههایی از کلاس دسترسی داشت که برنامه نویس آنها را بهصورت عمومی در اختیار سایر کاربران قرار داده است. این اصل شی گرایی باعث ایجاد امنیت بیشتر برای کدهای برنامه میشود.
به منظور تعریف کلاس، میتوان سه حالت «خصوصی» (Private)، «محافظت شده» (Protected) و «عمومی» (Public) را برای تعریف مشخصهها و متدها در نظر گرفت:
حالت خصوصی | «رابط داخلی» (Internal Interface): به متدها و مشخصههایی که حالت خصوصی دارند، فقط میتوان از طریق سایر متدهای درون کلاس دسترسی داشت.
حالت محافظت شده: به متدها و مشخصههای کلاس والد که حالت محافظت شده دارند، فقط میتوان از طریق زیرکلاسها (کلاسهای فرزند) دسترسی داشت.
حالت عمومی | «رابط خارجی» (External Interface): به متدها و مشخصههایی که حالت عمومی دارند، میتوان از بیرون کلاس نیز دسترسی داشت.
به منظور درک بهتر مفهوم کپسولهسازی، میتوان از مثال خودرو استفاده کرد. چراغ راهنمای ماشین و موتور ماشین میتوانند بهترتیب، به عنوان رابط خارجی و رابط داخلی در نظر گرفته شوند. به عبارتی، زمانی که راننده ماشین قصد دارد در حین رانندگی، از جاده اصلی خارج شود، با استفاده از چراغ راهنمای ماشین، سایر رانندگان را از این موضوع مطلع میکند. بدینترتیب، اطلاعات مربوط به چراغ راهنمای ماشین بهصورت عمومی در اختیار سایر افراد قرار میگیرد و راننده با استفاده از آن با سایر رانندگان ارتباط برقرار میکند. با این حال، اطلاعات دمای موتور یا وضعیت آن جزء اطلاعات خصوصی ماشین است که سایر رانندگان در مورد آن اطلاعی ندارند.
اصل انتزاع در شی گرایی چیست؟
اصل انتزاع، مفهومی است که از اصل کپسولهسازی نشأت میگیرد. هدف از این اصل، پنهان کردن جزئیات غیرضروری از کاربران است تا آنها با پیچیدگی کدهای نوشته شده مواجه نشوند. به عبارتی، اصل انتزاع باعث میشود کاربران از قطعه کد نهایی استفاده کنند، بدون آن که نیاز باشد درباره جزئیات پیچیده پیادهسازی آن مطلع شوند.
به منظور درک بهتر اصل انتزاع در شی گرایی میتوان از مثال ملموسی در دنیای واقعی استفاده کرد. دستگاه قهوهساز نمونه خوبی برای توضیح مفهوم اصل انتزاع در برنامه نویسی شی گرا است. زمانی که نیاز است یک فنجان قهوه را آماده کنیم، صرفاً کافی است مقداری آب و پودر قهوه در دستگاه قهوهساز ریخته شود و سپس دستگاه را روشن کرده و نوع قهوه خود را انتخاب کنیم.
به عبارتی، دیگر نیاز نیست درباره نحوه آماده کردن قهوه توسط دستگاه قهوهساز اطلاعات داشته باشیم یا بدانیم دمای مناسب آب برای تهیه قهوه باید چه قدر باشد. به بیان دیگر، سازنده دستگاه قهوهساز به منظور طراحی و ساخت دستگاه، قبلاً به این اطلاعات فکر کرده است و تمامی این اطلاعات از دید کاربر این دستگاه پنهان است. کاربر دستگاه به منظور استفاده از آن، کافی است از دکمههای دستگاه استفاده کند، بدون آن که لازم باشد از عملکرد داخلی دستگاه اطلاعاتی داشته باشد.
در شی گرایی نیز کافی است بدانیم از کدام متد شی میتوان برای انجام وظیفهای خاص استفاده کرد و چه مقداری باید به عنوان پارامتر ورودی این تابع در نظر گرفته شود. بدینترتیب، دیگر نیاز نیست اطلاعاتی از نحوه پیادهسازی عملکرد تابع و انجام محاسبات آن به منظور بازگرداندن در اختیار داشته باشیم.
اصل وراثت در شی گرایی چیست؟
اصل وراثت در شی گرایی این اجازه را به برنامه نویس میدهد تا در کلاس جدیدی، از متدها و مشخصههای سایر کلاسها استفاده کند. به عبارتی، کلاسی را میتوان به عنوان کلاس فرزند تعریف کرد که مشخصهها و متدهای کلاس دیگری (کلاس والد) را به ارث ببرد. بدینترتیب، میتوان از یک کلاس به دفعات در برنامه استفاده کرد که همین امر باعث میشود از نوشتن قطعه کدهای زیاد و تکراری جلوگیری شود. همچنین، میتوان در کلاس فرزند، مشخصهها و متدهای جدیدی را ایجاد کرد که در کلاس والد وجود ندارند و فقط مختص کلاس فرزند هستند.
در تصویر بالا، نمونهای از اصل ارثبری در شی گرایی ملاحظه میشود. در این مثال، کلاس والدی با عنوان وسیله نقلیه مشخص شده است که دارای کلاسهای فرزندی است که یکی از این کلاسهای فرزند، وسایل نقلیه چرخدار را شامل میشود و کلاس فرزند دوم، شامل وسایل نقلیهای هستند که چرخ ندارند. در برنامه نویسی شی گرا، انواع مختلفی از وراثت وجود دارند که در ادامه فهرست شدهاند:
«وراثت منفرد» (Single Inheritance): در این نوع وراثت، هر کلاس فرزند تنها دارای یک کلاس والد است.
«وراثت چندگانه» (Multiple Inheritance): در این نوع وراثت، هر کلاس فرزند میتواند دارای بیش از یک کلاس والد باشد.
«وراثت چند سطحی» (Multi-Level Inheritance): در این نوع وراثت، کلاس فرزند، از کلاس والدی ارثبری میکند که آن کلاس، به عنوان کلاس فرزند، از کلاس والد دیگری ارث میبرد.
«وراثت سلسلهمراتبی» (Hierarchical Inheritance): در این نوع وراثت، ساختار ارثبری کلاسها بهصورت سلسلهمراتبی است. به عبارتی، یک کلاس والد وجود دارد که تمامی کلاسهای فرزند از آن ارثبری میکنند.
«وراثت ترکیبی» (Hybrid Inheritance): این نوع وراثت، ترکیبی از روشهای ارثبری منفرد و چندگانه است.
اصل چندریختی در شی گرایی چیست؟
بر اساس اصل وراثت، کلاس فرزند میتواند متدها و مشخصههای کلاس والد را به ارث ببرد. با این حال، در برنامه نویسی شی گرا، اصلی با عنوان اصل چندریختی وجود دارد که بر اساس آن، میتوان در کلاس فرزند، متدی همنام با متد کلاس والد تعریف کرد، به طوری که وظیفه این متد، با وظیفه متد کلاس والد متفاوت باشد.
به عبارتی، اصل چندریختی این امکان را برای کاربر ایجاد میکند تا کلاس فرزندی مشابه با کلاس والد ایجاد شود، به نحوی که عملکرد متدهای آن با عملکرد متدهای کلاس والدش متفاوت باشد. در مثالی که برای اصل ارثبری ارائه شد، وسایل نقلیه میتوانند شامل دو دسته وسایل نقلیه چرخدار و وسایل نقلیه غیرچرخدار باشد.
چنانچه کلاس والد وسایل نقلیه، متدی با نام «روشن کردن وسیله نقلیه» داشته باشد و کلاسهای فرزند از این کلاس والد ارثبری کنند، تمامی کلاسهای فرزند نیز متد «روشن کردن وسیله نقلیه» را به ارث میبرند؛ اما میتوان نحوه روشن کردن وسیله نقلیه در هر یک از کلاسهای فرزند را به شیوهای متفاوت تعریف کرد. به عنوان مثال، یکی از وسایل نقلیه ممکن است با زدن یک دکمه، شروع به کار کند و وسیله نقلیه دیگر را بتوان با استفاده از چرخاندن یک سوییچ روشن کرد.
ویدیوی جلسه هشتم ویدئو
شیءگرایی در برنامهنویسی

توابع در پایتون
جزوه جلسه نهم مقاله
توابع در پایتون
جلسه نهم برنامهنویسی پایتون
امیدوارم توی جلسه قبلی، مفهوم شیءگرایی توی برنامهنویسی رو درک کرده باشید چون از این به بعد خیلی جاها بهش نیاز پیدا خواهید کرد.
به مرور زمان قراره یاد بگیرید که برنامهنویسی هم انقدرها ساده نیست و هم انقدرها مسخره و بدون نتیجه! این جلسه هم یکی از اون جلسات هستش که بعد از اون سطح دانش و مهارت شما قراره کلی رشد بکنه و پرتاب بشید به یک مرحله بالاتر. پس با من همراه باشید.
درس اول: مفهوم تابع در برنامهنویسی (Function)
توی این جلسه میخوایم وارد مبحث استفاده از توابع توی پایتون بشیم. اما قبل از اینکه وارد این درس بشیم، میخوام مفهوم تابع توی برنامهنویسی رو به زبان ساده بهتون توضیح بدم و بعد هم شروع به استفاده و تعریف توابع کنیم.
بیاید یه مثال ساده رو با هم بررسی کنیم. فرض کنید که شما یه ابزاری نیاز دارید که باهاش بتونید یه پیچ رو باز کنید (و هنوز پیچگوشتی اختراع نشده)؛ در این صورت به نظرتون بهتره که هر بار این وسیله رو اختراع کنید و بعد اون رو دور بندازید؟ مسلماً این کار منطقی نیست. کاری که بهتره انجام بدید اینه که یه پیچگوشتی اختراع کنید یه اسم روش بذارید و هر وقت بهش نیاز داشتید اون رو از کشو یا کمد ابزارها بردارید و بعد دوباره اون رو سر جاش بذارید برای استفادههای بعدی!
این یه مثال ساده از کاربرد توابع بود. بیاید یه مثال مرتبطتر بزنیم. فرض کنید برنامهای نوشتید که توی قسمتهای مختلف برنامه نیاز دارید به دفعات یه عددی بررسی بشه اگر اون عدد زوج بود یه کار خاصی انجام بشه (مثلاً عبارت این عدد زوج است نمایش داده بشه)
پیش از اینکه با مفهوم تابع آشنا بشید مجبور بودید هر بار یه تکهکد توی برنامه بنویسید که باقیمانده تقسیم اون عدد بر 2 رو محاسبه کنه و اگر جواب 0 بود اون کار خاص رو انجام بده. درسته که این کار با 3 خط کد انجام میشه اما به 2 دلیل بهتره که اینجور مواقع از توابع استفاده کنید. یکی به این دلیل که همیشه قضیه انقدر ساده نیست (محاسبه زوج بودن) و دوم اینکه استفاده از توابع باعث خوانا بودن برنامه شما خواهد شد.
حالا بیاید روش تعریف یه تابع رو با هم ببینیم:
def function_name(Input_Parametrs):
#Description
Codes
return output
توی تکه کد بالا عبارت def یه عبارت ثابت هستش و به کامپایلر میگه که من میخوام یه تابع تعریف کنم. بعد از اون با یه کاراکتر اسپیس اسمی برای این تابع در نظر میگیریم و توی پرانتز پارامترهای این تابع رو تعریف میکنیم. پارامترها مقادیر ورودی هستن که تابع قراره روشون کار کنه. (با مثال بیشتر درک خواهید کرد). بعد مثل if و for یه 2 نقطه، اینتر و یک تورفتگی که نشون بده خطوط بعد از این زیرمجموعه این تابع هستن.
خط بعدی #Description هستش که البته برای تعریف یه تابع ضروری نیست اما خیلی مهمه که برای تابع خودتون یه توضیحات بنویسید که هم خودتون بعداً متوجه عملکرد تابع بشید هم دیگران. این خط رو با یک # بنویسید که به صورت کامنت در بیاد و جزو دستورات کدنویسی محسوب نشه.
توی خطوط بعدی کدهای مورد نیاز رو بنویسید و در نهایت مقادیری رو به عنوان مقدار خروجی با عبارت return تعریف کنید. به کد زیر توجه کنید:
def is_even(num):
if num % 2 == 0:
return True
else:
return False
توی کد بالا من یه تابع تعریف کردم به اسم is_even که قراره برای بررسی زوج بودن یه عدد ازش استفاده کنم. میتونم اینطور بگم که یه ابزار تعریف کردم که هر وقت ازش نیاز داشتم بتونم استفاده کنم و دیگه هر بار باقیمانده رو محاسبه نکنم. توجه کنید که is_even یه نام دلخواه هستش و هر اسم دیگهای که میتونید روش بذارید اما بهتره که توی نامگذاری توابع خوانا بودن و قابل درک بودن رو هم مدنظر قرار بدید که بعداً حداقل خودتون بفهمید چی نوشتید! 😊 توی پرانتز هم یه متغیر به اسم num تعریف کردم که بتونم توی برنامه ازش استفاده کنم.
از خط دوم، تابع من شروع میشه؛ توی این تابع با دستور if گفتم اگر مقدار داخل num تقسیمش بر 2 باقیمانده صفر داشت عبارت True و در غیر اینصورت عبارت False رو به عنوان خروجی این تابع برگردون.
حالا کافیه هر جا نیاز داشتم به شکل زیر ر از این تابع استفاده کنم:
if is_even(9) == True:
print("Even")
توی تکه کد بالا به جای اینکه مستقیما باقیمانده 9 بر 2 رو محاسبه کنم، از تابعی که بالاتر تعریف کرده بودم که اسمش is_even بود استفاده کردم. اینجا به تابع is_even عدد 9 رو به عنوان ورودی تحویل دادم و بررسی کردم که اگر خروجی این تابع True بود توی خط بعدی دستور پرینت اجرا بشه.
کامل این برنامه میشه کدهای زیر:
def is_even(num):
if num % 2 == 0:
return True
else:
return False
if is_even(5) == True:
print("Even")
نکته مهم: همیشه توی یه فایل کد، اول توابع باید نوشته بشن تا توسط کامپایلر ابزارها (یا همون توابع شما) ایجاد بشن تا بعد بتونید توی بدنۀ برنامه ازشون استفاده کنید.
درس دوم: انواع تابع در پایتون
تابع در پایتون به سه نوع تقسیم می شود:
- توابع داخلی که به آنها Built-in Functions گفته میشود.
- توابع ساخته شده توسط کاربر که User-Defined Functions نامیده میشوند.
- توابع ناشناس که با نام Anonymous functions نیز شناخته میشوند.
در این قسمت انواع تابع در پایتون توضیح میدهیم.
توابع داخلی پایتون
توابع داخلی یا built-in functions به توابعی گفته میشود که عملکرد آنها به صورت پیشفرض در مفسر پایتون قرار گرفته است و برای استفاده از آنها فقط کافیست نام آن تابع را فراخوانی کنید. در لیست زیر چند مورد از مهم ترین توابع داخلی پایتون را برایتان آورده ایم:
- تابع printکه برای چاپ مقدار در خروجی استفاده میشود.
- تابع inputکه برای گرفتن ورودی از کاربر استفاده میشود.
- تابع sortedکه برای مرتب کردن آبجکت ها استفاده میشود.
- تابع roundکه برای گرد کردن اعداد استفاده میشود.
- تابع typeکه برای مشخص کردن نوع یک آبجکت استفاده میشود.
- تابع maxکه برای مشخص کردن بیشترین مقدار استفاده میشود.
- تابع sumکه برای جمع کردن چند عدد استفاده میشود.
در این بخش فقط تعداد کمی از توابع داخلی پایتون را دیدید. پایتون دارای توابع داخلی زیادی است.
توابع ساخته توسط کاربر در پایتون
پایتون دارای توابع داخلی مفید بسیاری است. این توابع یک کار از پیش تعریف شده را انجام میدهند و میتوانند در هر برنامهای بنا به نیاز فراخوانی شوند. با این حال، اگر یک تابع داخلی مناسب برای هدف خود پیدا نکردید، میتوانید یک تابع را ایجاد کنید. به این نوع توابع که توسط شخص برنامه نویس ایجاد میشوند User defined functions گفته میشود.
همانطور که در قسمت قبل دیدید برای ساخت یک تابع باید از کلمه کلیدی def استفاده کنید:
توابع ناشناس در پایتون
در پایتون، توابع ناشناس به توابعی گفته میشود که بدون نام باشند. در حالی که توابع معمولی با کلمه کلیدی def ساخته میشوند، برای ساخت توابع ناشناس باید از کلمه کلیدی lambda استفاده کنید. به همین دلیل توابع ناشناس، توابع لامبدا نیز نامیده میشوند.
ساختار توابع لامبدا به شکل زیر است:
double = lambda x: x * 2
print(double(5))
در کد بالا با استفاده از توابع ناشناس تابعی نوشتیم که یک عدد گرفته و آن را ضربدر دو میکند.
درس سوم: تفاوت پارامتر و آرگومان
بسیاری از برنامه نویسان کلمات پارامتر و آرگومان را به جای هم استفاده میکنند و گمان میکنند که این دو با هم تفاوتی ندارند. کلمات آرگومان و پارامتر هر دو به اطلاعات ورودی به تابع اشاره میکنند اما با جهتی متفاوت.
یک پارامتر(parameter) به ورودی هایی گفته میشود که در تعریف تابع مشخص شدهاند. مثلا در کد زیر، تابع is_even دارای یک پارامتر به نام num است.
def is_even(num):
if num % 2 == 0:
return True
else:
return False
if is_even(9) == True:
print("Even")
اما آرگومان(argument) که به صورت مختصر args هم خوانده میشود، به اطلاعاتی گفته میشود که در زمان فراخوانی تابع به آن ارسال میشود. مثلا در کد بالا مقدار عدد 9 را به عنوان آرگومان به تابع is_even ارسال کردیم.
میتوانید از کلمات آرگومان و پارامتر به جای یکدیگر استفاده کنید و اشکالی ندارد اما دانستن تفاوت بین این دو مهم است.
توی دوره پیشرفته پایتون انواع آرگومان رو یاد خواهید گرفت و تا همینجا یادگیری کار کردن با توابع توی دوره مقدماتی کافیه.
ویدیوی جلسه نهم ویدئو
توابع در پایتون
تمرین جلسه نهم تمرین
توابع در پایتون
تمرین شماره 20 توابع در پایتون
توی یک فایل ژوپیتر نوتبوک (ipynb) 2 تا تابع به نامهای left_star و right_star تعریف کنید که کارشون چاپ ستاره به تعداد سطری باشه که از کاربر میگیره. و بعد هم در ادامه از این توابع استفاده کنید. (تمرینهای 15 و 16)
right_star تمرین 15 و left_star تمرین 16 رو انجام بده
تمرین شماره 21 توابع در پایتون
تابعی بنویسید که یه عدد از کاربر بگیره و معادل حروف اون رو به فینگلیش چاپ کنه. مثلاً اگر ورودی 22 بود چاپ کنه bist o do

ساخت کلاس در پایتون
جزوه جلسه دهم مقاله
ساخت کلاس در پایتون
جلسه دهم برنامهنویسی کامپیوتر
توی جلسات قبلی با مفهوم شیءگرایی توی برنامهنویسی و مفاهیمی مثل وراثت یا ارثبری آشنا شدید. توی این جلسه قصد دارم نحوه تعریف یک شیء جدید توی پایتون و نحوه استفاده از اون شیء رو توی بخشهای مختلف برنامه بهتون آموزش بدم.
جلسه اول: تعریف کلاس
برای تعریف کلاس در پایتون باید از کلمه کلیدی class به همراه نام کلاس و علامت دو نقطه ( : ) استفاده کنیم. در پایتون، حرف اول نام کلاس، با حرف بزرگ نوشته میشه (البته اجباری نیست) و باید از درج فاصله در نام کلاس خودداری کرد.
بعد از اعلان کلاس، میتونید از «داک استرینگ» (Docstring) استفاده کنید. داک استرینگها توضیحاتی در پایتون هستن که بعد از اعلان کلاس یا تابع نوشته میشن و شرحی از عملیات اونها رو ارائه میدن. نوشتن داک استرینگها الزامی نیستند اما به خوانایی کد و قابلفهم کردن آن کمک زیادی میکنه. مثال زیر، نحوه تعریف یک کلاس با نام Students رو نشان میده.
class Students:
#Docstring
codes
فرض کنید قصد داریم برنامهای بنویسیم که توی اون یه موجودیتی به نام دانشآموز وجود داره و قراره که سرویسهایی رو به دانشآموزها ارائه بده. پس نیاز داریم که اول یک آبجکت (شیء) به نام دانشآموز بسازیم که شامل یک سری ویژگی و متد باشه.
مثلاً برای آبجکت دانشآموز میشه ویژگیهایی مثل نام و نام خانوادگی، نمرات، سن، وزن و قد رو تعریف کرد.
همچنین میشه برای این آبجکت متدهایی مثل، محاسبه معدل، ثبتنام در دانشگاه، محاسبه میزان تناسب اندام و... رو تعریف کرد.
class students:
fname = ""
lname = ""
age = 0
weight = 0
height = 0
def calc_bmi(self):
bmi = (self.weight / (self.height * self.height)) * 10000
if bmi <= 16:
bmi_type = "لاغری بغرنج"
elif bmi > 16 and bmi < 18.5:
bmi_type = "کمبود وزن"
elif bmi >= 18.5 and bmi < 25:
bmi_type = "وزن طبیعی"
elif bmi >= 25 and bmi < 30:
bmi_type = "دارای اضافه وزن"
elif bmi >=30 and bmi < 35:
bmi_type = "چاق معمولی"
elif bmi >= 35 and bmi < 40:
bmi_type = "چاقی شدید"
elif bmi >=40 and bmi < 60:
bmi_type = "چاقی بغرنج"
elif bmi >= 60:
bmi_type = "ابرچاقی"
return bmi , bmi_type
توی تکه کد بالا به کمک دستور class یه کلاس به اسم دانش آموز تعریف کردم. در ادامه متغیرهای fname، lname و... رو هم به عنوان ویژگیهای این شیء در نظر گرفتم و یه تابع تعریف کردم که میزان bmi دانشآموز رو بر اساس قد و وزن محاسبه میکنه.
جلسه دوم: ایجاد نمونه از شیء تعریف شده
ایجاد یک نمونه جدید از شیء تعریف شده توی پایتون کار بسیار سادهای هستش. فقط کافیه مثل تکه کد زیر، این کار رو انجام بدید:
student1 = students()
student1.fname = input("First name: ")
student1.lname = input("Last name: ")
student1.age = int(input("Age: "))
student1.weight = float(input("Weight: "))
student1.height = float(input("Height: "))
توی خط اول کد بالا یه نمونه جدید به اسم student1 از شیء students ساختم و بعد توی خطوط بعدی ویژگیهای این شیء رو با مقادیری که از کاربر گرفتم مقداردهی کردم.
bmi , bmi_type = student1.calc_bmi()
به کمک دستور بالا، متد calc_bmi() شیء studednt1 رو فراخوانی کردم و گفتم خروجی این تابع که توی کلاسم، مقدار bmi و bmi_type بوده رو توی 2 متغیر جدید که اونها رو هم bmi و bmi_type نامگذاری کردم بریزه.
مجموع کدهای بالا میشه برنامۀ زیر:
class students:
fname = ""
lname = ""
age = 0
weight = 0
height = 0
def calc_bmi(self):
bmi = (self.weight / (self.height * self.height)) * 10000
if bmi <= 16:
bmi_type = "لاغری بغرنج"
elif bmi > 16 and bmi < 18.5:
bmi_type = "کمبود وزن"
elif bmi >= 18.5 and bmi < 25:
bmi_type = "وزن طبیعی"
elif bmi >= 25 and bmi < 30:
bmi_type = "دارای اضافه وزن"
elif bmi >=30 and bmi < 35:
bmi_type = "چاق معمولی"
elif bmi >= 35 and bmi < 40:
bmi_type = "چاقی شدید"
elif bmi >=40 and bmi < 60:
bmi_type = "چاقی بغرنج"
elif bmi >= 60:
bmi_type = "ابرچاقی"
return bmi , bmi_type
student1 = students()
student1.fname = input("First name: ")
student1.lname = input("Last name: ")
student1.age = int(input("Age: "))
student1.weight = float(input("Weight: "))
student1.height = float(input("Height: "))
bmi , bmi_type = student1.calc_bmi()
print("Dear " + student1.fname + " " + student1.lname + " , Your BMI is: " + str(int(bmi)) + " and your type is: " + bmi_type)
الان اگر این برنامه رو اجرا کنید، از شما نام، نام خانوادگی، سن، وزن و قد دانشآموز رو ازتون میپرسه و اول یک شیء از جنس (کلاس) دانشآموز براتون میسازه و بعد به کم متد (تابع) calc_bmi، میزان BMI و نوع BMI رو چاپ میکنه.
نکته مهم اینه که حالا اگر بخواید اطلاعات دانشآموز دیگهای رو وارد برنامه کنید، فقط کافیه که یه نمونه جدید از کلاس students بسازید و مقداردهی کنید.
نکته: متغیر self رو زمانی توی دستورات کلاس استفاده میکنیم که میخوایم شیء فعلی که داریم روش کار میکنیم رو صدا بزنیم. مثلاً توی دستورات بالا توی متد calc_bmi من یک پارامتر به نام self رو به عنوان پارامتر ورودی دادم و موقع استفاده از این متد توی برنامه، هیچ مقداری ندادم. متغیر self اینجا به شیء من اشاره میکنه، همون شیء که الان دارم روش کار میکنم؛ یعنی student1.
شاید اولش گیج بشید و درکش نکنید. ولی بعد از اینکه چند تا آبجکت جدید و خلاقانه ساختید، خودتون کاملاً درک خواهید کرد که self و باقی اجزای یه کلاس چطور کار میکنن.
ویدیوی جلسه دهم ویدئو
ساخت کلاس در پایتون
پروژه پایانی تمرین
توابع در پایتون
با استفاده از تمام آموختههای خود به شکلی که از تمامی موارد زیر استفاده کرده باشید، یک برنامه بنویسید:
- انواع داده
- انواع متغیر
- دستور print
- دستور input
- شرط (IF)
- حلقه for
- حلقه while
- لیست
- دیکشنری
- تابع مستقل
- حداقل یک کلاس شامل حداقل 20 ویژگی و 5 متد داخلی
نکته اول: ابتدا صورت سوال خود را برای ما ارسال کنید تا پس از تایید شروع به آمادهسازی نمایید.
نکته دوم: از روز ارائه این تمرین به شما، حداکثر 1 هفته برای تعیین پروژه و پس از تعیین پروژه حداکثر یک ماه جهت ارائه فایل ipynb زمان دارید.
نکته سوم: استفاده از هر گونه کتابخانه و دستور جدید که تدریس نشده بلامانع است.
نکته چهارم: تمیزی کد شامل رعایت فاصله بین خطوط، تورفتگیها، کامنتگذاری و... تأثیر بسزایی در کیفیت پروژه خواهد داشت.
نکته پنجم: رابط کاربری برنامه و پیغامها بایستی به شکلی باشد که هر کاربری که برای اولین برنامه را اجرا میکند بتواند با آن کار کند.
نکته ششم: استفاده از منابع مختلفی مثل ChatGPT آزاد بوده ولی صاحب پروژه بایستی بتواند در روز دفاع، از تمام خطوط کد خود دفاع کند (پس سعی کنید استفاده نکنید توی پروژه تمرینی تا قوی بشید)

کتابخانه در پایتون
جزوه جلسه یازدهم مقاله
کتابخانه در پایتون
جلسه یازدهم برنامهنویسی کامپیوتر
سلام عزیزان بازم مثل همیشه امیدوارم حالتون عالی باشه. بابت این همه اطلاعاتی که تا اینجا در مورد برنامهنویسی به زبان پایتون به دست آوردید بهتون تبریک میگم. توی این جلسه و جلسه بعدی قراره که بریم سراغ مفهوم کتابخانه (Library) در پایتون و بعد هم چند تا کتابخونه مهم پایتون رو بهتون معرفی کنم و باهاشون یه مقدار کار کنیم. بعد از این جلسه ازتون انتظار میره که بتونید برای نیازهای خودتون غیر از ساخت تابع و کلاس، یه مرحله بالاتر برید و یه کتابخونه پیدا کنید و با استفاده از documentation هر کتابخونه بتونید ازشون به درستی برای اهدافتون استفاده کنید.
درس اول: کتابخانه در پایتون چیست؟
بدون شک یکی از بزرگترین دلایل محبوبیت پایتون، این است که بیش از صدهزار کتابخانه پایتونی در دسترس برای انتخاب وجود دارد. هر چه یک زبان برنامه نویسی دارای کتابخانهها و پکیجهای بیشتری باشد، موارد استفاده متنوعتری هم میتواند داشته باشد. از میان هزاران هزار کتابخانه پایتون، تشخیص اینکه کدام یک خوب است و کدام یک به فراموشی سپرده خواهد شد، بسیار مشکل است. برای معرفی کتابخانه های پایتونی که باید بشناسید، برخی از بهترین آنها در این مطلب فهرست شده است.
کتابخانه های پایتون مجموعهای از ماژولها، توابع، کلاسها و موارد دیگر هستند که به توسعهدهندگان کمک میکنند تا با استفاده از کدهای موجود، بدون نیاز به اختراع مجدد چرخ، فرآیندهای خود را سرعت بخشند. کتابخانهها میتوانند عمومی یا برای اهداف خاصی استفاده شوند. پر واضح است که کتابخانهها به توسعهدهندگان این امکان را میدهند تا روی بخشهای مهم برنامههای خود تمرکز کنند؛ زیرا دیگر مجبور به کدنویسی همه چیز از صفر نیستند. البته قبل از جواب دادن به این سوال، ابتدا باید بدانیم تعریف خود کتابخانه چیست و حداقل از نظر برنامه نویسی چه مفهومی دارد.
کتابخانهها از «کلاسها» (Classes)، «متدهای کاربردی» (Utility Methods) و «ماژولها» (Modules) تشکیل شدهاند. این ابزار در حین برنامه نویسی بسیار کاربردی و مفید هستند. به جای نیاز به نوشتن کدها از صفر، میتوان از اجزای کتابخانهها برای انجام برخی وظایف خاص استفاده شود. در نتیجه در زمان و انرژی صرفهجویی زیادی میشود. به علاوه، کتابخانهها کدها را قابل استفاده مجدد میکنند و در عین حال، باعث سازماندهی استانداردی میان توسعهدهندگان میشوند. حالا دقیقاً کتابخانهها در پایتون چه چیزی هستند؟
از پرکاربردترین زبانهای سال ۲۰۲۲ میتوان به پایتون اشاره کرد که برای طیف وسیعی از اهداف و برنامههای کاربردی مورد استفاده قرار میگیرد. یکی از بزرگترین دلایل محبوبیت پایتون به این خاطر است که با طیف گستردهای از کتابخانههای «منبع آزاد» (Open-Source)عرضه میشود که نهتنها رایگان، بلکه هنگام استفاده نیز بسیار ساده هستند.
شایان ذکر است از آنجا که پایتون در صنایع بسیار متنوعی استفاده میشود، کتابخانههای اصلی پایتون تقریباً برای هر هدف قابل تصوری وجود دارند.
درس دوم: انتخاب کتابخانه
در انتخاب کتابخانه پایتون چه نکاتی را باید درنظر گرفت؟
اکنون که میدانید یک کتابخانه در پایتون چه کاری میتواند برای شما انجام دهد، سوال بعدی ممکن است این باشد که چگونه کتابخانه مناسب را انتخاب کنیم؟ کاملاً قابل درک است که در این مورد تعجب کنید، بالاخره با وجود بیش از 137 هزار کتابخانه پایتون تا به امروز، چگونه باید تصمیم گرفت کدام یک برای نیازهای شما بهترین است؟
زمانی که با چنین انتخاب گستردهای روبرو میشوید، تصمیم گیری میتواند سخت باشد. برخی ممکن است حتی احساس ناتوانی در انتخاب خود داشته باشند و مطمئن نباشند که چگونه باید تصمیم بگیرند. برای برخی دیگر، نتیجه نهایی ممکن است چنین باشد که آنچه را نیاز دارند از صفر کدنویسی کنند. اما اصلا لازم نیست سردرگم شویم یا همه کدها را خودمان بنویسیم، چرا که راهکارها و ترفندهایی کاربردی وجود دارند که میتوان با استفاده از آنها بهترین کتابخانه را بر اساس نیاز خود انتخاب کرد.
در ادامه به مواردی اشاره شده است که باید هنگام انتخاب از بین بهترین کتابخانه های پایتون در نظر گرفته شوند.
هدف موردنظر چیست؟
دانستن قصد یا هدف اصلی پروژه شما برای کمک به محدود کردن فهرست کتابخانه های پایتون قابل اجرا اهمیت دارد. لازم است برای کوچکتر کردن مجموعه انتخابها، در هر زمینه، اهداف و تخصصهای دیگری را در نظر گرفت که ممکن است با این هدف اصلی تلاقی داشته باشند. به عنوان مثال، اگر پروژه شما متمرکز بر علم داده است، احتمالاً به کتابخانهای نیاز دارید که بتواند از مدیریت داده و مصورسازی دادهها نیز پشتیبانی کند.
چه نسخهای از پایتون مورد استفاده قرار گرفته است؟
این روزها، نسخههای مختلفی از پایتون وجود دارد که میتوان برای پروژهها از آنها استفاده کرد. اگر نسخه خاصی را برای برنامه خود انتخاب کردهاید، باید مطمئن شوید که هر کتابخانهای که استفاده میکنید با نسخه مذکور پایتون سازگار است یا خیر.
آیا این کتابخانه با سایر کتابخانههای مورد استفاده در تعامل و هماهنگی است؟ اگر از چندین کتابخانه استفاده میکنید، ایده خوبی است که مطمئن شوید همه آنها به خوبی با یکدیگر کار میکنند. کتابخانههای ناسازگار یا همپوشان ممکن است بیش از ارزششان، برای شما دردسر ایجاد کنند.
آیا این کتابخانه با بودجه موردنظر شما متناسب است؟
تعداد زیادی از کتابخانه های پایتون منبع آزاد وجود دارد که میتوانید کاملاً رایگان از آنها استفاده کنید. اگر بتوانید مواردی را بیابید که کاملاً با پروژه شما مطابقت دارند، ممکن است اصلاً نیازی به پرداخت هزینه برای هیچ کتابخانهای نداشته باشید. با این حال، برخی از کتابخانهها وجود دارند که از شما میخواهند برای دسترسی هزینه پرداخت کنید. ممکن است بخواهید قبل از اینکه تصمیم خود را نهایی کنید، هزینه کتابخانه را در نظر بگیرید.
درس سوم: برترین کتابخانه های پایتون در سال 2024
باتوجه به طیف وسیع کتابخانه های پایتون در حوزههای مختلف، در این مطلب میخواهیم به بررسی چندین مورد از آنها در هر زمینه بپردازیم. بیشک کتابخانههای پرکاربرد زیادی به زبان پایتون وجود دارند که براساس نیاز کاربر میتوان از هر یک استفاده کرد، اما به منظور مختصر و مفید بودن مطلب، ابتدا به توضیح ۱۰ کتابخانه متنوع در حیطههای متفاوت پرداخته و سپس تعدادی از آنها که بیشتر در حوزه علوم داده و یادگیری ماشین کاربرد دارند را صرفا نام میبریم.
- Pandas
- Numby
- TensorFlow
- SciPy
- Matplotlib
- Keras
- SciKit-Learn
- PyTorch
- Requests
- Pillow
- Scrapy
- Asyncio
- Tkinter
- Six
- aiohttp
- Pygame
- Kivy
- OpenCV
درس چهارم: نصب کتابخانه
نصب کتابخانه در پایتون معمولاً به دو روش انجام میشود. در رویکرد اول از مدیر بسته pip استفاده میشود و در روش دوم نیز کاربر میتواند خودش تمام مراحل نصب کتابخانه در پایتون را بدون مدیر بسته خودکار و به صورت دستی انجام دهد. در روش اول از سیستم مدیریت بسته «pip» استفاده میشود و در روش دوم، نحوه نصب کتابخانه در پایتون با اجرای تک تک دستورات توسط کاربر (به صورت دستی) انجام خواهد شد.
همانطور که پیشتر به آن اشاره شد، استفاده از pip برای نصب پکیجها رویکرد بدون دردسر و مناسبی به حساب میآید. از سوی دیگر، نصب کتابخانه در پایتون با کمک خط فرمان با اجرای دستورات توسط کاربر، کاربردهای خاص خود را دارد. از جمله موارد استفاده از روش نصب توسط کاربر میتوان به نصب کتابخانههایی مانند Open Cv اشاره کرد. اکنون در ادامه هر یک از این دو روش به طور کاربردی و در عین حال ساده شرح داده شدهاند.
نحوه نصب کتابخانه در پایتون با استفاده از pip
پیش از آن که به آموزش نصب کتابخانه در پایتون با استفاده از pip پرداخته شود، ابتدا لازم است به این سوال پاسخ داده شود که pip چیست؟ ادامه این بخش از آموزش نصب کتابخانه در پایتون به این موضوع اختصاص داده شده است.
pip چیست؟
pip یک سیستم مدیریت بسته (Package Manager) برای پایتون است. سیستم مدیریت بسته ابزاری است که امکان نصب و مدیریت کتابخانهها و متعلقات (وابستگیها | Dependancy) اضافی پایتون را به برنامه نویسان میدهد. لازم به ذکر است که با کمک pip میتوان کتابخانهها و وابستگیهایی را نصب و مدیریت کرد که به عنوان بخشی از کتابخانه استاندارد توزیع نشدهاند. سیستم مدیریت بسته اهمیت زیادی دارد، به طوری که pip از نسخههای 3.4 به بعد، برای پایتون 3 و از نسخه 2.7.9 برای پایتون 2، در نصبکننده پایتون گنجانده شده است و در بسیاری از پروژههای پایتون استفاده میشود.
گام اول نصب کتابخانه در پایتون با pip: آمادهسازی خط فرمان
در گام اول باید در قسمت جستجوی ویندوز، واژه «Command Prompt» (به معنی خط فرمان) جستجو شود. به منظور جلوگیری از بروز هر گونه پیچیدگی و مشکلی در مورد دسترسیها، باید خط فرمان را به عنوان مدیر یا همان ادمین سیستم اجرا کرد.
گام دوم نصب کتابخانه در پایتون با pip: تغییر محل خط فرمان به نشانی اسکریپتهای پایتون
اکنون باید وارد مسیر اسکریپتهای سیستمی پایتون شد. پوشه اسکریپتها درون پوشه اپلیکیشن پایتون قرار دارد.
گام سوم نصب کتابخانه در پایتون با pip: اجرای دستور pip و نصب کتابخانه مورد نظر
همانطور که پیشتر به آن اشاره شد، در این مرحله میتوان با دستور pip install پکیجهای پایتون را نصب کرد:
pip install package_name
در دستور فوق، به جای «package_name» باید نام پکیج یا همان کتابخانهای وارد شود که قصد نصب کردن آن وجود دارد. حال برای مثال در ادامه به نحوه نصب کتابخانه Pandas (Pandas) با استفاده از pip پرداخته شده است.
C:UsersKishAIAppDataLocalProgramsPythonPython39Scripts> pip install pandas
پس از زدن کلید Enter و نصب پکیج Pandas، پیام زیر نمایش داده میشود:
Successfully installed pandas-1.2.4
با باز کردن Python IDLE و سپس اجرای دستور "import pandas" میتوان به سرعت بررسی کرد که آیا بسته با موفقیت در پایتون نصب شده است یا خیر. در صورتی که هیچ خطایی در IDLE ظاهر نشود، به این معنی است که پکیج مورد نظر با موفقیت نصب شده است. IDLE محیط توسعه و آموزش یکپارچه پایتون به حساب میآید و با نصب پایتون قابل استفاده است.
نصب کتابخانه در پایتون: نصب پکیج در پایتون توسط کاربر و بدون مدیر بسته
با وجود اینکه رایجترین روش نصب کتابخانههای پایتون استفاده از مدیر بسته pip است، اما یک روش جایگزین برای نصب دستی کتابخانههای پایتون، بدون استفاده از دستور pip نیز وجود دارد که در این بخش به آموزش آن پرداخته شده است.
- دانلود فایلهای مورد نیاز: برای دانلود فایلها باید به وب سایت https://pypi.org/ مراجعه و پکیج مورد نیاز را جستجو کرد. بدین منظور، باید روی دکمه دانلود فایلها از منوی سمت چپ کلیک کرد. البته باید توجه داشت که حتماً فایل مربوط به کتابخانه با فرمتgz. دریافت شود. پس از اتمام دانلود فایلها، باید آنها را از حالت فشرده خارج کرد.
- در گام دوم نصب پکیج در پایتون توسط کاربر و بدون مدیر بسته، تغییر دایرکتوری فعلی به فایل حاویpy با استفاده از دستور (cd) انجام میشود.
- در نهایت، پس از تغییر دایرکتوری فعلی به فایل حاوی py، لازم است دستور python setup.py install در خط فرمان وارد شود.
تا این بخش از آموزش نصب کتابخانه در پایتون ، برخی از تعاریف مقدماتی و پیشنیاز مربوط به آن شرح داده شدند و همچنین به آموزش نحوه نصب کتابخانههای پایتون با استفاده از مدیر بسته pip و همچنین به صورت دستی توسط کاربر پرداخته شد.
ویدیوی جلسه یازدهم ویدئو
کتابخانه در پایتون
پروژه پایانی تمرین
توابع در پایتون
با استفاده از تمام آموختههای خود به شکلی که از تمامی موارد زیر استفاده کرده باشید، یک برنامه بنویسید:
- انواع داده
- انواع متغیر
- دستور print
- دستور input
- شرط (IF)
- حلقه for
- حلقه while
- لیست
- دیکشنری
- تابع مستقل
- حداقل یک کلاس شامل حداقل 20 ویژگی و 5 متد داخلی
نکته اول: ابتدا صورت سوال خود را برای ما ارسال کنید تا پس از تایید شروع به آمادهسازی نمایید.
نکته دوم: از روز ارائه این تمرین به شما، حداکثر 1 هفته برای تعیین پروژه و پس از تعیین پروژه حداکثر یک ماه جهت ارائه فایل ipynb زمان دارید.
نکته سوم: استفاده از هر گونه کتابخانه و دستور جدید که تدریس نشده بلامانع است.
نکته چهارم: تمیزی کد شامل رعایت فاصله بین خطوط، تورفتگیها، کامنتگذاری و... تأثیر بسزایی در کیفیت پروژه خواهد داشت.
نکته پنجم: رابط کاربری برنامه و پیغامها بایستی به شکلی باشد که هر کاربری که برای اولین برنامه را اجرا میکند بتواند با آن کار کند.
نکته ششم: استفاده از منابع مختلفی مثل ChatGPT آزاد بوده ولی صاحب پروژه بایستی بتواند در روز دفاع، از تمام خطوط کد خود دفاع کند (پس سعی کنید استفاده نکنید توی پروژه تمرینی تا قوی بشید)

نرمافزار تشخیص چهره
جزوه جلسه دوازدهم مقاله
نرمافزار تشخیص چهره
جلسه دوازدهم و پایانی
سلام عزیزان امیدوارم که مثل همیشه حالتون عالی باشه. دوره برنامهنویسی مقدماتی ما توی این جلسه به اتمام میرسه و مهمترین موضوع برای من اینه که شما به برنامهنویسی علاقهمند شده باشید و اشتیاق یادگیری در شما بیدار شده باشه.
همینطور امیدوار هستم که تا حدی تفکر حل مسئله هم در شما به وجود اومده باشه و از این به بعد سعی کنید زندگی رو یه طور دیگه ببینید و مسائل زندگی رو حل کنید تا قدم به قدم به موفقیت نزدیک بشید و البته دنیا رو جای بهتری برای زندگی دیگران کنید.
از حالا به بعد شما که تا اینجا توی دوره حضور داشتی و با جدیت دنبال کردی میتونی همیشه روی من به عنوان پشتیبان آموزشی حساب کنی و تا ابد هر زمان که سوال یا راهنمایی داشتی ازم بپرسی. منم قول میدم که تا جایی که بلد باشم پاسخ شما رو با دقت کامل بدم.
توی این جلسه که جلسه آخرمونه قصد دارم یه کار عملی خیلی جالب با هم انجام بدیم و لذت برنامهنویسی رو از ته دل بچشیم. پس با من همراه باشید.
درس اول: برنامه تشخیص چهره! (Face Recognition)
بله درست متوجه شدید! امروز قراره با هم یه برنامه تشخیص چهره خیلی ساده بنویسیم تا هم روش استفاده از یک کتابخانه رو به صورت عملی یاد بگیرید و هم اینکه متوجه بشید که برنامهنویسی به کمک زبان پایتون چقدر راحته و چقدر سریع میشه کارهای خیلی بزرگی باهاش انجام داد.
پیشنهاد میکنم حتما ویدیوی این جلسه رو ببینید تا به طور کامل روش انجام این کار رو یاد بگیرید.
اولین چیزی که باید بدونید اینه که برای انجام این پروژه یک سری مراحل رو باید انجام بدید که مجموع این کارها توی کتابخونهای به نام OpenCV آماده شده و فقط کافیه کار با خوندن داکیومنتهای این کتابخونه، کار کردن باهاش رو یاد بگیرید.
همونطور که گفتم هدف من اینه که کاری کنم بدون شرکت کردن توی دورههای آموزشی بتونید بعد از این دوره، برنامهنویسی رو به صورت خودآموز یاد بگیرید و با ترکیب کتابخونههای مختلف و کمی خلاقیت، برنامههای جالب و البته کاربردی تولید کنید.
مرحله اول: نصب کتابخانه OpenCV در پایتون
قدم اول، نصب کتابخونه OpenCV هستش که با اجرای دستور زیر توی ترمینال VsCode میتونید انجامش بدید.
pip install opencv-python
با توجه به اینکه من قصد دارم تصویر رو از دوربین لپتاپ وارد برنامه کنم و همینوطور بعد از فرآیند تشخیص چهره، تصویر خروجی رو نمایش بدم، به همین خاطر از VsCode به جای Google Colab استفاده کردم.
بعد از اینکه این کتابخونه رو توی پایتون نصب کردید حالا میتونید صفحه کد رو باز کنید و شروع به کدنویسی کنید.
مرحله دوم: ایمپورت کردن کتابخانه در برنامه
اولین کاری که بعد از نصب OpenCV باید انجام بدید اینه که این کتابخونه رو توی برنامه وارد کنید. پس با دستور import cv2 توی خط اول برنامه این کتابخونه رو به کد خودتون اضافه کنید. برای اینکه از فرآیند نصب موفقیتآمیز مطمئن بشید یک بار همین یک خط رو اجرا کنید. اگر اروری مشاهده نکردید یعنی نصب کتابخونه با موفقیت انجام شده.
مرحله سوم: ایجاد آبجکت تصویر
همونطور که توی جلسات قبلی تاکید کردم، شیءگرایی تحول عظیمی توی برنامهنویسی ایجاد کرده و پایتون هم با رویکردهای شیءگرایی خیلی جدی خودش تونسته به عنوان یه زبان خیلی محبوب شناخته بشه. توی این مرحله از برنامه تشخیص چهره باید یه آبجکت تصویر (image) تولید کنیم.
داخل کتابخانه OpenCV شیء image تعریف شده و فقط کافیه با یک خط کد یه نسخه از این آبجکت رو تولید کنیم. پس کد زیر رو برای تولید این آبجکت مینویسیم:
image = cv2.imread(imagePath)
توی خط بالا یه آبجکت ایجاد کردیم اسمش رو گذاشتیم image. شما هر اسمی میتونستید روش بذارید. بعد به کمک متد imread از کتابخونه OpenCV که به اختصار cv2 نامگذاری شده، میتونیم یک شی تصویر ایجاد کنیم. داخل پرانتز این متد باید آدرس تصویر خودمون رو بدیم که من از یه متغیر به اسم imagePath استفاده کردم که البته هنوز تعریف و مقداردهی نشده. پس یه خط بالاتر باید این متغیر رو مقداردهی کنید.
imagePath = "img.jpg"
توی کد بالا یه تصویر به اسم img.jpg رو توی پوشه اصلی پروژه کنار فایل کد خودم قرار دادم و اسم اون رو توی متغیر imagePath قرار دادم. دقت کنید که این کد رو حتماً قبل از کد بالایی قرار بدید. اگر هم تصویر شما توی آدرس دیگهای قرار داره باید متغیر imagePath رو با اون مقداردهی کنید.
مرحله چهارم: ساخت شیء تشخیص چهره آبشاری
برای نوشتن یه برنامه تشخیص چهره، اصلیترین کاری که باید انجام بدید که یه جورایی هسته برنامه شما هم هست اینه که یک مدل هوش مصنوعی رو پرورش بدید که بتونه از توی تصاویر چهره رو تشخیص بده. این کار به کمک تحلیل پیکسلها و اجرای یک سری فرمول ریاضی انجام میشه که توی این جلسه نیازی به یادگیری این پیچیدگیها نیست، چرا که قراره باز هم از یک کلاس آماده توی کتابخونه OpenCV استفاده کنیم. برای این کار با کد زیر یه آبجکت تشخیص چهره میسازیم:
faceCascade = cv2.CascadeClassifier(cascPath)
توی کد بالا یه آبجکت تعریف کردم به نام faceCascade و با متد cv2.CacadeClassifier تعیین کردم که جنس این آبجکت "تشخیص چهره" باشه. این آبجکت رو OpenCV ساخته و شما فقط دارید ازش استفاده میکنید. مسلماً میدونید که faceCascade یه اسم اختیاریه و شما هر اسمی میتونستید روش بذارید.
اگر دقت کنید میبینید که آرگومان این تابع یک متغیری هستش به نام cascPath که هنوز ما تعریفش نکردیم. قبل از تعریفش بهتره که با عملکرد این تابع کمی آشنا بشیم.
این تابع به این صورت عمل میکنه که یک سری ورودی رو که ما میدونیم چهره یک انسان هستن بهش میدیم و اون یاد میگیره که چهره یعنی چی! حالا باید این ورودی رو بهش بدیم.
برای این کار باید یک فایل XML بهش بدیم که جالبه بدونید این فایل هم آماده برای دانلود هستش! اسم این فایل haarcascade_frontalface_default.xml هستش و با یه سرچ ساده میتونید پیداش کنید دانلودش کنید. حالا باید این فایل رو کنار کد برنامهتون قرار بدید و متغیر cascPath رو با آدرس این فایل مقداردهی کنید. پس کد زیر رو حتما قبل از کد بالا بنویسید که متغیر cascPath تعریف و مقداردهی بشه.
cascPath = "haarcascade_frontalface_default.xml"
حالا شما یک شیء تشخیص چهره دارید که با دیدن کلی چهره، مفهوم چهره رو فهمیده.
مرحله پنجم: تغییر فرمت رنگی
خیلی ساده بگم که هر تصویری که ما میبینیم به زبان کامپیوتر فقط یک سری عدد و در نهایت هم یک سری 0 و 1 هستش. حالا این تصویر چطور به یک سری عدد تبدیل میشه؟
همونطور که میدونید هر تصویر از یک سری پیکسل رنگی تشکیل شده و ترکیب هزاران، میلیونها و گاهی میلیاردها پیکسل، میتونه یک تصویر رو تشکیل بده (مثلاً تصویر یک انسان). هر پیکسل هم توی فرمتهای رنگی مختلف توش یک سری عدد وجود داره. مثلاً توی فرمت رنگی RGB که تلفیقی از 3 رنگ آبی، قرمز و سبز هستش، هر پیکسل 3 تا عدد داره که میشه مقدارهای این 3 رنگ. پس به نظر میرسه که هر تصویر میتونه شامل یک ماتریس 3 بعدی باشه که توی خونههای این ماتریس مقادیر مربوط به هر رنگ نوشته شده.
حالا به نظر شما تصاویر سیاه و سفید یا خاکستری ماتریس چند بعدی دارن؟ به دلیل اینکه توی این نوع از تصاویر هر پیکسل شامل فقط یک عدد میشه و اون میزان سیاهی هستش پس شناسایی این تصاویر برای کامپیوتر خیلی راحتتر و پردازش هم سریعتره.
توی مدلهای هوش مصنوعی زمانی که شما نیاز به رنگ یک تصویر نداشته باشید باید اول اون تصویر رو تبدیل به یک تصویر خاکستری کنید و بعد باقی مراحل رو طی کنید.
از اونجایی که توی این برنامه تشخیص چهره هم رنگ برای ما مهم نیست، اول تصویر مورد نظرمون رو باید به خاکستری تبدیل کنیم. که این هم میشه دستور تبدیل تصویر رنگی به خاکستری:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
هموطنور که میبینید یک آبجکت به نام gray ایجاد کردیم که از کلاس تصویر هستش. بعد به کمک تابع cvtColor از کتابخانه OpenCV تصویر اصلی رو به خاکستری تبدیل کردیم. توی این تابع 2 آرگومان وجود داره که اولی تصویر ماست که بالاتر ایجادش کردیم، دومی هم متد تغییر رنگه که گفتیم میخوایم یه تصویر BGR رو به GRAY تبدیل کنیم.
مرحله ششم: ایجاد شیء لیست چهرهها
حالا وقتشه یه آبجکت جدید بسازیم که جنسش "لیستی از چهرهها" هستش. کلاس این آبجکت هم توسط کتابخونه OpenCV تعریف شده و فقط قراره که با یه تابع ازش استفاده کنید.
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors =5,
minSize=(30, 30)
)
توی کد بالا یه آبجکت به اسم faces ساختیم و قراره که این آبجکت لیستی از چهرهها رو در خودش نگه داره.
یادتون میاد که بالاتر یه آبجکت ساخته بودیم به اسم faceCascade که گفتیم جنسش "تشخیص چهره" هستش؟ حالا میتونیم با متد detectMultiScale این آبجکت و پاس دادن تصویرمون به عنوان آرگومان ورودی، لیستی از چهرههایی داشته باشیم که توی تصویرمون موجوده. این لیست رو faces نامگذاری کردیم.
مرحله هفتم: نمایش تعداد صورت
اینجا دیگه میتونیم نتایج رو به کاربر نمایش بدیم. به کمک دستور print زیر میتونم بگم چند تا چهره توی این تصویر پیدا شده:
print("Found {0} faces!".format(len(faces)))
کد بالا که خیلی سادهست و البته یه مدل دیگهای از مدلهایی که ما گفتیم از پرینت استفاده کرده. شما میتونید با همون مدل خودتون ازش استفاده کنید. len(faces) تعداد چهرهها رو به شما نشون میده. هر جور دوست داشتید چاپش کنید.
مرحله هشتم: ترسیم یک شکل دور هر چهره
بالاتر گفتم که توی faces، لیستی از چهرهها نگهداری میشه درسته؟ حالا میخوام به زبان ماشین همین جمله رو بگم. توی faces یه ماتریس داریم که ستون اولش موقعیت افقی چهره، ستون دوم موقعیت عمودی هر چهره، ستون سوم عرض صورت و ستون چهارم ارتفاع صورت هستش. توی این ماتریس هر ردیف هم نشون دهندۀ یک چهره است. جدول زیر رو ببینید تا متوجه مقادیر داخل faces بشید.
طول چهره | عرض چهره | موقعیت عمودی چهره | موقعیت افقی چهره | چهره |
56 | 56 | 156 | 257 | چهره 1 |
54 | 54 | 44 | 198 | چهره 2 |
56 | 56 | 180 | 480 | چهره 3 |
55 | 55 | 72 | 695 | چهره 4 |
پیشنهاد میکنم faces رو توی کد یک بار پرینت کنید تا خودتون هم مقادیر داخلش رو ببینید.
با توجه به توضیحات بالا حالا میتونیم به کمک دستور زیر دور چهرهها یه مستطیل سبز بکشیم:
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
توی دستور بالا با حلقۀ for توی مقادیر faces میچرخیم. 4 تا متغیر شمارنده داریم به نامهای x و y و w و h که هر کدوم مقدار متناظر خودشون توی ماتریس faces رو مقدار میگیرن و توی ردیفهای ماتریس حرکت میکنن
پس بار اول x میشه موقعیت افقی چهره اول، y میشه موقعیت عمودی چهره اول، w میشه عرض چهره اول و h میشه ارتفاع چهره اول.
به کم تابع rectangle از کتابخونه cv2 میتونیم یک مربع دور چهره ترسیم کنیم. پارامترهای این تابع به ترتیب موارد زیر هستن:
پارامتر اول: تصویری که میخوایم توش مستطیلهامون ترسیم بشه (اینجا دیگه تصویر رنگی رو میدیم بهش، نه تصویر gray که فرآیند تشخیص رو باهاش انجام دادیم چون میخوایم نسخه رنگی تصویرمون رو ببینیم پس image رو به عنوان آرگومان اول قرار میدیم)
پارامتر دوم: اینجا موقعیت شروع مستطیلمون رو باید قرار بدیم. ما برای اینکه توی حلقه داریم فرآیند چاپ مستطیل رو انجام میدیم و میخوایم دور چهرههامون مستطیل کشیده بشه، پس موقعیت افقی مستطیل رو با موقعیت افقی چهره باید یکسان قرار بدیم تا هر بار که حلقه ما داره میچرخه، بره سراغ چهره بعدی...
پارامتر سوم: اینجا موقعیت پایان مستطیلمون رو وارد کنیم. باز هم مثل موقعیت، باید عرض و ارتفاع هر مستطیل رو توی هر بار اجرای حلقه، مساوی همون چهرهای قرار بدیم که شمارنده حلقه بهش اشاره میکنه. پس اینجا موقعیت افقی پایان مستطیل رو مساوی x+w و موقعیت عمودی پایان مستطیل رو y+h قرار میدیم. دقت کنید که دلیل این کار اینه که توی ماتریس faces ستون سوم عرض چهره و ستون چهارم طول چهره هستش، در صورتی که توی تابع ترسیم مستطیل، عرض و ارتفاع نباید وارد کنیم، بلکه موقعیت افقی و عمودی پایان مستطیل رو باید وارد کنیم. برای همین هم برای این که بتونیم مستطیلی به اندازۀ هر چهره ترسیم کنیم باید شروع افقی رو با عرض جمع کنیم و شروع عمودی رو با ارتفاع جمع کنیم تا موقعیت پایان هر مستطیل (افقی و عمودی) رو بسازیم.
پارامتر چهارم: این پارامتر برای تعیین رنگ مستطیل استفاده میشه که از فرمت BGR استفاده میکنه. (0,255,0)
میشه رنگ سبز. برای ساختن رنگ کافیه عدد اول قبل از کاما رو میزان استفاده از رنگ آبی رو قرار بدید عددی از 0 تا 255، عدد دوم میزان استفاده از رنگ سبز، عدد سوم هم میزان استفاده از رنگ قرمز. هر 3 باید عددی بین 0 تا 255 باشن. توی فتوشاپ میتونید رنگ مورد نظر خودتون رو بسازید و بعد از color box مقادیر مورد نظر رو سر جای خودش قرار بدید تا رنگ مدنظر شما ساخته بشه.
پارامتر پنجم: این پارامتر هم تعیین کننده ضخامت خط مستطیل هستش هر چی عدد بزرگتری باشه، ضخامت خط دور مستطیل بیشتر میشه.
مرحله نهم: نمایش تصویر نهایی
حالا وقتشه تصویری که دور چهرهها مستطیل سبز قرار گرفته رو توی یه پنجره گرافیکی نمایش بدید. اینم کدش:
cv2.imshow("Faces found", image)
همونطور که کاملاً واضحه، از تابع imshow کتابخونه OpenCV برای نمایش تصویر نهایی استفاده کردم و 2 تا آرگومان رو بهش پاس دادم. آرگومان اول عنوان پنجره و آرگومان دوم تصویر مورد نظرم هستش. حالا دیگه image تصویری هستش که دور چهرهها هم مستطیل سبز ترسیم شده.
به کمک این برنامه میتونید چهرههای موجود توی هر تصویر رو با خطای کمی تشخیص بدید. اما اگر قصد دارید که به جای یک فایل، از دوربین لپتاپ برای تشخیص چهره استفاده کنید فقط کافیه آبجکت image رو توی شروع برنامه به جای مقداردهی فایل به شکل زیر مقداردهی کنید:
cam = cv2.VideoCapture(0)
result, image = cam.read()
توی کد بالا به کمک تابع VideoCapture یه عکس از کاربر گرفته میشه و به کمک تابع read، توی image قرار میگیره. از اونجایی که تابع read، 2 تا مقدار برمیگردونه و مقدار دوم تصویر ماست، به همین دلیل 2 تا متغیر رو قرار دادم تا مقدار دوم خروجی تابع read توی image ریخته بشه. مقدار اول هم result هستش و یه مقدار منطقی true یا false خواهد بود. اگر فرآیند عکس گرفتن بدون ارور انجام بشه مقدار true و در غیراینصورت مقدار false به این متغیر پاس داده میشه.
و تمام...
این هم جلسه پایانی و جذاب دوره برنامهنویسی مقدماتی که خواستم براتون شیرین و دلپذیر باشه تا بعد از این با انرژی و اشتیاق کامل برید سراغ یادگیری پیشرفته و تخصصی برنامهنویسی.
امیدوارم به زودی شما رو توی دوره پیشرفته ببینم و در کنار هم بتونیم از پایتون برای اهداف خیلی مهم مثل هوش مصنوعی استفاده کنیم.
بهترینهارو براتون آرزو میکنم و منتظر خبرهای خوب از تکتکتون هستم.
ویدیوی جلسه دوازدهم ویدئو
نرمافزار تشخیص چهره
ضمانت بازگشت وجه ۷ روزه بدون ریسک
در صورت عدم تطابق دوره با سرفصلها، وجه پرداختی شما را بازگشت خواهیم داد.
نظرات برخی از دانشپذیران
مرسی از شما استاد خوب واقعا دارم خوب مفهوم کلاس هارو میفهمم عالی هستین
تمام مطالب کلاس که توسط استاد گفته میشه عالیست
جناب مساوات واقعا مسلط و کامل همه ی نکته ها رو توضیح میدین و توجه میکنید به تک تک بچه ها و این بسیار عالی هست و مسئولیت پذیری شمارو می رسونه با تشکر از شما
سلام شبتون بخیر خیلی خیلی عالی بود ممنون بابت وقتی که میزارید🙏🏻
ممنون تاالان که من راضی بودم ازکلاس ممنون ازتوجهتون.
خوب بود. زمان درست. تدریس عالی
همه چیز عالی بود عالی
از نظر من، کلاس بالاترین سطح آموزشی بود که تا به حال دیدم و خوشحالم که در این دورهها شرکت کردم.
همه چیز عالی بود و بینقص و فوقالعاده
همین گذاشتن فیلم و جزوه کلاس هر جلسه توی سامانه باعث تکرار مطالب و یادگیری بیشتر میشه.
کیفیت آموزش بسیار عالیه و پیشنهادی ندارم چون آموزش و مطالب عالی هستند.
عالی بود میتونم به جرأت بگم ترسی که داشتم خیلی کمتر شد. احساس میکنم بتونم درکنار شما استاد بزرگوار به آنچه که میخوام برسم. و حتی به جرأت میگم یک درصد فکر نمیکردم در مورد مطالبی که از ارز دیجیتال میخوام و دنبالش هستم مقدمهای بگید. ممنونم
فکر میکنم برای شروع دروه خوب بوده، باز هم تمرینات ادامهدار باشه. به نظر من اگه مطالب جلسه آینده توسط دوستان یه مروری بشه که زمان تدریس جلسه واسشون زیاد گنگ و ناشناخته نباشه شاید بتونه در یادگیری مفاهیم کمک بیشتری بکنه. به امید موفقیت بیشتر...
اول تشکر میکنم بابت اینکه با دقت و حوصله به سوالات همگی پاسخ میدید و بعد پیشنهاد میکنم زمانی که تمرینی رو سرکلاس بهمون میدید به تک به تک بچهها سر بزنید و ببینید که چطوری تمرین رو انجام میدن البته که نیاز به پیشنهاد نیست خودتون انجامش دادین و میدین و بازم ممنون از توجهتون 🙏🏻💐
جلسهی دوم هم بسیار عالی و پر انرژی برگزار شد و از هرجهت عالی بود. ممنونم از شما جناب آقای مهندس میلاد مساوات استاد باتجربه و بادانش جزیره کیش
ممنون استاد فعلاً همه چیز اوکیه.
درخواست مشاوره
برای کسب اطلاعات بیشتر درباره این دوره درخواست مشاوره خود را ارسال کنید و یا با ما در تماس باشید.
درخواست مشاورهدوره های مرتبط
دوره تخصص هوش مصنوعی
جلسه اول مفاهیم اولیه هوش مصنوعی ویدیوی جلسه اول ویدئو انواع دادهها و متغیرها در دسترس فایل جزوه کلی (انگلیسی)…
امتیاز دانشجویان دوره
نظرات
3,200,000 تومان

میلاد مساوات
مشاور و محقق هوش مصنوعیمیلاد مساوات فارغالتحصیل دورههای CS50 دانشگاه هاروارد در حوزه علوم کامپیوتر، برنامهنویسی و هوش مصنوعی میباشد. ایشان از مدرسین خبره موسسه آموزشی علوم و فنون کیش بوده و تجارب ارزشمندی در حوزه مشاوره و اجرای پروژههای طراحی سایت، ساخت نرمافزار، توسعه ابزارها و استارتاپهای مبتنی بر هوش مصنوعی دارد.
soheil.taherrkhani99( دانشجوی دوره )
همه چیز عالی و بی نظیر بود
خیلی ممنون
میلاد مساوات(مدیریت)
ممنون از تو سهیل طاهرخانی که یکی از بهترین دانشجوهای این دوره هستی. حضورت سر کلاس به مدرس انرژی و انگیزه میده.
محمد حسین جعفری پور( دانشجوی دوره )
عالی
hamed201ir666( دانشجوی دوره )
خیلی خوشحالم که در این دوره حضور دارم در ۶ جلسه کلی موارد مهم و جدید یاد گرفتم سعی میکنم این دوره و دوره های که از طرف شما برگذار میشه رو به تمام دوستانم معرفی کنم چون برای من مفید بوده و دوست دارم دوستان زیادی استفاده کنن تشکر فراوان از کیفیت تدریس و مفید
میلاد مساوات(مدیریت)
سلام و درود به شما مهندس خدادادی عزیز. بینهایت از لطف شما ممنونم و خدارو شکر میکنم که براتون مفید بوده تا اینجا. در پایان دوره هم ممنون میشم نظر خودتون رو بهم بگید تا بتونم از نظر شما برای بررسی کیفیت دوره استفاده کنم.
aidinsepehry2008( دانشجوی دوره )
سلام استاد تا الان که نصف کلاس گذشته کلاس برای من خیلی جالب بوده و چیز های زیادی رو به من یاد دادید و مطالب کامل و عالی بودند
میلاد مساوات(مدیریت)
درود بهت آیدین جان. خوشحالم که تا اینجای دوره برات خوب و کامل بوده. امیدوارم با دیدن ویدیوها و جزوات و حل تمرینها تا آخر کلاس همینطور عالی و باکیفیت ادامه بدی.
ستایش میرزائی( دانشجوی دوره )
همچی عالیه و نوع تدریس سرکلاس خیلی خوبه ، فقط استاد تمامی مسائلی که سرکلاس میگید واقعا آسونه و میشه حلشون کرد ولی تمریناتی که بهمون میدین یکمی پیچیدس و حتی با دیدن ویدیو ها مشکلمون برطرف نمیشه
rahmatimajd( دانشجوی دوره )
من در دوره های غیر حضوری زیادی در زمینه برنامه نویسی به زبان های مختلف شرکت کردم ، اما به جرأت میشه گفت خروجی کلاس های حضوری قابل قیاس با دوره های آنلاین و غیر حضوری نیست. مخصوصا اگه استادی با دانش ، با اخلاق ، متواضع و مخصوصا همراه با دانشجو مثل جناب آقای مساوات داشته باشی …
Soren
استاد مساوات خیلی ممنون
آرشام توفیقی( دانشجوی دوره )
خیلی خوب بود امیدوارم بتوانم برنامه ی خوبی بنیویسم
محمدرضا مختاری کیا( دانشجوی دوره )
با سلام , از نظر من این دوره یکی از بهترین دوره های برنامه نویسی پایتون بوده و هست. من خودم خیلی چیز ها از استاد ساوات عزیز آموختم هر چند در دوره های غیر حضوری شرکت کردم ولی باز هم از کیفیت دوره چیزی کاسته نشد و الان در حد خیلی خوبی میتوانم برنامه نویسی کنم. تشکر…