۲۰ پروژه ساده پایتون برای تمرین + کد
پیادهسازی پروژههای پایتون بهترین روش برای یادگیری هرچه بهتر و درک عمیقتر مفاهیم برنامه نویسی است. پروژه ساده پایتون به تمرینی گفته میشود که با کمک ابتداییترین دستورات برنامه نویسی نوشته شود. بیشتر اوقات این پروژهها را میتوان با کمک یک یا دو تابع مجزا پیادهسازی کرد. اما گاهی از اوقات برای اجرای این پروژهها به داشتن دانش در حوزههایی مانند ریاضیات، رمزنگاری، کار با ماژول زمان و غیره هم نیاز داریم. برای مثال، ممکن است که بخواهیم فاصله سنی بین دو نفر را از طریق تفریق سن آنها بدست بیاوریم. برای اجرای این پروژه ساده باید با ساختار سال و ماه و روز میلادی یا شمسی آشنایی داشته باشیم. با کمک حل این پروژهها میتوانیم تا حد زیادی مهارتهای خود را ارتقا بدهیم.
- در این مطلب، روش پیادهسازی چند پروژه ساده پایتون را با تکنولوژیهای مختلف بررسی میکنید.
- از تکنیکهایی مانند برنامه نویسی تابعی، تابع Lambda و غیره برای حل مسائل کمک میگیرید.
- سه روش مختلف را برای محاسبه n-امین عدد فیبوناچی در پایتون میآموزید.
- اجرای وظایفی مانند معکوس کردن، شیفت دادن عناصر و غیره را در لیست میآموزید.
- بازی حدس عدد و کلمه را به صورت پروژه ساده پایتون اجرا میکنید.
- روش اجرای اپلیکیشنهای ساده To-Do و تولید کننده پسورد را در پایتون یاد میگیرید.


در این مطلب از مجله فرادرس ۲۰ پروژه ساده پایتون را برای تمرین پیادهسازی میکنیم. این پروژهها از گزینههای بسیار سادهای مانند تشخیص عدد بزرگتر بین دو عدد شروع شده و تا اجرای چند پروژه کاربردی به پیش میروند. پروژههای انتهای مطلب، طوری انتخاب شدهاند که بتوان از آنها در پیادهسازی برنامههای واقعی استفاده کرد.
۱- پیدا کردن عدد بزرگتر از بین دو عدد مجزا
در این پروژه باید برنامهای بنویسیم که بتواند دو عدد مجزا را با همدیگر مقایسه کرده و مقدار بزرگتر را برگرداند. با داشتن این برنامه میتوان از آن برای پیدا کردن مقدار بزرگتر در انبوهی از اعداد مختلف نیز استفاده کرد.
برای حل این پروژه از سه روش مختلف استفاده میکنیم.

در جدول پایین، این سه روش را به صورت مختصر و ساده با همدیگر مقایسه کردهایم.
| روش | ایده اصلی | ویژگی روش |
|---|---|---|
| max() | پیدا کردن بزرگترین مقدار | کوتاه و سریع |
| عملگر > | مقایسه دو عدد | ساده و مستقیم |
| if-else | بررسی شرط | مناسب تصمیمگیری |
تابع max
تابع max() میتواند دو یا چند مقدار مختلف را با همدیگر مقایسه کند و عدد بزرگتر را برگرداند. این تکنیک، کوتاهترین روش کدنویسی برای مقایسه اعداد و کشف مقدار بزرگتر است.
بعد از اجرای کدهای بالا عدد 7 در خروجی نمایش داده میشود.
استفاده از عملگر بزرگتر
عملگر بزرگتر، جزو عملگرهای مقایسهای پایتون است. از این عملگرها برای نوشتن عبارتهای شرطی به کمک دستور if در پایتون استفاده میشود. با استفاده از عملگر بزرگتر «>» میتوانیم عدد بزرگتر را نمایش بدهیم. تفاوتی نمیکند که این شرط درست ارزیابی شود یا غلط، به هر حال اعداد یا مساوی هم هستند یا یکی از آنها از دیگری بزرگتر است.
بعد از اجرای کدهای بالا عدد 7 در خروجی نمایش داده میشود.
استفاده از عبارت شرطی if-else
از ساختار if-else در پایتون برای بررسی شرایط مختلف استفاده میشود. به این صورت که اگر شرطی درست بود برنامه رفتار خاصی را نشان میدهد. اما اگر شرط غلط باشد، برنامه میتواند رفتار یا عملیات دیگری را اجرا کند.
بعد از اجرای کدهای بالا عدد 7 در خروجی نمایش داده میشود.
۲- محاسبه سود ساده در پایتون
در این بخش، پروژه ساده پایتون برای محاسبه سود ساده سالانه را پیادهسازی میکنیم. برای محاسبه «سود ساده» (Simple Interest) باید مقدار کل سرمایه، زمان (بر حسب سال) و میزان درصد سود سالانه را داشته باشیم. سپس از فرمول «سود ساده» استفاده کرده و نتیجه را برمیگردانیم.
برای مثال، فرض کنیم که مبلغ اصلی ۱۰۰۰ تومان باشد. میخواهیم مقدار سود ساده این پول در مدت ۲ سال و با نرخ سود ۵٪ را محاسبه کنیم. برای محاسبه سود باید از فرمول مخصوصی کمک بگیریم که در پایین نوشته شده است.
در این فرمول پارامترهای زیر وجود دارد.
- P: مبلغ کل - این حرف سرنامی از عبارت «Principal Amount» به معنای «ملغ اصلی» است.
- T: مدت زمان بر اساس سال - این حرف سرنامی از عبارت «Time» به معنای «زمان» است.
- R: نرخ سود در سال - این حرف سرنامی از عبارت «Rate Of Interest Per Annum» به معنای «نرخ سود سالانه» است.
- Simple Interest: مقدار سود سالانه

