سرفصل دروس دوره‌ی مبانی برنامه‌نویسی دانشگاه مردم

این نوشته خلاصه ای از Syllabus دوره ی Programming Fundamentals دانشگاه مردم (University of the People) با کد CS1101 و همچنین شرحی از جزئیات تمرین های ارائه شده در این دوره (نوامبر و دسامبر 2021) است. ساختار کلی دوره ها در دانشگاه مردم را در مطلبی جداگانه نوشته ام.[مطلب مرتبط: سرفصل دروس دوره‌ی استراتژی‌های آموزش آنلاین دانشگاه مردم]جایگاه دوره در برنامه ی درسیاین درس پیشنیاز ندارد اما خودش پیشنیاز درس «برنامه نویسی 1» است (جزئیات برنامه ی درسی «فوق دیپلم علوم کامپیوتر» و «کارشناسی علوم کامپیوتر» در سایت دانشگاه نوشته شده است و در تصاویر زیر نیز آمده است (نمودارها را با سایت diagrams.net کشیده ام).برنامه درسی فوق دیپلم علوم کامپیوتر دانشگاه مردمبرنامه درسی کارشناسی علوم کامپیوتر دانشگاه مردمتوضیح کلی دورهدر این دوره، اصول و مبانی برنامه نویسی بر مبنای زبان برنامه نویسی پایتون آموزش داده می شود. برای شرکت در این دوره هیچ دانش قبلی برنامه نویسی کامپیوتر لازم نیست. مفاهیم انتزاعی آموزش داده شده در این دوره در بیشتر زبان های برنامه نویسی قابل استفاده هستند.با توجه به این که این دوره پیش نیاز دوره های بعدی است، یادگیری کامل و دقیق آن خیلی مهم است. انجام همه ی تکالیف و تمرین ها باعث عمیق شدن دانشجو در یادگیری می شود.منابع درسیمنابع درسی دانشگاه مردم از منابع آزاد (OER: Open Educational Resources) انتخاب می شوند که برای استفاده های آموزشی رایگان هستند. منبع اصلی این دوره «پایتونی فکر کن: چطور مانند دانشمند رایانه بیندیشیم» از داونی (2015) است:Downey, A. (2015). Think Python: How to think like a computer scientist. Green Tea Press. This book is licensed under Creative Commons Attribution-NonCommercial 3.0 Unported (CC BY-NC 3.0). Download the here.دیدن منابع ویدئویی ذکرشده در دوره اجباری نیستند اما توصیه می شوند.نرم افزارهای مورد نیازدانشجویان برای انجام تکالیف باید مفسر پایتون متناسب با سیستم عامل خود را دانلود و نصب کنند. در این دوره از پایتون 3 استفاده می شود (و نه پایتون 2). به جز سایت اصلی پایتون می توان از سایت های زیر هم استفاده کرد. سایت دوم امکان اجرای کدهای پایتون را در محیط ابری و بدون نیاز به نصب فراهم می کند:WisdomJobs. (2018). IDLE - Python. https://www.wisdomjobs.com/e-university/python-tutorial-176/idle-8842.htmlPythonanywhere. (n.d.). Host, run, and code Python in the cloud. https://www.pythonanywhere.comمن از نرم افزار PyScripter (که در یکی از ویدئوهای اولیه ی دوره معرفی شده بود) استفاده کردم که نرم افزاری سبک و سریع برای نوشتن و اجرای کدهای پایتونی است.اهداف و نتایج آموزشیدر پایان دوره، دانشجو می تواند:با استفاده از مفاهیم پایه ی برنامه نویسی، ساختارهای برنامه ی کامپیوتری و رویکردهای برنامه نویسی رویه‌ای، کدنویسی کند.با استفاده از زبان برنامه نویسی پایتون برنامه های کامپیوتری را برای حل مشکلات کامپیوتری بنویسد.به شکل مستقل درباره ی زبان های برنامه نویسی تحقیق کند و ویژگی های جدید برنامه نویسی را یاد بگیرد.زمان بندی دورهاین دوره مانند دوره های دیگر دانشگاه مردم هشت هفته ای است و در پایان هفته ی هشتم، آزمون نهایی آن برگزار می شود.هفته ی اول: معرفی و مفاهیم پایههفته ی دوم: متغیرها، Expressions، Statements و توابعهفته ی سوم: شرط ها و توابع بازگشتی (recursion)هفته ی چهارم: توابع و مقادیر بازگشتی (return)هفته ی پنجم: تکرار (iteration) و رشته هاهفته ی ششم: لیست هاهفته ی هفتم: دیکشنری ها و چندتایی ها (tuples)هفته ی هشتم: فایل هاهفته ی نهم: آزمون پایانیجزئیات دروسهفته ی اول (11 تا 17 نوامبر 2021)موضوعاتمفاهیم پایه ی برنامه نویسیبرنامه های کامپیوتریاشکال زدایی (دیباگینگ)خطاهازبان های طبیعی و صوریاهداف آموزشیدر پایان این هفته دانشجو می تواند:مفاهیم پایه ی برنامه نویسی را توضیح دهد. تفاوت بین زبان های سطح بالا و سطح پایین برنامه نویسی را شرح دهد.تکنیک های اساسی اشکال زدایی را بداند.محاسباتی ساده در پایتون بنویسد.منابعفصل اول کتاب دوره.منابع اضافی:Iqbal, W. (2020, July 27). How to install Python 3.8.5 on Windows 10 [2020] - YouTube. [Video]. YouTube. https://www.youtube.com/watch?v=yiCUmJon-5gLearn More for Free. (2018, February 26). How to run a Python script on your MAC: 006 creating and executing a Python program on Mac [Video]. YouTube. https://www.youtube.com/watch?v=syistTvMqjEتکالیفبحث گروهیعبارات زیر را در مفسر پایتون بنویسید و خروجی آن را ببینید. خروجی و توضیح آن را در فروم بنویسید. این عبارات را با عبارات کتاب مقایسه کنید و بگویید که چه نکته ای درباره ی تفاوت نسخه های پایتون در این جا وجود دارد:>>> print 'Hello, World!' >>> 1/2 >>> type(1/2) >>> print(01) >>> 1/(2/3)انشانویسیبخش اول: اگر بخواهید یک رشته را چاپ کنید و یک یا هر دو علامت نقل قول را فراموش کنید چه اتفاقی می افتد؟ چرا؟ با نوشتن هر کدام از عبارات زیر چه اتفاقی می افتد و چرا؟a>>> 2++2 >>> 2--2 >>> 2+-2 >>> 2-+2شروع کردن نمادهای ریاضی با صفر مشکلی ندارد (مثلن در 02). اگر همین کار را در پایتون انجام دهیم چه می شود و چرا؟ اگر دو مقدار را با یک فاصله بین آنها (بدون هیچ عملگری در بین آنها) بنویسیم چه اتفاقی می افتد و چرا؟بخش دوم: حداقل سه تجربه ی دیگری را که در نوشتن کدهای پایتونی در هنگام مطالعه ی فصل اول کتاب داشته اید بنویسید. کد نوشته شده و خروجی آن را بنویسید و توضیح دهید که چه چیزی یاد گرفته اید.هفته ی دوم (18 تا 24 نوامبر 2021)موضوعاتمتغیرهاعبارات (Expressions)بیان ها (Statements)ترتیب عملگرهاتوابعترکیب (Composition)اشکال زداییاهداف آموزشیدر پایان این هفته دانشجو می تواند:نقش آرگومان ها و پارامترها در توابع را در پایتون بررسی کند.متغیرها، عملگرها و عبارات را برای انجام محاسبات در پایتون ترکیب کند.توابع پایتونی بسازد که ورودی (آرگومان) دریافت می کنند.برنامه های پایتونی با توابع تو در تو (nested) بنویسد.منابعفصل دوم (متغیرها، عبارات و بیان ها) و سوم (توابع) از کتاب دوره.-- منابع اضافی:Khan Academy. (2011, June 30). Introduction to programs data types and variables [Video]. YouTube. https://www.youtube.com/watch?v=husPzLE6sZcKhan Academy. (2011, June 30). Fun with strings [Video]. YouTube. https://www.youtube.com/watch?v=iZAtkS0F-Zoتکالیفبحث گروهیبرای هر کدام از موارد زیر یک کد پایتونی بنویسید. کدی از کتاب کپی پیست نکنید. سعی کنید مبتکرانه عمل کنید:-- مثال 1: تابعی بنویسید که آرگومان درافت می کند. مشخص کنید که کدام بخش آرگومان است و کدام بخش پارامتر.-- مثال 2: تابع مثال اول را سه بار فراخوانی کنید: با مقدار، با متغیر و با عبارت. در هر مورد توضیح دهید که آرگومان چیست.-- مثال 3: تابعی با یک متغیر محلی بنویسید. نشان دهید که اگر این متغیر را بیرون از تابع فراخوانی کنید چه اتفاقی می افتد. نتایج را توضیح دهید.-- مثال 4: تابعی بنویسید که ورودی (آرگومان) می گیرد. به پارامتر تابع یک نام مشخص و یکتا دهید. نشان دهید که چه اتفاقی می افتد اگر از آن نام خارج از تابع استفاده کنید. نتایج را توضیح دهید.-- مثال 5: نشان دهید که چه اتفاقی می افتد اگر یک متغیر خارج از یک تابع هم نام با یک متغیر محلی (داخل تابع) باشد. نشان دهید که مقدار هر متغیر با اجرای برنامه به چه شکل در می آید.همتاارزیابیاز این هفته به بعد از IDLE استفاده می کنیم که امکان نوشتن برنامه و ذخیره آن (با فرمت .py) وجود داشته باشد. یک برنامه ی پایتونی با نام tryme4.py بنویسید. در برنامه ی خود باید از کامنت های مناسب برای توضیح کد استفاده کنید. یک تابع با نام nine_lines بنویسید که از تابع three_lines استفاده کند و در مجموع نه خط را به چاپ برساند. سپس یک تابع به نام clear_screen بنویسید که ترکیبی از سه تابع nine_lines و three_lines و new_line است و در مجموع 25 خط چاپ می کند. دو تابع این جا نوشته شده است و نیازی به نوشتن دوباره ی آن ها نیست:def new_line(): print('.') def three_lines(): new_line() new_line() new_line()فایل نوشته شده را به تکلیف پیوست کنید. فایل شما می تواند فرمت .py یا .txt داشته باشد. همچنین باید کد خود را اجرا کنید و خروجی تولیدشده را هم در تکلیف بیاورید. معیارهای زیر برای نمره دهی به این تکلیف استفاده می شوند:-- آیا هر چهار تابع نوشته شده و بخشی هم برای اجرای توابع در نظر گرفته شده است؟-- آیا برنامه قابلیت توابع تودرتو را اجرا کرده است؟-- آیا برنامه خروجی مناسب را تولید کرده است؟ خروجی می تواند در قالب فایل متنی، فرمت RTF-formatted و Microsoft Word document باشد. خروجی درست ابتدا 9 خط شامل یک نقطه چاپ می کند و سپس 25 خط شامل یک نقطه.-- آیا برنامه کامنت های مناسب در جای مناسب دارد؟انشانویسی-- بخش اولحجم یک کره را با فرمول 4/3πr3 (آر به توان سه) می توان به دست آورد. تابع print_volume (r) را بنویسید که شعاع دریافت کند و حجم کره را به عنوان خروجی ارائه دهد. این تابع را با سه شعاع متفاوت فراخوانی کنید. کد تابع و ورودی ها و خروجی ها را در تکلیف خود بیاورید.-- بخش دومبا توجه به چیزهایی که در این هفته آموختید تابع خودتان را بنویسید. این تابع باید حداقل یک ورودی (آرگومان) دریافت کند. از هیچ منبع خارجی برای نوشتن تابع استفاده نکنید. آوردن کد، ورودی و خروجی و توضیح ویژگی هایی که تابع شما انجام می دهد لازم است.هفته ی سوم (25 نوامبر تا 1 دسامبر 2021)موضوعاتجزء صحیح تقسیم و باقیماندهعبارات بولی (boolean)شرط های زنجیره ایشرط های تو در توبازگشتی (recursion)دریافت ورودی از صفحه کلیداهداف آموزشی در پایان این هفته دانشجو می تواند:تفاوت بین شرط های زنجیره ای و تو در تو را توضیح دهد.شرط های تو در تو را با عبارات بولی ساده سازی کند.شرط زنجیره ای بنویسد.تابع بازگشتی بنویسد.برنامه ای بنویسد که از صفحه کلید ورودی دریافت کند.منابعفصل پنجم کتاب دوره (شرط ها و توابع بازگشتی).-- منابع اضافی:فصل چهارم کتاب (بررسی موردی: طراحی رابط کاربری)kjdElectronics. (2017, June 9). Python beginner tutorial 5 - Booleans and conditionals [Video]. YouTube. https://www.youtube.com/watch?v=E4wbrwDpnIgتکالیفبحث گروهیتفاوت شرط زنجیره ای و شرط تو در تو را توضیح دهید و برای هر کدام مثال بزنید (از مثال های کتاب استفاده نکنید).شرط تو در تو می تواند خیلی پیچیده شود. راهکار پرهیز از این پیچیدگی را بنویسید. یک مثال از شرط تو در توی عمیق بزنید و بعد آن را با یک شرط تک بازنویسی کنید. نشان دهید که هر دو کد خروجی یکسانی دارند (از مثال های کتاب استفاده نکنید).انشانویسی-- از بخش 5.8 کتاب تابع countdown را کپی کنید:def countdown(n): if n <= 0: print('Blastoff!') else: print(n) countdown(n-1)حالا شما تابع countup را بنویسید که به همین شکل بازگشتی از عدد داده شده تا صفر می شمارد:>>> countup(-3) -3 -2 -1 Blastoff!برنامه ای بنویسید که از صفحه کلید یک عدد به عنوان ورودی دریافت می کند (در پایتون 3 باید از تابع input و در پایتون 2 از تابع raw_input استفاده کنید). اگر عدد مثبت بود تابع countdown را فراخوانی کنید و اگر منفی بود تابع countup فراخوانی کنید. برای صفر هر کدام از توابع را که خواستید فراخوانی کنید. کد برنامه، خروجی برنامه برای یک عدد مثبت، یک عدد منفی و صفر و توضیح کد را بفرستید.-- یک برنامه ی پایتون بنویسید که خطای runtime داشته باشد. کد برنامه، خروجی آن (به همراه خطای تولیدشده)، توضیح علت ایجاد خطا و راه حل رفع خطا را بفرستید.هفته ی چهارم (2 تا 8 دسامبر 2021)موضوعاتمقادیر بازگشتی (return)توسعه ی افزایشی (incremental)ترکیب بندی (composition)توابع بولیبازگشتی (recursion)اهداف آموزشی در پایان این هفته دانشجو می تواند:کدی آزمایشی توسعه دهد که یک تابع را عیب یابی می کند.از یک تابع بازگشتی برای محاسبه ی یک نتیجه استفاده کند.تابعی را با استفاده از مفهوم توسعه افزایشی بنویسد.منابعفصل ششم کتاب دوره (توابع با مقدار بازگشتی).-- منابع اضافی:kjdElectonics. (2017, May 25). Python beginner tutorial 3 - Function return values and debugging [Video]. YouTube. https://www.youtube.com/watch?v=uPwztoPBVWIتکالیفبحث گروهیبخش 6.9 کتاب سه احتمال را برای کار نکردن یک تابع مطرح می کند:-- این سه احتمال را توضیح دهید.-- از تعریف پیش شرط (precondition) و پس شرط (postcondition) در توضیحات خود استفاده کنید.-- مثال خودتان از هر احتمال در کد پایتون را بنویسید. کد و خروجی آن را هم در پاسخ بیاورید.همتاارزیابیتمرین 6.4 کتاب را با استفاده از توابع بازگشتی و تابع is_divisible انجام دهید. فرض کنید که هر دو ورودی تابع is_power مثبت خوهد بود. دقت کنید که هر عدد مثبتی به توان صفر یک می شود. این قاعده درباره ی خود صفر و یک هم صدق می کند. وقتی تابع is_power خود را نوشتید، این حالات را تست کنید:print(&quotis_power(10, 2) returns: &quot, is_power(10, 2)) print(&quotis_power(27, 3) returns: &quot, is_power(27, 3)) print(&quotis_power(1, 1) returns: &quot, is_power(1, 1)) print(&quotis_power(10, 1) returns: &quot, is_power(10, 1)) print(&quotis_power(3, 3) returns: &quot, is_power(3, 3))کد برنامه (به همراه کامنت های مورد نیاز) و خروجی آن را پیوست تکلیف کنید. تکلیف بر اساس معیارهای زیر سنجیده می شود: آیا تکلیف شامل تابع is_divisible از بخش 6.4 کتاب هست؟آیا برنامه تابع is_power را با دو ورودی پیاده سازی کرده است؟آیا تابع is_power تابع is_divisible را فراخوانی می کند؟آیا تابع is_power خودش را به شکل بازگشتی فراخوانی می کند؟آیا تابع is_power شامل حالت پایه که در آن هر دو ورودی برابر هستند، می شود؟آیا تابع is_power شامل حالت پایه که در آن ورودی دوم یک است می شود؟آیا تکلیف شامل خروجی صحیح برای پنج تست گفته شده می شود؟انشانویسی-- بخش اول:در بخش 6.2 کتاب درباره ی توسعه ی افزایشی یاد گرفتید. تمرین آخر این بخش را انجام دهید و با استفاده از این روش تابع hypotenuse را برای محاسبه ی وتر مثلث قائم الزاویه بنویسید. بعد از آخرین مرحله ی توسعه، خروجی hypotenuse(3, 4) را چاپ کنید. این تابع را با دو ورودی متفاوت دیگر هم تست کنید.-- بخش دوم:خودتان یک تابع پایتونی بنویسید که محاسباتی را انجام بدهد. تابع را از جایی کپی نکنید. از توسعه افزایشی استفاده کنید و مرحله به مرحله ی کارتان را توضیح دهید. در نهایت خروجی ای را که نشان می دهد تابع شما به درستی کار می کند بنویسید. مرحله به مرحله از کارتان و ورودی و خروجی هر مرحله را بنویسید و همچنین خروجی سه بار فراخوانی تابع تان با سه ورودی مختلف را بنویسید.-- بخش سوم:تجربه ی خود از همتاارزیابی را بنویسید. احساس تان درباره ی بازخورد و نمره ای که در این بخش گرفتید چه بوده است؟ فکر می کنید احساس دیگران درباره ی بازخوردهای شما و نمراتی که به آنها داده اید چه بوده است؟هفته ی پنجم (9 تا 15 دسامبر 2021)موضوعاتمقداردهی مجدد و به روزرسانی متغیرهاعبارت while و عبارت breakالگوریتم هارشته ها، قطعه های رشته و توابع رشته هاحلقه ی forجستجو و مقایسه ی رشتهاهداف آموزشی در پایان این هفته دانشجو می تواند:توابع را با حلقه for و شرط ها و متدهای رشته ها تفسیر کند.با حلقه های while تابع بنویسد.با حلقه ی for روی رشته ها عملیات انجام دهد.از قطعه های رشته در کد استفاده کند.منابعفصل هفتم (تکرار) و هشتم (رشته ها) از کتاب دوره.-- منابع اضافی:Khan Academy. (2011, June 30). Fun with strings. [Video]. YouTube. https://www.youtube.com/watch?v=iZAtkS0F-ZoKhan Academy. (2011, June 30). For loops in Python. [Video]. YouTube. https://www.youtube.com/watch?v=9LgyKiq_hU0Khan Academy. (2011, June 30). While loops in Python. [Video]. YouTube. https://www.youtube.com/watch?v=D0Nb2Fs3Q8cتکالیفبحث گروهیاین تکلیف بر اساس تمرین 8.34 کتاب است. هر کدام از توابع قرار است بررسی کنند که آیا ورودی شان حرف کوچکی (lowercase) دارد یا نه. در مورد هر تابع بنویسید که در واقع چه کاری می کند. اگر هدف خواسته شده را تامین نمی کند مثالی بزنید که خروجی نامناسب تولید می کند. توضیح دهید که چرا خروجی تابع غلط است.a# 1 def any_lowercase1(s): for c in s: if c.islower(): return True else: return False# 2 def any_lowercase2(s): for c in s: if 'c'.islower(): return 'True' else: return 'False'# 3 def any_lowercase3(s): for c in s: flag = c.islower() return flag# 4 def any_lowercase4(s): flag = False for c in s: flag = flag or c.islower() return flag# 5 def any_lowercase5(s): for c in s: if not c.islower(): return False return Trueهمتاارزیابی-- بخش اولاین تکلیف بر اساس تمرین 7.1 کتاب است. کد زیر را در تابعی به نام my_sqrt بنویسید که a را به عنوان پارامتر دریافت می کند، یک مقدار شروع برای X انتخاب می کند و تخمینی از جذر a را بر می گرداند.while True: y = (x + a/x) / 2.0 if y == x: break x = y -- بخش دومتابعی به نام test_sqrt بنویسید که با استفاده از حلقه ی while یک جدول مانند جدول زیر چاپ می کند و مقدار diff را که از مقایسه ی قدر مطلق my_sqrt(a) و math.sqrt(a) به دست می آید چاپ می کند.a = 1 | my_sqrt(a) = 1 | math.sqrt(a) = 1.0 | diff = 0.0 a = 2 | my_sqrt(a) = 1.41421356237 | math.sqrt(a) = 1.41421356237 | diff = 2.22044604925e-16 a = 3 | my_sqrt(a) = 1.73205080757 | math.sqrt(a) = 1.73205080757 | diff = 0.0 a = 4 | my_sqrt(a) = 2.0 | math.sqrt(a) = 2.0 | diff = 0.0 a = 5 | my_sqrt(a) = 2.2360679775 | math.sqrt(a) = 2.2360679775 | diff = 0.0 a = 6 | my_sqrt(a) = 2.44948974278 | math.sqrt(a) = 2.44948974278 | diff = 0.0 a = 7 | my_sqrt(a) = 2.64575131106 | math.sqrt(a) = 2.64575131106 | diff = 0.0 a = 8 | my_sqrt(a) = 2.82842712475 | math.sqrt(a) = 2.82842712475 | diff = 4.4408920985e-16 a = 9 | my_sqrt(a) = 3.0 | math.sqrt(a) = 3.0 | diff = 0.0 برنامه ی خود را طوری تغییر دهید که این جدول را برای 1 تا 25 چاپ کند. در این تکلیف هم کد و هم خروجی را باید آپلود کنید. نمره دهی بر اساس معیارهای زیر انجام می شود: آیا برنامه ی نوشته شده شامل یک تابع به نام my_sqrt هست که یک ورودی دریافت کند و در آن از حلقه while استفاده شده باشد؟آیا تابع my_sqrt ورودی x را مقداردهی اولیه می کند و خروجی نهایی را بر می گرداند؟آیا تابع test_sqrt مقادیر را از 1 تا 25 چاپ می کند؟آیا تابع test_sqrt مقادیر برگردانده شده از تابع my_sqrt به ازای هر کدام از مقادیر a را چاپ می کند؟آیا تابع test_sqrt مقادیر درست تابع math.sqrtبه ازای هر کدام از مقادیر a را چاپ می کند؟آیا تابع test_sqrt مقدار مقایسه بین دو تابع را چاپ می کند؟آیا تابع my_sqrt مقادیری را که تقریبا با خروجی math.sqrt برابر هستند بر می گرداند (diff های کمتر از 1e-14)؟انشانویسی1- حلقه ی بخش 8.3 کتاب را در نظر بگیرید:prefixes = 'JKLMNOPQ' suffix = 'ack' for letter in prefixes: print(letter + suffix)برنامه ای بنویسید که Ouack و Quack را چاپ کند اما در بقیه ی موارد طبق روال عادی عمل کند. کد برنامه و خروجی آن را به تکلیف پیوست کنید.2- حداقل سه مثال بنویسید که در آنها از قطعه های رشته استفاده شده است. ویژگی های هر کدام را توضیح دهید. مثال ها را خودتان بنویسید و از جایی کپی نکنید.هفته ی ششم (16 تا 22 دسامبر 2021)موضوعاتویژگی های لیستپیمایش (traversing) لیست هاعملگرها و متدهای لیستقطعات لیست هاMap, filter, and reduceحذف عناصر لیستObjects, values, and aliasingپاس دادن لیست ها به توابع به عنوان آرگوماناهداف آموزشی در پایان این هفته دانشجو می تواند:مفاهیم object, reference, and aliasing را در پایتون توضیح دهد.یک پارامتر لیستی را در تابع پایتونی تغییر دهد.لیست های پایتونی را با اضافه کردن، حذف یا مرتب کردن عناصر تغییر دهد.از عملگرها و متدهای لیست ها استفاده کند.منابعفصل دهم کتاب دوره (لیست ها).-- منابع اضافی:Khan Academy. (2011, June 30). Python lists [Video]. YouTube. https://www.youtube.com/watch?v=zEyEC34MY1AKhan Academy. (2011, June 30). For loops in Python [Video]. YouTube. https://www.youtube.com/watch?v=9LgyKiq_hU0Khan Academy. (2011, June 30). While loops in Python [Video]. YouTube. https://www.youtube.com/watch?v=D0Nb2Fs3Q8cتکالیفبحث گروهیبا استفاده از دو واژه ی equivalent و identical تفاوت بین objects و values را توضیح دهید. این تفاوت را با استفاده از یک مثال ساخته ی خودتان در پایتون و با استفاده از اپراتور is نشان دهید.رابطه ی بین object، reference و aliasing را با مثال پایتونی توضیح دهید. یک تابع پایتونی بسازید که یک لیست به عنوان ورودی می گیرد. مثال خودتان را با مفاهیم argument, parameter, object و reference توضیح دهید. در همه ی موارد، مثال ها را خودتان بسازید و از جایی کپی پیست نکنید.انشانویسی-- بخش اول: یک برنامه ی پایتونی با مشخصات زیر بسازید:--- یک رشته از واژه هایی داشته باشد که با فاصله از هم جدا شده اند. این رشته می تواند فهرستی از اسامی، غذاهای مورد علاقه، میوه ها و... باشد. اما نباید این رشته را از جایی کپی کنید.--- با استفاده از split این رشته را به لیست تبدیل کنید.--- سه واژه را از لیست حذف کنید. هر حذف را با یک روش متفاوت پایتونی انجام دهید.-- بخش دوم: درباره ی مفاهیم مرتبط با لیست ها (که در زیر می آید) مثال های خودتان را بزنید:--- فهرست های تو در تو--- عملگر *--- قطعات لیست--- عملگر +=--- فیلتر لیست--- یکی از عملکردهای لیست که مجاز است اما کار اشتباهی انجام می دهد (کاری که برنامه نویس انتظارش را ندارد).کد و خروجی برنامه ی خود را در این تکلیف بگذارید.-- بخش سوم: تجربه ی خود از همتاارزیابی در زمینه ی برنامه نویسی را بنویسید. احساس تان درباره ی بازخورد و نمراتی که در این بخش گرفتید چه بوده است؟ فکر می کنید احساس دیگران درباره ی بازخوردهای شما و نمراتی که به آنها داده اید چه بوده است؟هفته ی هفتم (23 تا 29 دسامبر 2021)موضوعاتدیکشنری، نوعی نگاشت است.حلقه ها و دیکشنری هاجستجوی معکوس (reverse lookup)دیکشنری ها و لیست هامتغیرهای جهانیچندتایی ها غیرقابل تغییر هستند.مقداردهی چندتایی هاچندتایی ها به عنوان مقادیر بازگشتیفهرست ها و چندتایی هادیکشنری ها به عنوان چندتاییاهداف آموزشی در پایان این هفته دانشجو می تواند:کدی برای اعمال تغییر در دیکشنری بنویسد.متغیرهای جهانی را در توابع تغییر دهد.چندتایی ها را در حلقه هایی که روی دیکشنری ها و لیست ها زده می شود، ایجاد کند.از توابع zip و enumerate و همچنین متد items دیکشنری استفاده کند.منابعفصل یازدهم (دیکشنری ها) و دوازدهم (چندتایی ها) از کتاب دوره.-- منابع اضافی:فصل سیزدهم کتاب دوره. مطالعه ی موردی: انتخاب ساختمان دادهkjdElectronics. (2017, August 5). Python beginner tutorial 8 - For loop, lists, and dictionaries [Video]. YouTube. https://www.youtube.com/watch?v=bE6mSBNp4YUSimplilearn. (2019, January 25). Python tuples | Python tuples tutorial | Python tutorial | Python programming | Sinmplilearn [Video]. YouTube. https://www.youtube.com/watch?v=wRC4H-k57egتکالیفبحث گروهیتوضیح دهید که چندتایی ها چطور در اعمال حلقه روی لیست ها و دیکشنری ها می توانند مفید باشند. مثال های خاص خودتان را بزنید. در مثال های خود باید از zip, enumerate, and items استفاده کنید.همتاارزیابیکد زیر را در برنامه ی خود بگذارید:alphabet = &quotabcdefghijklmnopqrstuvwxyz&quot test_dups = [&quotzzz&quot,&quotdog&quot,&quotbookkeeper&quot,&quotsubdermatoglyphic&quot,&quotsubdermatoglyphics&quot] test_miss = [&quotzzz&quot,&quotsubdermatoglyphic&quot,&quotthe quick brown fox jumps over the lazy dog&quot] # From Section 11.2 of: # Downey, A. (2015). Think Python: How to think like a computer scientist. Needham, Massachusetts: Green Tree Press. def histogram(s): d = dict() for c in s: if c not in d: d[c] = 1 else: d[c] += 1 return d -- بخش اول:تابعی has_duplicates به نام بنویسید که رشته ی ورودی را از نظر داشتن کاراکتر تکراری بررسی می کند. اگر این رشته کاراکتر تکراری داشت، تابع مقدار True و در غیر این صورت مقدار False را بر می گرداند. تابع خود را باید با استفاده از تابع histogram نوشته شده در کتاب (کد بالا) پیاده سازی کنید اما از توابع مشابه مطرح شده در کتاب استفاده نکنید. برای لیستtest_dups باید برای رشته ها حلقه بنویسید و مشخص کنید که هرکدام از رشته های این رشته مقدار تکراری دارند یا نه. مثلن خروجی برای دو رشته ی aaa و abc این گونه است:aaa has duplicates abc has no duplicates یعنی برای هر رشته در لیست، یک خط مانند خطوط بالا بنویسید.-- بخش دوم: تابعی به نام missing_letters بنویسید که یک رشته به عنوان ورودی دریافت کند و رشته ای شامل همه ی حروف الفبای غیر از حروف الفبای رشته ی دریافتی برگرداند. حروف الفبای رشته ی برگردانده شده باید به ترتیب حروف الفبا باشند. کد شما باید از تابع histogram استفاده کند و همچنین یک متغیر جهانی به نام alphabet داشته باشد که در تابع از آن به طور مستقیم (نه به عنوان یک ورودی یا تهیه ی یک کپی از آن در یک متغیر محلی) استفاده شود. تابع باید روی متغیر جهانی گفته شده یک حلقه اجرا کند. در ادامه یک حلقه روی لیستی به نام test_miss اجرا کنید که شامل چندین رشته است. در این حلقه هر بار تابع missing_letters روی یکی از رشته های لیست اجرا می شود. تست باید خط هایی مانند زیر چاپ کند:aaa is missing letters bcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz uses all the letters کد پایتونی شما باید شامل موارد زیر باشد:--- پیاده سازی alphabet, test_dups, test_miss, و histogram--- پیاده سازی تابع has_duplicates--- تابع test_dups که شامل یک حلقه بر روی رشته های لیست ورودی است.--- تابع test_miss که حروف جامانده ی رشته ها از لیست ورودی را بر می گرداند.کد شما بر اساس معیارهای زیر ارزیابی می شود: آیا برنامه تابعی به نام has_duplicates دارد که یک رشته دریافت کند و یک مقدار بولی برگرداند؟آیا تابع has_duplicates تابع histogram را فراخوانی می کند؟آیا برنامه حلقه ای روی لیستtest_dups اجرا می کند و بر روی رشته های لیست تابع has_duplicate را فراخوانی می کند؟آیا برنامه به درستی مقادیر تکراری در رشته های لیست test_dups را تشخیص می دهد؟آیا برنامه تابعی به نام missing_letters دارد که یک رشته دریافت کند و یک رشته برگرداند؟آیا تابع missing_letters تابع histogram را فراخوانی می کند؟آیا تابع missing_letters متغیر جهانی alphabet را مستقیمن فراخوانی می کند؟آیا برنامه حلقه ای روی رشته های لیست test_miss دارد که برای هر رشته تابع missing_letters را فراخوانی کند؟آیا برنامه به درستی کاراکترهای تکراری رشته های لیست test_miss را شتخیص می دهد؟ (شامل رشته ای از تمام حروف الفبا)انشانویسییک دیکشنری پایتونی بنویسید که لیستی از مقادیر را برای هر کلید برگرداند. کلید می تواند از هر نوعی باشد. این دیکشنری باید کاری معنادار و مفید انجام دهد. حداقل سه آیتم در دیکشنری قرار دهید. دیکشنری را خودتان بسازید و از جایی کپی نکنید.حالا کد زیر را از بخش 11.5 در نظر بگیرید:# From Section 11.5 of: # Downey, A. (2015). Think Python: How to think like a computer scientist. Needham, Massachusetts: Green Tree Press. def invert_dict(d): inverse = dict() for key in d: val = d[key] if val not in inverse: inverse[val] = [key] else: inverse[val].append(key) return inverseاین تابع را طوری تغییر دهید که دیکشنری شما را وارونه کند. در واقع هر آیتم از لیست های دیکشنری باید یک کلید جدا شوند. تابع invert_dict تغیرداده شده را روی دیکشنری خود اجرا کنید و دیکشنری عادی و وارونه شده را چاپ کنید. کد پایتونی و خروجی آن را در تکلیف بگذارید. همچنین توضیح دهید که این دیکشنری و حالت وارونه شده ی آن به چه درد می خورند.هفته ی هشتم (30 دسامبر 2021 تا 5 ژانویه ی 2022)موضوعاتخواندن از و نوشتن در فایل هاعلمگر فرمتنام فایل ها و مسیرهاگرفتن اکسپشن هااهداف آموزشی در پایان این هفته دانشجو می تواند:برنامه ای پایتونی بنویسد که از فایل می خواند یا در ان می نویسد.برنامه ای بنویسد که خطوطی از متن را تبدیل به دیکشنری می کند و برعکس.از مدیریت اکسپشن برای مدیریت خطاهای پایتون اسفاده کند.منابعفصل نهم (بازی واژه، بخش اول) و بخش های 1 تا 5 از فصل چهاردهم (فایل ها) کتاب دوره.-- تکالیف اضافی:بخش های باقیمانده ی فصل چهاردهمSchafer, C. (2016, April 29). Python tutorial: File objects - Reading and writing to files [Video]. YouTube. https://www.youtube.com/watch?v=Uh2ebFW8OYMتکالیفبحث گروهیتوضیح دهید که گرفتن اکسپشن چه کمکی به مدیریت خطاها می کند. سه مثال پایتونی بزنید که در آن ها خطا ایجاد می شود و با بلوک try: except: خطاها را مدیریت کنید. توضیح دهید که در یک پروژه ی بزرگ چطور می توانید با هر خطا برخورد کنید. این توضیحات باید به زبان انگلیسی نوشته شوند نه پایتون.انشانویسیبرنامه ای را که در بخش قبل نوشتید تغییر دهید به طوری که آیتم های دیکشنری را از یک فایل بخواند و دیکشنری وارونه شده را در یک فایل بنویسد. درباره ی موارد زیر توضیح دهید:-- هر آیتم دیکشنری را چطور به عنوان یک رشته ی متنی در فایل فرمت بندی می کنید؟-- چطور هر رشته ی ورودی را به آیتم دیکشنری تبدیل می کنید؟-- چطور هر آیتم دیکشنری وارونه شده را به یک رشته ی متنی برای فایل خروجی تبدیل می کنید؟در فایل ورودی خود حداقل شش آیتم برای دیکشنری داشته باشید. فایل ورودی و خروجی، کد پایتونی و توضیحات لازم را در تکلیف بیاورید.قوانین دورهدر دوره ای که من شرکت کردم، استاد دوره چند قانون را در بخش «اعلامیه ها»ی دوره گذاشته بود. بعضی از این قوانین عمومی و مربوط به کل دوره های دانشگاه مردم هستند اما مورد اول خاص این استاد است:1. از ویکی پدیا استفاده نکنید: استفاده از ویکی پدیا در هر کدام از تکالیف باعث نمره ی صفر در آن تکلیف می شود.2. به بحث های گروهی هم کلاسی تان بازخوردهای معنی دار و مودبانه بدهید. استاد نمرات نظرات نامناسب را کاهش می دهد. همچنین اگر به تکلیفی که به وضوح مشکل دارد، نمره ی 10 دهید، نمره ی خودتان کم می شود.3. منابع مورد استفاده به شیوه ی APA ذکر کنید.4. فایل های ارسالی در تکالیف نباید به هیچ وجه شامل نام شما باشند (چون همتاارزیابی به شکل ناشناس انجام می شود). راهنماهای آفیس و اوپن آفیس در این زمینه کمک کننده هستند.5. تقلب علمی می تواند باعث نمره ی صفر و گزارش به دانشگاه شود. اگر اکثریت متن شما از جایی گرفته شده باشد تقلب علمی است. همچنین استفاده از ایده ای دیگر بدون ذکر منبع آن تقلب علمی است. پیش از ارسال مطالب خود، آن را در سایت های یونی چک و گرامرلی بررسی کنید و مطمئن شوید که تقلب علمی ندارند. تجربه ی شخصی مناین دوره خیلی برای من مفید بود چون پایتون را هدفمند و از پایه آموزش می داد. همچنین در کتاب درسی، نکات ریزی که شاید بعضی از برنامه نویسان حرفه ای نیز ندانند ذکر شده بود. تکالیف کمک می کردند که مطالب در ذهن بنشینند و نوشتن متن های توضیحات (به زبان انگلیسی) برای تقویت زبان مفید بود. من متن های انگلیسی را با کمک گرامرلی تصحیح می کردم (اکانت پرمیوم دانشجویی). آزمون های میان ترم و پایانی تقریبن از همان سوالات خودارزیابی ها بودند. همه ی سوالات چندگزینه ای (دو تا پنج گزینه) بودند و ساده. در خیلی از سوالات خواسته می شد که نتیجه ی اجرای یک کد پایتونی گفته شود. با این که استاد دوره سخت گیر بود و به دلایل مختلف نمرات تکالیف مرا کم می کرد اما در مجموع دوره ی بسیار خوبی بود. نمره ی نهایی من (اگر بعدن تغییری نکند) 92.04 شد که معادل A- (در سیستم نمره دهی حرفی) و 3.67 (در سیستم چهارتایی) است.