در ادامه آموزش گسترش اندیشه پویا:
پیادهسازی پروژههای پایتون بهترین روش برای یادگیری هرچه بهتر و درک عمیقتر مفاهیم برنامه نویسی است. پروژه ساده پایتون به تمرینی گفته میشود که با کمک ابتداییترین دستورات برنامه نویسی نوشته شود. بیشتر اوقات این پروژهها را میتوان با کمک یک یا دو تابع مجزا پیادهسازی کرد. اما گاهی از اوقات برای اجرای این پروژهها به داشتن دانش در حوزههایی مانند ریاضیات، رمزنگاری،کار با ماژول زمانو غیره هم نیاز داریم. برای مثال، ممکن است که بخواهیم فاصله سنی بین دو نفر را از طریق تفریق سن آنها بدست بیاوریم. برای اجرای این پروژه ساده باید با ساختار سال و ماه و روز میلادی یا شمسی آشنایی داشته باشیم. با کمک حل این پروژهها میتوانیم تا حد زیادی مهارتهای خود را ارتقا بدهیم.
- در این مطلب، روش پیادهسازی چند پروژه ساده پایتون را با تکنولوژیهای مختلف بررسی میکنید.از تکنیکهایی مانند برنامه نویسی تابعی، تابع Lambda و غیره برای حل مسائل کمک میگیرید.سه روش مختلف را برای محاسبه n-امین عدد فیبوناچی در پایتون میآموزید.اجرای وظایفی مانند معکوس کردن، شیفت دادن عناصر و غیره را در لیست میآموزید.بازی حدس عدد و کلمه را به صورت پروژه ساده پایتون اجرا میکنید.روش اجرای اپلیکیشنهای ساده To-Do و تولید کننده پسورد را در پایتون یاد میگیرید.
در این مطلب از مجله ۲۰ پروژه ساده پایتون را برای تمرین پیادهسازی میکنیم. این پروژهها از گزینههای بسیار سادهای مانند تشخیص عدد بزرگتر بین دو عدد شروع شده و تا اجرای چند پروژه کاربردی به پیش میروند. پروژههای انتهای مطلب، طوری انتخاب شدهاند که بتوان از آنها در پیادهسازی برنامههای واقعی استفاده کرد.
۱- پیدا کردن عدد بزرگتر از بین دو عدد مجزا
در این پروژه باید برنامهای بنویسیم که بتواند دو عدد مجزا را با همدیگر مقایسه کرده و مقدار بزرگتر را برگرداند. با داشتن این برنامه میتوان از آن برای پیدا کردن مقدار بزرگتر در انبوهی از اعداد مختلف نیز استفاده کرد.
برای حل این پروژه از سه روش مختلف استفاده میکنیم.
در جدول پایین، این سه روش را به صورت مختصر و ساده با همدیگر مقایسه کردهایم.
تابعmax()میتواند دو یا چند مقدار مختلف را با همدیگر مقایسه کند و عدد بزرگتر را برگرداند. این تکنیک، کوتاهترین روش کدنویسی برای مقایسه اعداد و کشف مقدار بزرگتر است.
بعد از اجرای کدهای بالا عدد7در خروجی نمایش داده میشود.
استفاده از عملگر بزرگتر
عملگر بزرگتر، جزوعملگرهای مقایسهای پایتوناست. از این عملگرها برای نوشتن عبارتهای شرطی به کمکدستور if در پایتوناستفاده میشود. با استفاده از عملگر بزرگتر «>» میتوانیم عدد بزرگتر را نمایش بدهیم. تفاوتی نمیکند که این شرط درست ارزیابی شود یا غلط، به هر حال اعداد یا مساوی هم هستند یا یکی از آنها از دیگری بزرگتر است.
بعد از اجرای کدهای بالا عدد7در خروجی نمایش داده میشود.
استفاده از عبارت شرطی if-else
ازساختار if-else در پایتونبرای بررسی شرایط مختلف استفاده میشود. به این صورت که اگر شرطی درست بود برنامه رفتار خاصی را نشان میدهد. اما اگر شرط غلط باشد، برنامه میتواند رفتار یا عملیات دیگری را اجرا کند.
بعد از اجرای کدهای بالا عدد7در خروجی نمایش داده میشود.
۲- محاسبه سود ساده در پایتون
در این بخش، پروژه ساده پایتون برای محاسبه سود ساده سالانه را پیادهسازی میکنیم. برای محاسبه «سود ساده» (Simple Interest) باید مقدار کل سرمایه، زمان (بر حسب سال) و میزان درصد سود سالانه را داشته باشیم. سپس از فرمول «سود ساده» استفاده کرده و نتیجه را برمیگردانیم.
برای مثال، فرض کنیم که مبلغ اصلی ۱۰۰۰ تومان باشد. میخواهیم مقدار سود ساده این پول در مدت ۲ سال و با نرخ سود ۵٪ را محاسبه کنیم. برای محاسبه سود باید از فرمول مخصوصی کمک بگیریم که در پایین نوشته شده است.
SimpleInterest=(P×T×R)/100Simple Interest = (P \times T \times R)/100SimpleInterest=(P×T×R)/100
در این فرمول پارامترهای زیر وجود دارد.
- P:مبلغ کل - این حرف سرنامی از عبارت «Principal Amount» به معنای «ملغ اصلی» است.T:مدت زمان بر اساس سال - این حرف سرنامی از عبارت «Time» به معنای «زمان» است.R:نرخ سود در سال - این حرف سرنامی از عبارت «Rate Of Interest Per Annum» به معنای «نرخ سود سالانه» است.Simple Interest:مقدار سود سالانه
خوب الان مقدار سود ساده سالانه مثال بالا را محاسبه میکنیم. میدانیم کهp = 1000وT = 2وR = 5هستند. با جایگذاری آنها در فرمول، نرخ صورت به صورت زیر محاسبه میشود.
SimpleInterest=(1000×2×5)/100Simple Interest = (1000 \times 2 \times 5)/100SimpleInterest=(1000×2×5)/100
SimpleInterest=10000/100Simple Interest = 10000/100SimpleInterest=10000/100
SimpleInterest=100Simple Interest = 100SimpleInterest=100
یعنی اینکه برای سرمایه ۱۰۰۰ واحدی در مدت دو سال با نرخ سود ۵٪، ۱۰۰ واحد پولی سود بدست میآید. در زبان برنامه نویسی پایتون میتوان از چند روش مختلف برای محاسبه سود ساده استفاده کرد. در این بخش، دو روش را بررسی میکنیم.
تعریف تابع برای محاسبه سود ساده سالانه باعث افزایش خوانایی و قابلیت استفاده دوباره از کدها میشود. به طور خاص در زمانهایی که بخواهیم این محاسبه را چندین بار برای مقادیر مختلف در برنامه انجام بدهیم، این روش، بهترین تکنیک است. فقط کافی است که تابع را با مقادیر مناسب به عنوان ورودی، فراخوانی بکنیم. انجام این کار از نوشته شدن کدهای تکراری جلوگیری میکند. بنابراین برنامه تمیز بوده و نگهداری آنهم ساده است.
بعد از اجرای کدهای بالا عدد3.84در خروجی نمایش داده میشود.
استفاده از تابع lambda
مهمترین کاربردتابع «Lambda» در پایتوندر نوشتن سریع محاسبات به صورت یک خطی است. این تابع، کدهای نوشته شده را به صورت مختصر و کوتاه نگه میدارد. اما باعث کاهش خوانایی برنامه نیز میشود. به خصوص زمانهایی که منطق پیچیدهای داریم.
بعد از اجرای کدهای بالا عدد3.84در خروجی نمایش داده میشود.
تا به این قسمت از مطلب دو پروژه ساده پایتون را بررسی کردهایم. در ادامه پروژهها جالبتر و کمی حرفهایتر میشوند. در صورت تمایل به مطالعه مطالبی مانند این مورد، پیشنهاد میکنیم که حتما اپلیکیشن مجله را بر روی دستگاههای همراه خود نصب کنید.
براینصب اپلیکیشنرایگانمجله کلیک کنید.
۳- کشف n-امین عدد فیبوناچی
فرض کنیم عدد «n» داده شده است. باید برنامهای بنویسیم که بتوانید n-امین عنصر را در زنجیره فیبوناچی کشف کند. میدانیم در زنجیره فیبوناچی هر عددی از جمع دو عدد قبل از خودش ساخته میشود. دو عنصر اول این زنجیره هم به ترتیب ۰ و ۱ هستند. در کادر پایین، فرمول مربوط به محاسبه فیبوناچی را نوشتهایم.
F0=0,F1=1F_0 = 0, F_1 = 1F0=0,F1=1
Fn=Fn−1+Fn−2forn≥2F_n = F_{n-1} + F_{n-2} for n \geq 2Fn=Fn−1+Fn−2forn≥2
برای حل این مسئله از سه روش مختلف استفاده میکنیم.
در این روش به طور مستقیم از فرمول محاسبه فیبوناچی استفاده میکنیم. تابع بازگشتی هر بار خودش، خودش را فراخوانی میکند. هدف این است که مقدار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» سرنامی از عبارت (AmericanStandardCode forInformationInterchange) به معنای «کد استاندارد آمریکایی برای تبادل اطلاعات» است. در این سیستم، عدد منحصربهفردی به تمام کاراکترهای قابل استفاده در متنها اختصاص داده میشود. بعضی از اوقات در زمان برنامه نویسی لازم است مقدار کد ASCII کاراکتر خاصی را پیدا بکنیم. برای مثال کد ASCII کاراکتر «a» برابر با ۹۷ و کد ASCII کاراکتر «D» برابر با ۶۸ است.
بهترین روش برای محاسبه مقدار کد ASCII کاراکترها استفاده از تابعord()در زبان پایتون است.
بعد از اجرای کدهای بالا عدد103در خروجی نمایش داده میشود.
۵- محاسبه مجموع مربعات n عدد طبیعی اول
در این پروژه میخواهیم برنامهای برای محاسبه مجموع مربعات «n» عدد طبیعی اول بنویسیم. ابتدا باید منظور صورت سوال را متوجه شویم. فرض کنید باید مجموع مربعات ۵ عدد طبیعی اول را محاسبه کنیم. فرمول ریاضی ساده این عملیات را در پایین نوشتهایم.
12+22+32+42+52=551^2 + 2^2 + 3^2 + 4^2 + 5^2 = 5512+22+32+42+52=55
فرمول این عملیات ساده است. اما اگر n عدد بزرگی باشد استفاده از این زنجیره کار سخت و طاقتفرسایی میشود. در ریاضیات از فرمول زیر برای محاسبه این مقدار استفاده میکنیم.
∑i=1ni2=6n(n+1)(2n+1)6\sum_{i=1}^{n} i^2 = \frac{6n(n+1)(2n+1)}{6}i=1∑ni2=66n(n+1)(2n+1)
برنامه نویسی فرمول مجموع مربعات n عدد طبیعی اول
برای حل این پروژه هم روشهای مختلفی وجود دارد. سادهترین روش کدنویسی همین فرمول است. در کادر پایین، فرمول بالا را کدنویس کردهایم.
بعد از اجرای کدهای بالا عدد55در خروجی نمایش داده میشود.
استفاده از عبارتهای مولد
عبارتهای مولد برای ساخت اشیا پیمایشپذیر به کار برده میشوند. با کمک این عبارتها میتوانیم شی پیمایشپذیری از توان دوم تمامnعدد طبیعی اول بسازیم. سپس ازتابع sum در پایتوناستفاده کرده و حاصل جمع تمام مقادیر درون این شیء را محاسبه میکنیم.
بعد از اجرای کدهای بالا عدد55در خروجی نمایش داده میشود.
۶- معکوس کردن لیست در پایتون
در این پروژه، لیستی از اعداد داده شده است. وظیفه برنامه نویس آن است که ترتیب چیدن تمام عناصر لیست را معکوس بکند. در واقع یکبار دیگر لیست را از آخر به اول بچیند. فرض کنیم که لیست[10, 20, 30, 40]داده شده است. خروجی برنامه باید لیست[40, 30, 20, 10]باشد.
استفاده از تابع reverse
متد reverseتمام عناصر لیست را معکوس میکند. این متد لیست جدیدی ایجاد نمیکند، بلکه کل ساختار لیست مشخص شده را تغییر میدهد.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
استفاده از تکنیک تکهتکه کردن لیست
در این تکنیک از اندیسهای منفی استفاده میکنیم. با کمک اندیسهای منفی میتوانیم لیست جدیدی از روی لیست اصلی بسازیم که تمام عناصر آن برعکس لیست اول باشند.
بعد از اجرای کدهای بالا، خروجی زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
۷- شیفت دادن عناصر درون آرایه
در این مسئله، آرایهای از اعداد صحیح و یک عدد مشخص به برنامه نویس داده میشود. از برنامه نویس خواسته شده است که با کمک برنامههای پایتون تمام مقادیر درون آرایه را به اندازه عدد صحیح داده شده به سم چپ شیف بدهد. در این عملیات با هربار شیف دادن، عنصر انتهایی آرایه از خانه آخر حذف شده و به خانه اول اضافه میشود. برای مثال، فرض کنیم که لیست[1, 2, 3, 4, 5]به همراه عدد3مشخص شده است. در خروجی باید لیست[3, 4, 5, 1, 2]به بیرون برگردانده شود.
استفاده از تکنیک Slicing در لیستها
تکنیک Slicing با عنوان «تکهتکه کردن» یا «قطعهقطعه کردن» نیز شناخته میشود. در این روش برای چرخاندن آرایه آن را با کمک «تکهتکه کردن» به دو بخش جدا از هم تقسیم میکنیم. سپس این دو بخش را به صورت معکوس به همدیگر میچسبانیم. در نتیجه آرایه یا لیست جدید، طوری ساخته میشود که انگار آرایه اصلی به چپ شیف داده شده است.
بعد از اجرای کدهای بالا، خروجی زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- 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را نادیده میگیرد.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
استفاده از تابع filter
از تابعfilter()هم میتوان برای حذف عناصر درون لیستها کمک گرفت. فقط کافی است که شرط مناسبی را برای فیلتر کردن این عناصر تعریف بکنیم. به طور کل یکی از کاربردیترین روشها برای تعریف عبارتهای شرطی مناسب در تابعfilter()استفاده از توابع بینامlambdaاست.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- 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
کتابخانه 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
در این تکنیک میخواهیم از توابع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 تبدیل میکنیم. سپس از تابعargsort()استفاده کرده و ساختار مرتب شده را به دست میآوریم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'alex': 10, 'clara': 15, 'diana': 2, 'eva': 32, 'mostafa': 9}
۱۲- مدیریت کلیدهای گمشده در دیکشنری
در این پروژه ساده پایتون میخواهیم کلیدهای گمشده را بررسی کنیم. دیکشنریهای پایتون از ساختار کلید-مقدار پیروی میکنند. این ساختار، دسترسی بسیار سریعی به دادهها (با پیچیدگی زمانیO(1)O(1)O(1)) ایجاد میکند. هر چند در بسیاری از برنامهها کاربر تمام کلیدهای موجود در دیکشنری را نمیشناسد. تلاش برای دسترسی مستقیم به کلیدهای گمشده در پایتون باعث بروزخطای KeyErrorمیشود.
برای شناسایی کلیدهای گمشده و مدیریت این شرایط در پایتون چند روش مختلف وجود دارد.
- استفاده از defaultdictاستفاده از متد get
استفاده از defaultdict
تابع کاربردی و مفیدdefaultdictدر داخل ماژولcollectionsتعبیه شده است. با کمک این تابع، مقدار زیادی از بررسیهای تکراری را کاهش میدهیم. در ضمن با استفاده ازdefaultdictمیتوانیم مقداری را نیز به عنوان پیشفرض به تمام کلیدهای گمشده در زمان ساخت دیکشنری اختصاص بدهیم.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- defaultdict(lambda: 'Key Not found'):این دستور دیکشنری میسازد که به جای اعلام خطای «KeyError»، در زمان فراخوانی کلیدهای ناموجود در دیکشنری، پیغام از پیشتعریف شدهKey Not foundرا نشان میدهد.dic['a'] = 1 و dic['b'] = 2:این دو دستور دو کلید مختلف ساخته و به هر کدام مقداری را اختصاص میدهند.
متدget()به برنامه نویسان کمک میکند که اگر کلید وجود داشت، مقدار متناظر با آن را برگردانند. اما اگر کلید وجود نداشت، مقدار پیشفرضی را به خروجی ارسال کنند.
بعد از اجرای کدهای بالا، خروجی به شکل زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است..
- تابعget()مقدار اختصاص داده شده به کلید مورد نظر را برمیگرداند.این تابع ۲ پارامتر دریافت میکند. پارامتر اول همان کلیدی است که باید مقدار مربوط به آن را برگرداند. پارامتر دوم هم مقداری است که در صورت وجود نداشتن کلید در دیکشنری به صورت پیشفرض، برگشت داده میشود.
۱۳- تبدیل لیستی از تاپلها به دیکشنری در پایتون
در این پروژه ساده پایتون، لیستی از تاپلها داده شده است. باید این لیست را به دیکشنری تبدیل کنیم. هر تاپل شامل دو مقدار مجزا است که به صورت جفت کلید و مقدار نوشته شدهاند. عنصر اول به عنوان کلید و عنصر دوم به عنوان مقدار این کلید در نظر گرفته میشود. برای مثال، فرض کنیم اگر لیست[("a", 1), ("b", 2), ("c", 3)]داده شده باشد. خروجی باید به شکل دیکشنری{'a': 1, 'b': 2, 'c': 3}ساخته شود.
سه روش مختلف را برای حل این مسئله بررسی میکنیم.
تابع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مقادیر مشخص شده را به صورت دستی به دیکشنری تخصیص میدهیم.
بعد از اجرای کدهای بالا، خروجی زیر ساخته شده و در کنسول پایتون نمایش داده میشود.
{'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» به کاربران کمک میکند که کارهایی مانند ذخیرهسازی داده، استفاده از حلقهها و عبارتهای شرطی را تمرین بکنند. در ضمن کاربر میتواند با سلیقه خود، روش ساخت رابط کاربری مناسبی را در فضای کنسول پیادهسازی بکند. پیادهسازی این پروژه، موارد زیر را به برنامه نویسان میآموزد.
- کار کردن با لیستهاروش مدیریت چند عنصر مختلفو استفاده از حلقه برای نمایش و کار بر روی دادهها
در این پروژه، کاربر باید بتواند وظایف مختلفی را برای خود تعریف کند. وظایف تعریف شده را مشاهده کرده و در صورت نیاز آنها را حذف بکند.
برای پیادهسازی این پروژه بهتر است که طبق دستورالعمل زیر به پیش بروید.
- لیستی را برای ذخیرهسازی وظایف مورد نظر کاربر تعریف بکنید.توابعی را برای اضافه کردن وظیفه، نمایش وظیفه و حذف آن تعریف کنید.از حلقهای برای جابهجا شدن بر روی گزینههای منو و دریافت دادههای ورودی کاربر برای هر بخش استفاده کنید.برای دسترسی بهتر، وظایف را به صورت لیست شماره دار در خروجی چاپ بکنید.
در فهرست زیر، مراحل و نکات مهم کد بالا نوشته شده است.
- ابتدا لیستی خالی به نام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 کمک گرفتهایم.
در بخش پایانی هم چند پروژه نسبتا کاربردی را پیادهسازی کردهایم. برای اجرای مسائل انتهایی مطلب از تکنیکها و مفاهیم برنامه نویسی مختلف به صورت ترکیبی و در کنار هم استفاده کردیم.
- مجموعه آموزش پایتون رایگان – مقدماتی تا پیشرفتهآموزش طراحی رابط کاربری گرافیکی GUI با کتابخانه Tkinter در پایتون + گواهینامهمجموعه آموزش پایتون برای نوجوانان – مقدماتی تا پیشرفتهتبدیل ثانیه به ساعت و دقیقه در پایتون + مثال و کدکدهای پایتون آماده کاربردی و ضروری برای برنامه نویسان مبتدی تا حرفه ای
این آموزش توسط تیم تخصصی گسترش اندیشه پویا (GAP) گردآوری و ویرایش شده است. برای مشاوره و خدمات تخصصی در این حوزه با ما در ارتباط باشید.