خوب الان مقدار سود ساده سالانه مثال بالا را محاسبه میکنیم. میدانیم که p = 1000 و T = 2 و R = 5 هستند. با جایگذاری آنها در فرمول، نرخ صورت به صورت زیر محاسبه میشود.
یعنی اینکه برای سرمایه ۱۰۰۰ واحدی در مدت دو سال با نرخ سود ۵٪، ۱۰۰ واحد پولی سود بدست میآید. در زبان برنامه نویسی پایتون میتوان از چند روش مختلف برای محاسبه سود ساده استفاده کرد. در این بخش، دو روش را بررسی میکنیم.
برنامه نویسی تابعی
تعریف تابع برای محاسبه سود ساده سالانه باعث افزایش خوانایی و قابلیت استفاده دوباره از کدها میشود. به طور خاص در زمانهایی که بخواهیم این محاسبه را چندین بار برای مقادیر مختلف در برنامه انجام بدهیم، این روش، بهترین تکنیک است. فقط کافی است که تابع را با مقادیر مناسب به عنوان ورودی، فراخوانی بکنیم. انجام این کار از نوشته شدن کدهای تکراری جلوگیری میکند. بنابراین برنامه تمیز بوده و نگهداری آنهم ساده است.
بعد از اجرای کدهای بالا عدد 3.84 در خروجی نمایش داده میشود.
استفاده از تابع lambda
مهمترین کاربرد تابع «Lambda» در پایتون در نوشتن سریع محاسبات به صورت یک خطی است. این تابع، کدهای نوشته شده را به صورت مختصر و کوتاه نگه میدارد. اما باعث کاهش خوانایی برنامه نیز میشود. به خصوص زمانهایی که منطق پیچیدهای داریم.
بعد از اجرای کدهای بالا عدد 3.84 در خروجی نمایش داده میشود.
تا به این قسمت از مطلب دو پروژه ساده پایتون را بررسی کردهایم. در ادامه پروژهها جالبتر و کمی حرفهایتر میشوند. در صورت تمایل به مطالعه مطالبی مانند این مورد، پیشنهاد میکنیم که حتما اپلیکیشن مجله فرادرس را بر روی دستگاههای همراه خود نصب کنید.
برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.
۳- کشف n-امین عدد فیبوناچی
فرض کنیم عدد «n» داده شده است. باید برنامهای بنویسیم که بتوانید n-امین عنصر را در زنجیره فیبوناچی کشف کند. میدانیم در زنجیره فیبوناچی هر عددی از جمع دو عدد قبل از خودش ساخته میشود. دو عنصر اول این زنجیره هم به ترتیب ۰ و ۱ هستند. در کادر پایین، فرمول مربوط به محاسبه فیبوناچی را نوشتهایم.
برای حل این مسئله از سه روش مختلف استفاده میکنیم.
توابع بازگشتی
در این روش به طور مستقیم از فرمول محاسبه فیبوناچی استفاده میکنیم. تابع بازگشتی هر بار خودش، خودش را فراخوانی میکند. هدف این است که مقدار 9 امین عنصر در زنجیره فیبوناچی را پیدا کنیم.
بعد از اجرای کدهای بالا عدد 34 در خروجی نمایش داده میشود. در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا تابعی به نام fibonacci() تعریف میکنیم. این تابع باید عدد فیبوناچی را به روش بازگشتی محاسبه کند.
- اگر مقدار n برابر 0 یا 1 باشد، همان مقدار برگردانده میشود.
- در غیر این صورت، مجموع دو مقدار قبلی را به صورت بازگشتی (یعنی fibonacci(n-1) و fibonacci(n-2)) را محاسبه میکند.
- در پایان، تابع با مقدار 9 فراخوانی شده و نتیجه روی خروجی چاپ میشود.
اما روش بالا بهینه نیست. برای محاسبه n-امین عدد فیبوناچی روشهای بهینهتری هم وجود دارد که در ادامه دو مورد از آنها را بررسی میکنیم.
توان رسانی ماتریس بهینه
تکنیک «توانرسانی ماتریس بهینه» (Optimized Matrix Exponentiation) با استفاده از ماتریس ۲×۲ میتواند اعداد فیبوناچی را نشان بدهد.

در این تکنیک برای رساندن ماتریس به توانهای بالا باید آن را به صورت تکراری و بازگشتی به توان ۲ برسانیم. با این کار، تعداد عملیات ضرب ماتریسی کاهش پیدا میکند. زیرا مسئله به قطعات کوچکتری تقسیم شده است.
بعد از اجرای کدهای بالا عدد 34 در خروجی نمایش داده میشود. در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- تابع multiply(F, M) با استفاده از فرمول ضرب داخلی ماتریس، مقادیر ماتریس را بهروزرسانی میکند.
- تابع power(F, n) به وسیله عبارت n // 2 خودش را فراخوانی میکند. سپس با استفاده از تابع multiply(F, F) مقدار مربع ماتریس را محاسبه میکند.
- اگر عبارت n % 2 درست ارزیابی شود، یعنی n فرد است. بنابراین باید یک بار دیگر ضرب کنیم. زیرا توان فرد است.
- تابع fib(n) ماتریس را مقداردهی کرده و سپس مقدار عنصر F[0][0] را برمیگرداند.
برنامه نویسی پویا
در تکنیک «برنامه نویسی پویا» (Dynamic Programming) تمام مقادیر فیبوناچی را به صورت پیمایشی محاسبه میکنیم. اما همیشه فقط ۲ مقدار آخر ذخیره میشوند. روش کار به این صورت است که در هر مرحله، این جفت مقدار بهروزرسانی شده و از آنها برای محاسبه مقدارهای بعدی استفاده میشود. هدف از این تکنیک، بهینهسازی فضای مورد نیاز برای محاسبه نتیجه عملیات است.
بعد از اجرای کدهای بالا عدد 34 در خروجی نمایش داده میشود. در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- با کمک دستور a, b = 0, 1 دو عنصر اول فیبوناچی را ذخیره کردهایم.
- عبارت for _ in range(n) حلقه را n بار اجرا میکند.
- با کمک دستور b = b, a + b مقادیر را به مقدارهای مرحله بعد تبدیل میکنیم.
- دستور return a مقدار عدد فیبوناچی مورد نظر را برمیگرداند.
چطور در فرادرس، پایتون را یاد بگیریم؟
فرادرس برای کمک به یادگیری حرفهای پایتون، محتوای آموزشی بسیار متنوع و کاملی را تهیه و منتشر کرده است. این محتوا از دو قسمت، یعنی مطالب متنی و فیلمهای آموزشی تشکیل شده است. برای دسترسی به مطالب متنی میتوانید از مجله فرادرس کمک بگیرید. اما برای تماشای فیلمهای آموزشی باید به وبسایت فرادرس مراجعه کنید. در این وبسایت میتوانید فیلمهای آموزشی بسیار پربار و حرفهای را پیدا کنید. این فیلمها با ساختار منظم و توسط اساتید مجرب و حرفهای تهیه شدهاند. با اضافه کردن فیلمهای آموزشی فرادرس به حساب کاربری خود، برای همیشه در دسترس شما خواهند بود.

پایتون، گزینهای بسیار مناسب برای توسعه نرمافزارهای مدرن و پیچیده است. در ضمن، کاربردهای بسیار گستردهای هم دارد. برای نمونه میتوان به کاربرد پایتون در حوزه پزشکی، صنایع پیشرفته و حتی کشاورزی اشاره کرد. سینتکس آن به زبان انسان نزدیک است. بنابراین مراحل یادگیری و کار با آن ساده هستند. با یادگیری این زبان برنامه نویسی میتوانیم به موقعیتهای شغلی جذابی دست پیدا کنیم. فرادرس به شکل تخصصی مشغول تولید فیلمهای آموزشی است. به همین دلیل مهارت و تجربه بالایی در این زمینه دارد و فیلمهای بسیار خوبی برای کمک به آموزش پایتون تولید کرده است.
در پایین، چند مورد از فیلمهای آموزشی پایتون را معرفی کردهایم. این فیلمها برای آموزش سطوح مبتدی تا پیشرفته پایتون مفید هستند.
- فیلم آموزش ویژوال پایتون، برنامه نویسی پایتون بدون کدنویسی با Visual Python + گواهینامه
- فیلم آموزش تجزیه و تحلیل و آماده سازی داده ها با Python + گواهینامه
- فیلم آموزش فریم ورک کیوی در پایتون، توسعه اپلیکیشن های دسکتاپ با Kivy و Python + گواهینامه
- فیلم آموزش برنامه نویسی شی گرا در پایتون + گواهینامه
- فیلم آموزش پردازش موازی در پایتون، یادگیری کار با کتابخانه Thread و Async IO
در بخش بعد روش چاپ کد ASCII تمام نمادها و کاراکترهای قابل استفاده در متون کامپیوتری را بررسی میکنیم.
۴- چاپ مقدار کد ASCII کاراکترها
کلمه «ASCII» سرنامی از عبارت (American Standard Code for Information Interchange) به معنای «کد استاندارد آمریکایی برای تبادل اطلاعات» است. در این سیستم، عدد منحصربهفردی به تمام کاراکترهای قابل استفاده در متنها اختصاص داده میشود. بعضی از اوقات در زمان برنامه نویسی لازم است مقدار کد ASCII کاراکتر خاصی را پیدا بکنیم. برای مثال کد ASCII کاراکتر «a» برابر با ۹۷ و کد ASCII کاراکتر «D» برابر با ۶۸ است.
بهترین روش برای محاسبه مقدار کد ASCII کاراکترها استفاده از تابع ord() در زبان پایتون است.
بعد از اجرای کدهای بالا عدد 103 در خروجی نمایش داده میشود.
۵- محاسبه مجموع مربعات n عدد طبیعی اول
در این پروژه میخواهیم برنامهای برای محاسبه مجموع مربعات «n» عدد طبیعی اول بنویسیم. ابتدا باید منظور صورت سوال را متوجه شویم. فرض کنید باید مجموع مربعات ۵ عدد طبیعی اول را محاسبه کنیم. فرمول ریاضی ساده این عملیات را در پایین نوشتهایم.
فرمول این عملیات ساده است. اما اگر n عدد بزرگی باشد استفاده از این زنجیره کار سخت و طاقتفرسایی میشود. در ریاضیات از فرمول زیر برای محاسبه این مقدار استفاده میکنیم.
برنامه نویسی فرمول مجموع مربعات n عدد طبیعی اول
برای حل این پروژه هم روشهای مختلفی وجود دارد. سادهترین روش کدنویسی همین فرمول است. در کادر پایین، فرمول بالا را کدنویس کردهایم.
بعد از اجرای کدهای بالا عدد 55 در خروجی نمایش داده میشود.
استفاده از عبارتهای مولد
عبارتهای مولد برای ساخت اشیا پیمایشپذیر به کار برده میشوند. با کمک این عبارتها میتوانیم شی پیمایشپذیری از توان دوم تمام n عدد طبیعی اول بسازیم. سپس از تابع sum در پایتون استفاده کرده و حاصل جمع تمام مقادیر درون این شیء را محاسبه میکنیم.
بعد از اجرای کدهای بالا عدد 55 در خروجی نمایش داده میشود.
۶- معکوس کردن لیست در پایتون
در این پروژه، لیستی از اعداد داده شده است. وظیفه برنامه نویس آن است که ترتیب چیدن تمام عناصر لیست را معکوس بکند. در واقع یکبار دیگر لیست را از آخر به اول بچیند. فرض کنیم که لیست [10, 20, 30, 40] داده شده است. خروجی برنامه باید لیست [40, 30, 20, 10] باشد.

استفاده از تابع reverse
متد reverse تمام عناصر لیست را معکوس میکند. این متد لیست جدیدی ایجاد نمیکند، بلکه کل ساختار لیست مشخص شده را تغییر میدهد.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[5, 4, 3, 2, 1]استفاده از تکنیک تکهتکه کردن لیست
در این تکنیک از اندیسهای منفی استفاده میکنیم. با کمک اندیسهای منفی میتوانیم لیست جدیدی از روی لیست اصلی بسازیم که تمام عناصر آن برعکس لیست اول باشند.
بعد از اجرای کدهای بالا، خروجی زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[5, 4, 3, 2, 1]۷- شیفت دادن عناصر درون آرایه
در این مسئله، آرایهای از اعداد صحیح و یک عدد مشخص به برنامه نویس داده میشود. از برنامه نویس خواسته شده است که با کمک برنامههای پایتون تمام مقادیر درون آرایه را به اندازه عدد صحیح داده شده به سم چپ شیف بدهد. در این عملیات با هربار شیف دادن، عنصر انتهایی آرایه از خانه آخر حذف شده و به خانه اول اضافه میشود. برای مثال، فرض کنیم که لیست [1, 2, 3, 4, 5] به همراه عدد 3 مشخص شده است. در خروجی باید لیست [3, 4, 5, 1, 2] به بیرون برگردانده شود.
| روش | ایده اصلی | ویژگی ساده |
|---|---|---|
| Slicing | جدا کردن و چسباندن بخشها | کوتاه و ساده |
| reverse() | معکوس کردن بخشهای آرایه | مناسب تمرین الگوریتم |
استفاده از تکنیک Slicing در لیستها
تکنیک Slicing با عنوان «تکهتکه کردن» یا «قطعهقطعه کردن» نیز شناخته میشود. در این روش برای چرخاندن آرایه آن را با کمک «تکهتکه کردن» به دو بخش جدا از هم تقسیم میکنیم. سپس این دو بخش را به صورت معکوس به همدیگر میچسبانیم. در نتیجه آرایه یا لیست جدید، طوری ساخته میشود که انگار آرایه اصلی به چپ شیف داده شده است.
بعد از اجرای کدهای بالا، خروجی زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[5, 6, 1, 2, 3, 4]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- arr[-d:]: این عبارت، تمام عناصر موجود از اندیس -d تا انتهای لیست را پوشش میدهد.
- arr[:-d]: این عبارت، تمام عناصر را از خانه اول تا اندیس -d پوشش میدهد.
- arr[:] = arr[-d:] + arr[:-d]: آرایه جدید را با جایگاه جدید برای مقادیر خواسته شده میسازد.

استفاده از متد reverse
در این روش از متد reverse() برای معکوس کردن کل آرایه استفاده میکنیم. سپس هر کدام از بخشهای آن را به صورت مجزا دوباره معکوس میکنیم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[7, 8, 1, 2, 3, 4, 5, 6]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- arr.reverse(): این عبارت تمام آرایه را به شکل کامل معکوس میکند.
- arr[:d][::-1]: این دستور بخش اول آرایه را معکوس میکند.
- arr[d:][::-1]: از این دستور هم برای معکوس کردن بخش انتهایی آرایه استفاده میکنیم.
۸- حذف چند عنصر مختلف از درون لیست
در این پروژه ساده پایتون، لیستی از اعداد داده میشود. سپس از برنامه نویس خواسته شده که اعداد خاصی را از درون آن حذف کند. حذف چند عنصر از لیست به این معنا است که ابتدا تمام این مقادیر و اعداد تکراری شبیه به آنها را در لیست پیدا کرده و حذف بکنیم. سپس لیست جدید را با مقادیر باقیمانده در خروجی برنامه برگردانیم.
برای مثال فرض کنیم که لیست a = [10, 20, 30, 40, 50, 60, 70] داده شده است. از برنامه نویس خواسته شده که اعداد درون لیست [20, 40, 60] را از لیست اصلی حذف بکند. خروجی برنامه باید لیستی شبیه به لیست [10, 30, 50, 70] باشد.

این مسئله را میتوانیم از چند روش مختلف حل کنیم. در این مطلب، ۲ تکنیک مجزا را بررسی کردهایم.
استفاده از تکنیک List Comprehension
در این تکنیک از مفهوم List Comprehension برای ساخت لیست جدید استفاده میکنیم. List Comprehension در ساخت لیست جدید، عناصر موجود در لیست remove را نادیده میگیرد.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[10, 30, 50, 70]استفاده از تابع filter
از تابع filter() هم میتوان برای حذف عناصر درون لیستها کمک گرفت. فقط کافی است که شرط مناسبی را برای فیلتر کردن این عناصر تعریف بکنیم. به طور کل یکی از کاربردیترین روشها برای تعریف عبارتهای شرطی مناسب در تابع filter() استفاده از توابع بینام lambda است.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[10, 30, 50, 70]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- filter(): با کمک این تابع بر روی لیست مشخص شده پیمایش کرده و تابع lambda را بر روی تمام عناصر این لیست اعمال میکنیم.
- lambda x: x not in remove, a: اگر عنصری در لیست remove وجود نداشت آن را به لیست فیلتر شده نهایی اضافه میکنیم.
۹- جمع و تفریق ماتریسها در پایتون
در این پروژه ساده پایتون، روش جمع و تفریق ماتریسهای پایتون را میآموزیم. دو روش پرکابرد برای پیادهسازی این عملیات وجود دارد.
- کتابخانه NumPy: استفاده از کتابخانه NumPy ساده و سریع است.
- حلقههای تو در تو: کار با حلقههای تو در تو نیاز به هیچ کتابخانه و ابزار اضافی ندارد و به صورت دستی برنامه نویسی میشود.
در ادامه هر دو روش بالا را همراه با مثال بررسی میکنیم.
جمع ماتریس با کمک NumPy
برای جمع کردن دو ماتریس با کمک NumPy باید از تابع np.add() استفاده کنیم. این تابع دو ماتریس را به صورت عنصر به عنصر با همدیگر جمع میکند.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
Matrix A:
[[1 2]
[3 4]]
Matrix B:
[[4 5]
[6 7]]
Result:
[[ 5 7]
[ 9 11]]تفریق ماتریسها با کمک NumPy
تابع np.subtract() در کتابخانه NumPy با هدف تفریق ماتریسها از همدیگر تعریف شده است. این تابع هم ماتریسها را به صورت عنصر به عنصر یا درایهای از همدیگر منها میکند.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
Matrix A:
[[1 2]
[3 4]]
Matrix B:
[[4 5]
[6 7]]
Result:
[[-3 -3]
[-3 -3]]جمع و تفریق ماتریسها با کمک حلقه های تو در تو
در این رویکرد به صورت دستی از حلقههای تو در تو برای پیادهسازی هر دو عملیات جمع و تفریق استفاده کردهایم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
Matrix 1:
[1, 2]
[3, 4]
Matrix 2:
[4, 5]
[6, 7]
Addition Result:
[5, 7]
[9, 11]
Subtraction Result:
[-3, -3]
[-3, -3]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا دو ماتریس matrix1 و matrix2 را تعریف میکنیم.
- سپس با حلقه for ، ردیفهای هر ماتریس روی خروجی چاپ میشوند.
- در ادامه، دو ماتریس خالی add_result و sub_result برای نگهداری نتیجه جمع و تفریق ساخته میشوند.
- با دو حلقه تو در تو، روی سطرها و ستونهای هر دو ماتریس پیمایش میکنیم.
- در هر تکرار، عناصر متناظر دو ماتریس با هم جمع و تفریق میشوند و نتیجه در ماتریسهای مربوطه قرار میگیرد.
- در پایان، ماتریس حاصل جمع و ماتریس حاصل تفریق را در خروجی چاپ میکنیم.

۱۰- ضرب ماتریسی در پایتون
پروژه ضرب ماتریس در پایتون به این صورت است که ابتدا دو ماتریس مختلف داده میشوند. سپس برنامه نویس باید با کمک کدهای پایتون حاصل ضرب آنها را محاسبه کرده و در خروجی برگرداند. برای اجرای این پروژه هم روشهای مختلفی وجود دارد که رایجترین آنها استفاده از کتابخانه NumPy است.
| روش | ایده اصلی | مزیت |
|---|---|---|
| NumPy | np.dot() برای ضرب مستقیم ماتریسها | سریع و مناسب پروژههای علمی |
| ماتریس ترانهاده + List Comprehension | تبدیل ستونهای ماتریس B به ردیف و ضرب داخلی | کدنویسی شفاف و آموزشی |
بعضی از اوقات، استفاده از ماتریسها در انجام محاسبات ریاضی، سرعت اجرای برنامهها را به مقدار زیادی افزایش میدهد. برنامه نویسان پایتون (به خصوص افراد فعال در حوزه پردازش دادهها و علم داده) باید روش اجرای این نوع محاسبات را بلد باشند. در صورت نیاز به یادگیری این مهارت پیشنهاد میکنیم که فیلم آموزش رایگان محاسبات ماتریسی و برداری در پایتون را در فرادرس مشاهده کنید. لینک دسترسی مستقیم به این فیلم را در پایین نیز قرار دادهایم.
اجرای ضرب ماتریسی با کمک NumPy
کتابخانه NumPy با کمک کدهای نوشته شده به زبان C میتواند محاسبات ریاضی را با سرعت خیلی بیشتری انجام بدهد. ضرب داخلی ماتریسها هم یکی از ویژگیهای NumPy است. در این تکنیک از ردیفهای ماتریس A و ستونهای ماتریس B برای محاسبه ضرب داخلی استفاده میکنیم. بنابراین دیگر نیازی به کدنویسی پایتونی و کار با حلقهها نداریم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[114 160 60 27]
[74 97 73 14]
[119 157 112 23]استفاده از ماتریس ترانهاده B و تکنیک List Comprehension
در این تکنیک اول از همه مقدار ماتریس ترانهاده B را محاسبه میکنیم. با این کار پیمایش بر روی ستونهای ماتریس B سادهتر میشود. سپس به راحتی میتوانیم تمام ردیفهای ماتریس A را بر روی تمام ستونهای ماتریس B ضرب کنیم. در نتیجه مقدار تمام سلولهای ماتریس نتیجه به صورت تمیز و شفاف و با تکنیک ضرب داخلی محاسبه میشوند.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[114 160 60 27]
[74 97 73 14]
[119 157 112 23]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- در خطوط اول برنامه، ابتدا دو ماتریس A و B تعریف میکنیم.
- سپس با استفاده از دستور zip(*B) ستونهای ماتریس B جدا شده و در متغیر Bt قرار میگیرند.
- در ادامه، به کمک List Comprehension حاصل ضرب دو ماتریس را محاسبه میکنیم. برای هر سطر از A و هر ستون از B ، عناصر متناظر در هم ضرب میشوند و مجموع آنها بهدست میآید.
- نتیجه نهایی در ماتریس r ذخیره میشود.
- در پایان، تمام ردیفهای ماتریس نتیجه r روی خروجی چاپ میشوند.

۱۱- مرتبسازی دیکشنری های پایتون بر اساس کلید یا مقدار
در این مثال، فرض میکنیم که دیکشنری داده شده است. صورت سوال از کابران میخواهد که مقادیر این دیکشنری را بر اساس کلید یا مقدار به صورت صعودی و نزولی مرتب بکنند. برای حل این پروژه ساده پایتون چند روش مختلف وجود دارد.
| نوع مرتبسازی | روش | ایده اصلی |
|---|---|---|
| بر اساس مقدار | sorted() و lambda | مرتبسازی با مقدار هر آیتم |
| بر اساس مقدار | OrderedDict | مرتبسازی و حفظ ترتیب |
| بر اساس کلید | sorted() و for | مرتبسازی با کلید دیکشنری |
| بر اساس کلید | argsort() | مرتبسازی کلیدها با NumPy |
در ادامه تمام تکنیکهای معرفی شده در جدول بالا را برای مرتبسازی دیکشنریها بررسی میکنیم.
مرتبسازی بر اساس مقدار
به منظور مرتبسازی دیکشنریها بر اساس مقدار دو روش متفاوت را بررسی میکنیم.
مرتبسازی با کمک توابع sorted و lambda
در این تکنیک میخواهیم از توابع sorted() و lambda برای مرتبسازی دیکشنری بر اساس مقدار کمک بگیریم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'watermelon': 1, 'apple': 2, 'banana': 3}تکنیک «Dictionary Comprehension» مانند List Comprehension بوده و برای ساخت دیکشنریها به کار برده میشود. در کدهای بالا از این تکنیک برای تعریف دیکشنری جدید استفاده کردهایم. دستور sorted(d.items(), key=lambda item: item[1]) هم وظیفه اصلی مرتبسازی دادهها را برعهده دارد.
دیکشنری یکی از ساختارهای پرکاربرد و مفید در برنامه نویسی با زبان پایتون است. برای حرفهای شدن در کار با این ساختار باید با انواع متدهای دیکشنری در پایتون آشنا باشید. در صورت نیاز به کسب اطلاعات بیشتر در این زمینه، پیشنهاد میکنیم که مطلب مربوط به آن را در مجله فرادرس، مطالعه کنید.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا دیکشنری d با چند کلید (میوه) و مقدار عددی مربوط به آنها تعریف میشود.
- سپس با کمک تابع sorted()، تمام آیتمهای دیکشنری را بر اساس مقدار مرتب میکنیم.
- دستور lambda item: item[1]، مقدار هر آیتم را برای مرتبسازی انتخاب میکند.
- بعد از آن، با کمک Dictionary Comprehension دیکشنری مرتب شده را در متغیر asc میسازیم.
- در پایان، دیکشنری مرتب شده در خروجی چاپ میشود.
استفاده از OrderedDict
متد OrderedDict برای مرتبسازی دیکشنریها بر اساس مقادیر مربوط به هر کلید به کار برده میشود. سپس دیکشنری ساخته شده را در ساختاری از نوع OrderedDict ذخیره میکند. این ساختار، نوعی دیکشنری است که ترتیب درج عناصر را حفظ میکند.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
OrderedDict({'tuesday': 9, 'monday': 10, 'wednesday': 15})در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا کلاس «OrderedDict» را از کتابخانه collections به محیط کدنویسی وارد میکنیم. با کمک این کلاس میتوانیم ترتیب آیتمها را حفظ بکنیم.
- در خط بعد، دیکشنری d (شامل نام روزها و مقادیر عددی) را تعریف میکنیم.
- بعد از آن، با کمک دستور sorted() آیتمهای دیکشنری را بر اساس مقدار مرتب میکنیم.
- در عبارت lambda item: item[1] مقدار هر آیتم برای مرتبسازی انتخاب میشود.
- سپس نتیجه مرتب شده در OrderedDict قرار میگیرد و در متغیر res ذخیره میشود.
- در پایان، دیکشنری مرتب شده روی خروجی چاپ میشود.
مرتبسازی بر اساس کلید
برای اجرای این عملیات هم چند روش مختلف وجود دارد. در این بخش ۲ تکنیک از آنها را بررسی میکنیم.

استفاده از حلقه loop و تابع sorted
در این روش با استفاده از تکنیک مرتبسازی بر اساس کلید، چیدمان تمام عناصر درون دیکشنری را مرتب میکنیم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
(1, 2) (2, 56) (3, 323) در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا دیکشنری d را با چند کلید و مقدار عددی تعریف میکنیم.
- سپس با تابع sorted()، آیتمهای دیکشنری بر اساس کلید مرتب میکنیم.
- در lambda item: item[0]، کلید هر آیتم برای مرتبسازی انتخاب میشود.
- بعد از آن، با کمک حلقه for روی آیتمهای مرتب شده پیمایش میکنیم.
- در پایان، هر جفت کلید و مقدار به صورت (k, v) روی خروجی چاپ میشوند.
استفاده از NumPy
در این روش برای مرتبسازی دیکشنری تمام کلیدهای آن را به آرایه NumPy تبدیل میکنیم. سپس از تابع argsort() استفاده کرده و ساختار مرتب شده را به دست میآوریم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'alex': 10, 'clara': 15, 'diana': 2, 'eva': 32, 'mostafa': 9}۱۲- مدیریت کلیدهای گمشده در دیکشنری
در این پروژه ساده پایتون میخواهیم کلیدهای گمشده را بررسی کنیم. دیکشنریهای پایتون از ساختار کلید-مقدار پیروی میکنند. این ساختار، دسترسی بسیار سریعی به دادهها (با پیچیدگی زمانی ) ایجاد میکند. هر چند در بسیاری از برنامهها کاربر تمام کلیدهای موجود در دیکشنری را نمیشناسد. تلاش برای دسترسی مستقیم به کلیدهای گمشده در پایتون باعث بروز خطای KeyError میشود.
برای شناسایی کلیدهای گمشده و مدیریت این شرایط در پایتون چند روش مختلف وجود دارد.
- استفاده از defaultdict
- استفاده از متد get
استفاده از defaultdict
تابع کاربردی و مفید defaultdict در داخل ماژول collections تعبیه شده است. با کمک این تابع، مقدار زیادی از بررسیهای تکراری را کاهش میدهیم. در ضمن با استفاده از defaultdict میتوانیم مقداری را نیز به عنوان پیشفرض به تمام کلیدهای گمشده در زمان ساخت دیکشنری اختصاص بدهیم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
1
Key Not foundدر فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- defaultdict(lambda: 'Key Not found'): این دستور دیکشنری میسازد که به جای اعلام خطای «KeyError»، در زمان فراخوانی کلیدهای ناموجود در دیکشنری، پیغام از پیشتعریف شده Key Not found را نشان میدهد.
- dic['a'] = 1 و dic['b'] = 2: این دو دستور دو کلید مختلف ساخته و به هر کدام مقداری را اختصاص میدهند.

استفاده از متد get
متد get() به برنامه نویسان کمک میکند که اگر کلید وجود داشت، مقدار متناظر با آن را برگردانند. اما اگر کلید وجود نداشت، مقدار پیشفرضی را به خروجی ارسال کنند.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
0091
Not Foundدر فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است..
- تابع get() مقدار اختصاص داده شده به کلید مورد نظر را برمیگرداند.
- این تابع ۲ پارامتر دریافت میکند. پارامتر اول همان کلیدی است که باید مقدار مربوط به آن را برگرداند. پارامتر دوم هم مقداری است که در صورت وجود نداشتن کلید در دیکشنری به صورت پیشفرض، برگشت داده میشود.
۱۳- تبدیل لیستی از تاپلها به دیکشنری در پایتون
در این پروژه ساده پایتون، لیستی از تاپلها داده شده است. باید این لیست را به دیکشنری تبدیل کنیم. هر تاپل شامل دو مقدار مجزا است که به صورت جفت کلید و مقدار نوشته شدهاند. عنصر اول به عنوان کلید و عنصر دوم به عنوان مقدار این کلید در نظر گرفته میشود. برای مثال، فرض کنیم اگر لیست [("a", 1), ("b", 2), ("c", 3)] داده شده باشد. خروجی باید به شکل دیکشنری {'a': 1, 'b': 2, 'c': 3} ساخته شود.
سه روش مختلف را برای حل این مسئله بررسی میکنیم.
| روش | ایده اصلی |
|---|---|
| تابع dict() | تبدیل مستقیم لیست تاپلها |
| Dictionary Comprehension | ساخت دیکشنری با یک خط کد |
| حلقه for | اضافه کردن دستی کلید و مقدار |
کار با تابع dict
تابع dict() میتواند اشیا پیمایشپذیری را که عناصر آنها به شکل جفت کلید-مقدار هستند (مانند لیستی از تاپلها) به دیکشنری تبدیل کند. این تابع، اولین عنصر را به عنوان کلید و عنصر دوم را به عنوان مقدار مختص به آن کلید در نظر میگیرد.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'a': 1, 'b': 2, 'c': 3}استفاده از تکنیک Dictionary Comprehension
تکنیک Dictionary Comprehension برای تولید دیکشنری با یک خط کد به کار برده میشود. با این روش، بر روی شی پیمایشپذیری پیماش کرده و جفتهای کلید-مقدار را مشخص میکنیم. در این تکنیک از سینتکس {key: value for item in iterable} برای ساخت حرفهای دیکشنری استفاده میکنیم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'a': 1, 'b': 2, 'c': 3}استفاده از حلقه for
استفاده از حلقه for برای ساخت دیکشنری شامل پیمایش بر روی شی پیمایشپذیر و اضافه کردن هر عنصر به شکل جفت کلید-مقدار به دیکشنری است. در این روش با کمک حلقه for مقادیر مشخص شده را به صورت دستی به دیکشنری تخصیص میدهیم.
بعد از اجرای کدهای بالا، خروجی زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'a': 1, 'b': 2, 'c': 3}۱۴- مرتبسازی تاپل ها بر اساس لیست
در این پروژه ساده پایتون، لیستی از تاپلها داده شده است. وظیفه برنامه نویس این است که نظم این تاپلها را بر اساس ترتیب مشخص شده در لیست دیگری اصلاح بکند. این عملیات بیشتر در حوزههایی مانند پردازش داده، مرتبسازی و نگاشت وظایف کاربرد دارد.
فرض کنیم که لیستهای زیر داده شدهاند.
Input = [('Faradars', 10), ('best', 3), ('CS', 8), ('Python', 7)], ord_list = ['Python', 'best', 'CS', 'Faradars'] اکنون میخواهیم تاپلهای درون لیست Input را با نظم عناصر لیست ord_list مرتب بکنیم. یعنی خروجی باید به شکل زیر باشد.
[('Python', 7), ('best', 3), ('CS', 8), ('Faradars', 10)] استفاده از تابع dict و List Comprehension
ابتدا لیست، شامل تاپلها را با کمک تابع dict() به دیکشنری تبدیل میکنیم. با این روش، دسترسی سریعتری به تمام عناصر موجود در لیست پیدا میکنیم. سپس از تکنیک List Comprehension استفاده کرده و تمام تاپلها را با توجه به نحوه قرارگیری آنها در لیست مرجع، مرتب میکنیم.

در کادر پایین، کدهای مربوط به پروژه ساده پایتون درباره مرتبسازی تاپلها بر اساس لیست را با کمک تابع dict() و List Comprehension پیادهسازی کردهایم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[('A', 2), ('B', 10), ('C', 9), ('D', 3)]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- تابع dict(t): این تابع، لیست شامل تاپلها را به دیکشنری تبدیل میکند. بنابراین دسترسی سریعتر و مستقیمتری به تمام اعضای دیکشنری خواهیم داشت.
- [(key, temp[key]) for key in l]: این دستور، لیست جدیدی از تاپلها میسازد. عملیات ساخت با توجه به ترتیب قرارگیری عناصر درون لیست l انجام میشود.
استفاده از توابع setdefault و sorted و lambda
در این روش، نقشهای از موقعیتهای عناصر را با کمک تابع setdefault() میسازیم. سپس تمام تاپلهای موجود را با کمک تابع sorted() مرتب میکنیم. در پایان هم با کمک تابع lambda تمام عناصر را با توجه به چیدمان از پیش مشخص شده مرتب میکنیم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
[('author', 2), ('faradars', 10), ('Mostafa', 3), ('computer', 9)]در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا لیستی از تاپلها را در متغیر t و لیستی از رشتهها را در متغیر l تعریف میکنیم.
- سپس دیکشنری خالی temp ساخته میشود. از این دیکشنری برای ذخیره موقعیت عناصر لیست l استفاده خواهیم کرد.
- با حلقه for و تابع enumerate، روی عناصر l پیمایش میکنیم.
- در هر تکرار، نام عنصر بهعنوان کلید و شماره موقعیت آن بهعنوان مقدار در دیکشنری temp قرار میگیرد.
- در ادامه، با کمک sorted() لیست t مرتب میشود.
- در lambda ele: temp[ele[0]].pop()، عنصر اول هر تاپل بررسی شده و موقعیت متناظر آن از دیکشنری temp گرفته میشود. با این کار، ترتیب مرتبسازی مشخص شود.
- در پایان، لیست مرتب شده در متغیر res ذخیره شده و در خروجی چاپ میشود.
استفاده از پروژههای واقعی برای یادگیری پایتون
به دلیل نزدیکی سینتکس پایتون به زبان انسان، یادگیری آن نسبت به دیگر زبانها سادهتر است. بهترین روش برای نهادینه شدن مفاهیم پایتون، استفاده از آنها در زمان اجرای پروژههای واقعی است. این کار، فایدههای زیادی دارد. زیرا در پروژههای واقعی مفاهیم مختلف را به صورت ترکیبی و در کنار هم به کار میبریم. اجرای پروژههای ساده با کمک حلقه for میتواند مانند بررسی چند نمونه سوال حلقه for در پایتون به یادگیری این مفهوم کمک بکند. فرادرس، مجموعهای از فیلمها را با عنوان «مجموعه آموزش پروژه محور برنامه نویسی پایتون» تولید و منتشر کرده است. در این مجموعه، روش پیادهسازی پروژههای واقعی و گوناگون آموزش داده میشود.
در پایین، چند فیلم آموزشی پروژه محور برای زبان پایتون را معرفی کردهایم.
- فیلم آموزش مقدماتی ساخت ربات تلگرام با «پایتون» (Python) + گواهینامه
- فیلم آموزش پروژه محور پایتون درباره کار با Tkinter و SQLite3 در Python + گواهینامه
- فیلم آموزش ساخت دستیار هوشمند با Ollama و پروتکل MCP، پیادهسازی پروژه عملی LLM + گواهینامه
- فیلم آموزش پروژه محور پایتون، درباره طراحی ماشین حساب با Python + گواهینامه
- فیلم آموزش پروژه محور پایتون، ساخت بازی با کتابخانه Turtle + گواهینامه
برای مشاهده فیلمهای بیشتر بر روی تصویر زیر، کلیک کرده و به صفحه اصلی این مجموعه آموزش هدایت شوید.

در ادامه مطلب، پروژههایی را پیادهسازی کردهایم که کاربرد عملی بیشتری دارند.
۱۵- بازی حدس اعداد
در این پروژه میخواهیم برنامهای بسازیم که به صورت تصادفی عددی را از درون محدوده مشخص شده انتخاب میکند. کاربر باید با کمک حدسهای مختلف این عدد را پیدا کند. برای درک بهتر بازی، فکر کنید که کامپیوتر عددی را از بین ۰ تا ۱۰۰ انتخاب کرده است. کاربر میتواند هر رقمی را حدس بزند. کامپیوتر فقط سه پاسخ میدهد.
- «خیلی بالا» (Too high)
- «خلیل پایین» (Too low)
- «انتخاب درست» (Correct)
الگوریتم بازی حدس اعداد
با توجه به پاسخهای برنامه کاربر باید عدد بعدی را حدس بزند. قبل از هر کاری باید الگوریتم مناسب این بازی را بسازیم. نمونهای از آن در پایین نوشته شده است.
- ابتدا محدوده بالا و پایین را از کاربر دریافت میکنیم.
- سپس باید عدد تصادفی از محدوده مشخص شده انتخاب بکنیم.
- بعد از آن بیشترین تعداد حدس را با کمک الگوریتم جستوجوی باینری محاسبه کرده و به عنوان تعداد حدس مجاز به کاربر اعلام میکنیم.
- در هر مرحله با کمک حلقههای پایتون نظر کاربر را دریافت میکنیم.
- اگر حدس کاربر از عدد واقعی بزرگتر بود، پیغام مناسبی را برای او نشان میدهیم «Try Again! You guessed too high.».
- اگر حدس کاربر از عدد واقعی کوچکتر بود، پیغام مناسب دیگری را برای او نشان میدهیم «Try Again! You guessed too small.».
- اگر حدس کاربر برابر با عدد واقعی بود، باز هم باید پیغام مناسبی را نشان بدهیم «Congratulations!».
- اگر تعداد حدسهای کاربر تمام شد ولی موفق به حدس عدد نشد، عدد مورد نظر را در کنسول نشان داده و پیغام مناسبی مینویسیم «Better Luck Next Time!».
پیاده سازی بازی حدس اعداد
در کادر پایین، کدهای مربوط به این بازی را پیادهسازی کردهایم.
نکات مهم کد بالا را در فهرست پایین نوشتهایم.
- ابتدا کتابخانه random را وارد میکنیم. با کمک این کتابخانه میتوانیم عدد تصادفی تولید کنیم.
- سپس پیام خوشآمدگویی و تعداد شانسهای بازی روی خروجی نمایش داده میشود.
- در ادامه، محدودههای پایین و بالای بازه از کاربر دریافت میشوند.
- بعد از آن، با تابع random.randint عددی تصادفی بین این دو مقدار ساخته میشود. این عدد را در متغیر num ذخیره میکنیم.
- متغیر ch تعداد شانسهای مجاز و متغیر gc تعداد حدسهای انجامشده را نگه میدارند.
- با حلقه while بازی را ادامه میدهیم. این کار تا زمانی انجام میشود که تعداد حدسها کمتر از 7 باشد.
- در هر تکرار، عدد حدسزده شده از کاربر گرفته میشود.
- اگر حدس کاربر درست باشد، پیام موفقیت و تعداد تلاشها نمایش داده میشود. سپس حلقه پایان مییابد.
- اگر قبل از پیدا کردن پاسخ درست شانسها تمام شوند، عدد صحیح نمایش داده میشود.
- اگر حدس بزرگتر از عدد اصلی باشد، پیام Too high چاپ میشود.
- اگر حدس کوچکتر باشد، پیام Too low نمایش داده میشود.

۱۶- بازی حدس کلمه یا مرد دارزده شده
در این بازی، کامپیوتر چند کلمه مختلف را از قبل در حافظهاش ذخیره کرده است. از کاربر میخواهد که با حدس زدن حروف البفا این کلمهها را پیدا بکند. تعداد حدسهای کاربر بر روی عدد خاصی محدود میشود. کامپیوتر از بالا به پایین به اندازه حروف الفبای کلمه خط تیره قرار میدهد. اگر کاربر کاراکتر صحیحی را حدس زد، کامپیوتر آن کاراکتر را در جایگاه مناسب آن در کلمه قرار میدهد. در غیر این صورت پیغام انتخاب اشتباه به کاربر نشان داده میشود.
در ابتدا میخواهیم نام کاربر را پرسیده با نام خودش برای او آرزوی موفقیت بکنیم. در کادر پایین کدهای مربوط به این بازی نوشته شده است.
بعد از اجرای بازی ابتدا برنامه نام کاربر را میپرسد. سپس بازی شروع میشود. با فرض اینکه نام کاربر شهریار است، مرحله اول بازی به شکل زیر در خروجی نشان داده خواهد شد.
What is your name? Shahriyar
Good Luck! Shahriyar
Guess the characters
_
_
_
_
_در فهرست زیر، مهمترین نکات کد بالا را به صورت مرتبط و منظم نوشتهایم.
- ابتدا کتابخانه random را به محیط کدنویسی خود وارد میکنیم. با استفاده از این ماژول میتوانیم کلمه تصادفی انتخاب کنیم.
- سپس نام کاربر گرفته شده و پیام خوشآمدگویی نمایش داده میشود.
- از خط ۷ تا خط ۹، لیستی از کلمات مختلف تعریف میشود.
- در خط ۱۱ با استفاده از تابع random.choice یکی از آن کلمات را به صورت تصادفی انتخاب میکنیم.
- بعد از آن، پیام شروع بازی چاپ میشود.
- از متغیر guesses برای نگهداری حروف حدسزده شده و از متغیر turns برای تعداد شانسها استفاده میکنیم.
- با حلقه while (تا زمانی که شانسها بیشتر از صفر باشند) بازی ادامه پیدا میکند.
- در هر تکرار، روی تمام حروف کلمه پیمایش میکنیم.
- اگر حرف در guesses وجود داشته باشد، همان حرف چاپ میشود. در غیر این صورت _ نمایش داده میشود.
- اگر تمام حروف پیدا شوند، پیام برد به همراه کلمه اصلی نمایش داده میشوند. در این لحظه بازی پایان مییابد.
- سپس کاربر حرفی را مینویسد. این حرف به متغیر guesses اضافه میشود.
- اگر حرف وارد شده داخل کلمه نباشد، تعداد شانسها کم شده و پیام خطا نمایش داده میشود.
- اگر تعداد شانسها به صفر برسد، پیام باخت چاپ میشود.

۱۷- پیادهسازی بازی سنگ کاغذ قیچی
در این مطلب میخواهیم بدون کمک گرفتن از کتابخانههای تخصصی بازیسازی در پایتون مانند «PyGame»، بازی سنگ کاغذ قیچی را در محیط کامندلاین اجرا بکنیم. در این بازی، ابتدا کاربر یکی از سه مورد سنگ، کاغذ و قیچی را انتخاب میکند. بعد از آن کامپیوتر یکی از گزینههای دیگر را به صورت تصادفی اعلام میکند. در هر دور بازنده و برنده مشخص میشوند. در پایان، کامپیوتر از بازیکن میپرسد که آیا مایل به بازی دوباره هست یا نه. در قسمت اول بازی هم قوانین مربوط به پیروزی و شکست نوشته شدهاند.
در کادر زیر، کدهای مربوط به بازی سنگ، کاغذ، قیچی پیادهسازی شدهاند.
بعد از اجرای کدهای بالا با فرض انتخاب سنگ توسط کاربر و قیچی توسط کامپیوتر خروجی به شکل زیر میشود.
Winning rules of the game ROCK PAPER SCISSORS are:
Rock vs Paper -> Paper wins
Rock vs Scissors -> Rock wins
Paper vs Scissors -> Scissors wins
Enter your choice
1 - Rock
2 - Paper
3 - Scissors
Enter your choice: 1
User choice is: Rock
Now it's Computer's Turn...
Computer choice is: Scissors
Rock vs Scissors
<== User wins! ==>
Do you want to play again? (Y/N)در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا کتابخانه random را به محیط کدنویسی وارد میکنیم.
- سپس قوانین بازی سنگ، کاغذ و قیچی روی خروجی چاپ میشوند.
- با حلقه while True بازی به صورت مداوم اجرا میشود. با توجه به سوال نوشته شده در بخش انتهایی خروجی بالا، این بازی زمانی تمام میشود که کاربر تصمیم به خروج بگیرد.
- در ادامه، گزینههای بازی نمایش داده میشوند. سپس انتخاب کاربر دریافت میشود.
- اگر عدد وارد شده معتبر نباشد، با کمک حلقه while دوباره از کاربر ورودی گرفته میشود.
- سپس بر اساس عدد وارد شده، مقدار متنی Rock یا Paper یا Scissors در متغیر choice_name قرار میگیرد.
- در خط ۳۳، کامپیوتر با random.randint عددی تصادفی را بین 1 تا 3 انتخاب میکند.
- از خطوط ۳۶ تا ۴۱، نام انتخاب کامپیوتر در متغیر comp_choice_name ذخیره و چاپ میشود.
- در ادامه، یعنی خطوط ۴۷ تا ۵۴، انتخاب کاربر و کامپیوتر با هم مقایسه میشوند تا برنده مشخص شود.
- خطهای ۵۷ و ۵۸ اگر هر دو انتخاب برابر باشند، نتیجه مساوی خواهد بود.
- در غیر این صورت، برنده بر اساس قوانین بازی تعیین میشود.
- سپس نتیجه بازی روی خروجی نمایش داده میشود.
- بعد از پایان هر دور، از کاربر پرسیده میشود که آیا میخواهد دوباره بازی کند یا نه.
- اگر کاربر n وارد کند، حلقه متوقف میشود.
- در پایان، پیام تشکر برای بازی کردن چاپ میشود.
۱۸- ماشین حساب ساده
در این پروژه ساده پایتون، هدف نوشتن ماشین حسابی ساده است. ماشین حساب، پروژهای اساسی و مهم است. زیرا تکنیکهای مختلفی مانند دریافت داده از کاربر، تعریف تابع و اجرای محاسبات ریاضی در آن استفاده میشوند. در ضمن مفاهیمی مانند مدیریت خطا برای پیشگیری تقسیم بر صفر هم در آن به کار برده شدهاند.

در نسخه پیشرفتهتر و کاربردیتر این پروژه باید ماشین حساب را با رابط کاربری گرافیکی بسازیم. البته اجرای این پروژه نیاز به توضیحات خیلی بیشتری دارد که برای این مطلب مناسب نیست. اما در صورت تمایل به یادگیری ساخت ماشین حساب گرافیکی پیشنهاد میکنیم که فیلم آموزش پروژه محور پایتون درباره طراحی ماشین حساب با Python + گواهینامه را در فرادرس مشاهده بکنید. به منظور کمک به مخاطبان مجله، لینک دسترسی به این فیلم در پایین نیز قرار داده شده است.
در این پروژه ماشین حساب، عملیات پایه ریاضی مانند جمع، تفریق، ضرب و تقسیم بر اساس اعداد وارد شده توسط کاربر انجام میشوند.
مراحل انجام کار
ساختار اصلی اجرای این پروژه را به ۴ بخش زیر تقسیم کردهایم.
- تعریف تابع برای هر عملیات
- تعریف تابع اصلی برای دریافت عدد از کاربر و نوع عملیات
- مدیریت تقسیم بر صفر با استفاده از عبارت شرطی
- فراخوانی تابع مناسب با عملیات درخواستی کاربر
در کادر پایین، کدهای مربوط به این عملیات پیادهسازی شدهاند.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا چهار تابع add و subtract و multiply و divide تعریف میکنیم تا عملیات ریاضی را انجام دهند.
- تابع divide قبل از تقسیم بررسی میکند که مقدار y صفر نباشد. زیرا در این صورت خطای تقسیم بر صفر رخ میدهد.
- سپس تابعی به نام calculator تعریف میکنیم تا بخش اصلی برنامه را اجرا کند.
- داخل این تابع، منوی عملیات ریاضی روی خروجی نمایش داده شده و انتخاب کاربر دریافت میشود.
- اگر انتخاب کاربر معتبر باشد، دو عدد از کاربر گرفته میشود.
- سپس بر اساس انتخاب کاربر، تابع مناسب اجرا شده و نتیجه چاپ میشود.
- اگر ورودی نامعتبر باشد، پیام خطا نمایش داده میشود.
- در پایان، تابع calculator صدا زده شده و برنامه اجرا میشود.
۱۹- اپلیکیشن To-Do
اجرای پروژه اپلیکیشن «To-Do» به کاربران کمک میکند که کارهایی مانند ذخیرهسازی داده، استفاده از حلقهها و عبارتهای شرطی را تمرین بکنند. در ضمن کاربر میتواند با سلیقه خود، روش ساخت رابط کاربری مناسبی را در فضای کنسول پیادهسازی بکند. پیادهسازی این پروژه، موارد زیر را به برنامه نویسان میآموزد.
- کار کردن با لیستها
- روش مدیریت چند عنصر مختلف
- و استفاده از حلقه برای نمایش و کار بر روی دادهها
در این پروژه، کاربر باید بتواند وظایف مختلفی را برای خود تعریف کند. وظایف تعریف شده را مشاهده کرده و در صورت نیاز آنها را حذف بکند.

مراحل انجام کار
برای پیادهسازی این پروژه بهتر است که طبق دستورالعمل زیر به پیش بروید.
- لیستی را برای ذخیرهسازی وظایف مورد نظر کاربر تعریف بکنید.
- توابعی را برای اضافه کردن وظیفه، نمایش وظیفه و حذف آن تعریف کنید.
- از حلقهای برای جابهجا شدن بر روی گزینههای منو و دریافت دادههای ورودی کاربر برای هر بخش استفاده کنید.
- برای دسترسی بهتر، وظایف را به صورت لیست شماره دار در خروجی چاپ بکنید.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا لیستی خالی به نام tasks تعریف میکنیم تا وظیفهها در آن ذخیره شوند.
- سپس تابع add_task تعریف میشود. این تابع، وظیفه جدید را از کاربر گرفته و به لیست tasks اضافه میکند.
- تابع view_tasks برای نمایش وظیفهها استفاده میشود.
- اگر لیست خالی باشد، پیام مناسب نمایش داده میشود.
- در غیر این صورت، با enumerate() تمام وظیفهها همراه با شماره آنها چاپ میشوند.
- تابع delete_task() ابتدا لیست وظیفهها را نمایش میدهد.
- سپس شماره وظیفه مورد نظر از کاربر گرفته شده و همان وظیفه از لیست حذف میشود.
- اگر شماره وارد شده نامعتبر باشد، پیام خطا نمایش داده میشود.
- در ادامه تابع menu() تعریف میشود. این تابعا منوی اصلی برنامه را اجرا میکند.
- با حلقه while منو به صورت مداوم نمایش داده میشود. این حلقه به طور دائم انتخاب کاربر را بررسی میکند.
- بر اساس انتخاب کاربر، تابع مناسب اجرا میشود.
- اگر کاربر گزینه ۴ را انتخاب کند، برنامه پایان مییابد.
- در پایان، تابع menu() صدا زده میشود. با استفاده از این تابع برنامه اجرا میشود.
۲۰- اپلیکیشن ساده تولید کننده پسورد
تولید کردن پسورد یکی از بهترین روشها برای یادگیری مهارتهای مربوط به کار با رشتهها و دادههای تصادفی است. در این پروژه باید برنامهای بنویسیم که به صورت تصادفی کلمه عبور بسازد. این کلمه باید شامل کاراکترهای حروف الفبا، اعداد و نمادها باشد.
مراحل انجام پروژه
سعی کردهایم که پروژه برنامه تولید کننده پسورد تصادفی را بر اساس مراحل زیر، پیادهسازی کنیم.
- استفاده از ماژولهای string و random برای تولید کردن حجم انبوهی از کاراکترهای مختلف
- ساخت تابع برای انتخاب کاراکتر به صورت تصادفی با تعداد مشخص شده توسط کاربر
- اعلام پسورد تولید شده به کاربر

در کادر پایین، کدهای مربوط به اپلیکیشن ساده تولید پسورد را پیادهسازی کردهایم.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا کتابخانههای string و random را وارد میکنیم. با کمک این توابع میتوانیم کاراکترهای مختلف را جمعآوری کرده و به صورت تصادفی انتخاب کنیم.
- سپس تابع generate_password() تعریف میشود. وظیفه این تابع، تولید رمز عبور است.
- داخل این تابع، حروف کوچک و بزرگ، اعداد و کاراکترهای خاص با هم ترکیب میشوند.
- بعد از آن، با random.choice() کاراکترهای تصادفی انتخاب شده و رمز عبور ساخته میشود.
- در پایان، رمز عبور تولید شده برگردانده میشود.
- سپس تابع password_generator() تعریف میشود.
- این تابع، طول رمز عبور را از کاربر دریافت میکند و با صدا زدن generate_password() رمز عبور را میسازد.
- در نهایت، پسورد تولید شده روی خروجی چاپ میشود.
- در پایان، تابع password_generator() اجرا میشود.
جمعبندی
در این مطلب از مجله فرادرس چند پروژه ساده پایتون را بررسی کردهایم. این پروژهها تنوع زیادی دارند. در بعضی از آنها برای حل مسئله از توابع درونی پایتون کمک گرفتهایم و برخی دیگر را با کمک مفهوم برنامه نویسی تابعی اجرا کردیم. از تکنیکهایی مانند Dictionary Comprehension و List Comprehension کمک گرفتهایم.
در بخش پایانی هم چند پروژه نسبتا کاربردی را پیادهسازی کردهایم. برای اجرای مسائل انتهایی مطلب از تکنیکها و مفاهیم برنامه نویسی مختلف به صورت ترکیبی و در کنار هم استفاده کردیم.












