امیرحسین مجیری
امیرحسین مجیری
خواندن ۲۴ دقیقه·۳ سال پیش

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

این نوشته خلاصه ای از 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). به جز سایت اصلی پایتون می توان از سایت های زیر هم استفاده کرد. سایت دوم امکان اجرای کدهای پایتون را در محیط ابری و بدون نیاز به نصب فراهم می کند:

من از نرم افزار PyScripter (که در یکی از ویدئوهای اولیه ی دوره معرفی شده بود) استفاده کردم که نرم افزاری سبک و سریع برای نوشتن و اجرای کدهای پایتونی است.

اهداف و نتایج آموزشی

در پایان دوره، دانشجو می تواند:

  1. با استفاده از مفاهیم پایه ی برنامه نویسی، ساختارهای برنامه ی کامپیوتری و رویکردهای برنامه نویسی رویه‌ای، کدنویسی کند.
  2. با استفاده از زبان برنامه نویسی پایتون برنامه های کامپیوتری را برای حل مشکلات کامپیوتری بنویسد.
  3. به شکل مستقل درباره ی زبان های برنامه نویسی تحقیق کند و ویژگی های جدید برنامه نویسی را یاد بگیرد.

زمان بندی دوره

این دوره مانند دوره های دیگر دانشگاه مردم هشت هفته ای است و در پایان هفته ی هشتم، آزمون نهایی آن برگزار می شود.

  1. هفته ی اول: معرفی و مفاهیم پایه
  2. هفته ی دوم: متغیرها، Expressions، Statements و توابع
  3. هفته ی سوم: شرط ها و توابع بازگشتی (recursion)
  4. هفته ی چهارم: توابع و مقادیر بازگشتی (return)
  5. هفته ی پنجم: تکرار (iteration) و رشته ها
  6. هفته ی ششم: لیست ها
  7. هفته ی هفتم: دیکشنری ها و چندتایی ها (tuples)
  8. هفته ی هشتم: فایل ها
  9. هفته ی نهم: آزمون پایانی

جزئیات دروس

هفته ی اول (11 تا 17 نوامبر 2021)

موضوعات

  • مفاهیم پایه ی برنامه نویسی
  • برنامه های کامپیوتری
  • اشکال زدایی (دیباگینگ)
  • خطاها
  • زبان های طبیعی و صوری

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. مفاهیم پایه ی برنامه نویسی را توضیح دهد.
  2. تفاوت بین زبان های سطح بالا و سطح پایین برنامه نویسی را شرح دهد.
  3. تکنیک های اساسی اشکال زدایی را بداند.
  4. محاسباتی ساده در پایتون بنویسد.

منابع

فصل اول کتاب دوره.

منابع اضافی:

تکالیف

  • بحث گروهی

عبارات زیر را در مفسر پایتون بنویسید و خروجی آن را ببینید. خروجی و توضیح آن را در فروم بنویسید. این عبارات را با عبارات کتاب مقایسه کنید و بگویید که چه نکته ای درباره ی تفاوت نسخه های پایتون در این جا وجود دارد:

>>> 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)
  • اشکال زدایی

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. نقش آرگومان ها و پارامترها در توابع را در پایتون بررسی کند.
  2. متغیرها، عملگرها و عبارات را برای انجام محاسبات در پایتون ترکیب کند.
  3. توابع پایتونی بسازد که ورودی (آرگومان) دریافت می کنند.
  4. برنامه های پایتونی با توابع تو در تو (nested) بنویسد.

منابع

فصل دوم (متغیرها، عبارات و بیان ها) و سوم (توابع) از کتاب دوره.

-- منابع اضافی:

تکالیف

  • بحث گروهی

برای هر کدام از موارد زیر یک کد پایتونی بنویسید. کدی از کتاب کپی پیست نکنید. سعی کنید مبتکرانه عمل کنید:

-- مثال 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)
  • دریافت ورودی از صفحه کلید

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. تفاوت بین شرط های زنجیره ای و تو در تو را توضیح دهد.
  2. شرط های تو در تو را با عبارات بولی ساده سازی کند.
  3. شرط زنجیره ای بنویسد.
  4. تابع بازگشتی بنویسد.
  5. برنامه ای بنویسد که از صفحه کلید ورودی دریافت کند.

منابع

فصل پنجم کتاب دوره (شرط ها و توابع بازگشتی).

-- منابع اضافی:

  • فصل چهارم کتاب (بررسی موردی: طراحی رابط کاربری)
  • 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)

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. کدی آزمایشی توسعه دهد که یک تابع را عیب یابی می کند.
  2. از یک تابع بازگشتی برای محاسبه ی یک نتیجه استفاده کند.
  3. تابعی را با استفاده از مفهوم توسعه افزایشی بنویسد.

منابع

فصل ششم کتاب دوره (توابع با مقدار بازگشتی).

-- منابع اضافی:

تکالیف

  • بحث گروهی

بخش 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))

کد برنامه (به همراه کامنت های مورد نیاز) و خروجی آن را پیوست تکلیف کنید. تکلیف بر اساس معیارهای زیر سنجیده می شود:

  1. آیا تکلیف شامل تابع is_divisible از بخش 6.4 کتاب هست؟
  2. آیا برنامه تابع is_power را با دو ورودی پیاده سازی کرده است؟
  3. آیا تابع is_power تابع is_divisible را فراخوانی می کند؟
  4. آیا تابع is_power خودش را به شکل بازگشتی فراخوانی می کند؟
  5. آیا تابع is_power شامل حالت پایه که در آن هر دو ورودی برابر هستند، می شود؟
  6. آیا تابع is_power شامل حالت پایه که در آن ورودی دوم یک است می شود؟
  7. آیا تکلیف شامل خروجی صحیح برای پنج تست گفته شده می شود؟
  • انشانویسی

-- بخش اول:

در بخش 6.2 کتاب درباره ی توسعه ی افزایشی یاد گرفتید. تمرین آخر این بخش را انجام دهید و با استفاده از این روش تابع hypotenuse را برای محاسبه ی وتر مثلث قائم الزاویه بنویسید. بعد از آخرین مرحله ی توسعه، خروجی hypotenuse(3, 4) را چاپ کنید. این تابع را با دو ورودی متفاوت دیگر هم تست کنید.

-- بخش دوم:

خودتان یک تابع پایتونی بنویسید که محاسباتی را انجام بدهد. تابع را از جایی کپی نکنید. از توسعه افزایشی استفاده کنید و مرحله به مرحله ی کارتان را توضیح دهید. در نهایت خروجی ای را که نشان می دهد تابع شما به درستی کار می کند بنویسید. مرحله به مرحله از کارتان و ورودی و خروجی هر مرحله را بنویسید و همچنین خروجی سه بار فراخوانی تابع تان با سه ورودی مختلف را بنویسید.

-- بخش سوم:

تجربه ی خود از همتاارزیابی را بنویسید. احساس تان درباره ی بازخورد و نمره ای که در این بخش گرفتید چه بوده است؟ فکر می کنید احساس دیگران درباره ی بازخوردهای شما و نمراتی که به آنها داده اید چه بوده است؟

هفته ی پنجم (9 تا 15 دسامبر 2021)

موضوعات

  • مقداردهی مجدد و به روزرسانی متغیرها
  • عبارت while و عبارت break
  • الگوریتم ها
  • رشته ها، قطعه های رشته و توابع رشته ها
  • حلقه ی for
  • جستجو و مقایسه ی رشته

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. توابع را با حلقه for و شرط ها و متدهای رشته ها تفسیر کند.
  2. با حلقه های while تابع بنویسد.
  3. با حلقه ی for روی رشته ها عملیات انجام دهد.
  4. از قطعه های رشته در کد استفاده کند.

منابع

فصل هفتم (تکرار) و هشتم (رشته ها) از کتاب دوره.

-- منابع اضافی:

تکالیف

  • بحث گروهی

این تکلیف بر اساس تمرین 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 چاپ کند. در این تکلیف هم کد و هم خروجی را باید آپلود کنید. نمره دهی بر اساس معیارهای زیر انجام می شود:

  1. آیا برنامه ی نوشته شده شامل یک تابع به نام my_sqrt هست که یک ورودی دریافت کند و در آن از حلقه while استفاده شده باشد؟
  2. آیا تابع my_sqrt ورودی x را مقداردهی اولیه می کند و خروجی نهایی را بر می گرداند؟
  3. آیا تابع test_sqrt مقادیر را از 1 تا 25 چاپ می کند؟
  4. آیا تابع test_sqrt مقادیر برگردانده شده از تابع my_sqrt به ازای هر کدام از مقادیر a را چاپ می کند؟
  5. آیا تابع test_sqrt مقادیر درست تابع math.sqrtبه ازای هر کدام از مقادیر a را چاپ می کند؟
  6. آیا تابع test_sqrt مقدار مقایسه بین دو تابع را چاپ می کند؟
  7. آیا تابع 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
  • پاس دادن لیست ها به توابع به عنوان آرگومان

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. مفاهیم object, reference, and aliasing را در پایتون توضیح دهد.
  2. یک پارامتر لیستی را در تابع پایتونی تغییر دهد.
  3. لیست های پایتونی را با اضافه کردن، حذف یا مرتب کردن عناصر تغییر دهد.
  4. از عملگرها و متدهای لیست ها استفاده کند.

منابع

فصل دهم کتاب دوره (لیست ها).

-- منابع اضافی:

تکالیف

  • بحث گروهی

با استفاده از دو واژه ی equivalent و identical تفاوت بین objects و values را توضیح دهید. این تفاوت را با استفاده از یک مثال ساخته ی خودتان در پایتون و با استفاده از اپراتور is نشان دهید.

رابطه ی بین object، reference و aliasing را با مثال پایتونی توضیح دهید.

یک تابع پایتونی بسازید که یک لیست به عنوان ورودی می گیرد. مثال خودتان را با مفاهیم argument, parameter, object و reference توضیح دهید.

در همه ی موارد، مثال ها را خودتان بسازید و از جایی کپی پیست نکنید.

  • انشانویسی

-- بخش اول: یک برنامه ی پایتونی با مشخصات زیر بسازید:

--- یک رشته از واژه هایی داشته باشد که با فاصله از هم جدا شده اند. این رشته می تواند فهرستی از اسامی، غذاهای مورد علاقه، میوه ها و... باشد. اما نباید این رشته را از جایی کپی کنید.

--- با استفاده از split این رشته را به لیست تبدیل کنید.

--- سه واژه را از لیست حذف کنید. هر حذف را با یک روش متفاوت پایتونی انجام دهید.

-- بخش دوم: درباره ی مفاهیم مرتبط با لیست ها (که در زیر می آید) مثال های خودتان را بزنید:

--- فهرست های تو در تو

--- عملگر *

--- قطعات لیست

--- عملگر +=

--- فیلتر لیست

--- یکی از عملکردهای لیست که مجاز است اما کار اشتباهی انجام می دهد (کاری که برنامه نویس انتظارش را ندارد).

کد و خروجی برنامه ی خود را در این تکلیف بگذارید.

-- بخش سوم: تجربه ی خود از همتاارزیابی در زمینه ی برنامه نویسی را بنویسید. احساس تان درباره ی بازخورد و نمراتی که در این بخش گرفتید چه بوده است؟ فکر می کنید احساس دیگران درباره ی بازخوردهای شما و نمراتی که به آنها داده اید چه بوده است؟

هفته ی هفتم (23 تا 29 دسامبر 2021)

موضوعات

  • دیکشنری، نوعی نگاشت است.
  • حلقه ها و دیکشنری ها
  • جستجوی معکوس (reverse lookup)
  • دیکشنری ها و لیست ها
  • متغیرهای جهانی
  • چندتایی ها غیرقابل تغییر هستند.
  • مقداردهی چندتایی ها
  • چندتایی ها به عنوان مقادیر بازگشتی
  • فهرست ها و چندتایی ها
  • دیکشنری ها به عنوان چندتایی

اهداف آموزشی

در پایان این هفته دانشجو می تواند:

  1. کدی برای اعمال تغییر در دیکشنری بنویسد.
  2. متغیرهای جهانی را در توابع تغییر دهد.
  3. چندتایی ها را در حلقه هایی که روی دیکشنری ها و لیست ها زده می شود، ایجاد کند.
  4. از توابع zip و enumerate و همچنین متد items دیکشنری استفاده کند.

منابع

فصل یازدهم (دیکشنری ها) و دوازدهم (چندتایی ها) از کتاب دوره.

-- منابع اضافی:

  • فصل سیزدهم کتاب دوره. مطالعه ی موردی: انتخاب ساختمان داده
  • kjdElectronics. (2017, August 5). Python beginner tutorial 8 - For loop, lists, and dictionaries [Video]. YouTube. https://www.youtube.com/watch?v=bE6mSBNp4YU
  • Simplilearn. (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 که حروف جامانده ی رشته ها از لیست ورودی را بر می گرداند.

کد شما بر اساس معیارهای زیر ارزیابی می شود:

  1. آیا برنامه تابعی به نام has_duplicates دارد که یک رشته دریافت کند و یک مقدار بولی برگرداند؟
  2. آیا تابع has_duplicates تابع histogram را فراخوانی می کند؟
  3. آیا برنامه حلقه ای روی لیستtest_dups اجرا می کند و بر روی رشته های لیست تابع has_duplicate را فراخوانی می کند؟
  4. آیا برنامه به درستی مقادیر تکراری در رشته های لیست test_dups را تشخیص می دهد؟
  5. آیا برنامه تابعی به نام missing_letters دارد که یک رشته دریافت کند و یک رشته برگرداند؟
  6. آیا تابع missing_letters تابع histogram را فراخوانی می کند؟
  7. آیا تابع missing_letters متغیر جهانی alphabet را مستقیمن فراخوانی می کند؟
  8. آیا برنامه حلقه ای روی رشته های لیست test_miss دارد که برای هر رشته تابع missing_letters را فراخوانی کند؟
  9. آیا برنامه به درستی کاراکترهای تکراری رشته های لیست 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. برنامه ای پایتونی بنویسد که از فایل می خواند یا در ان می نویسد.
  2. برنامه ای بنویسد که خطوطی از متن را تبدیل به دیکشنری می کند و برعکس.
  3. از مدیریت اکسپشن برای مدیریت خطاهای پایتون اسفاده کند.

منابع

فصل نهم (بازی واژه، بخش اول) و بخش های 1 تا 5 از فصل چهاردهم (فایل ها) کتاب دوره.

-- تکالیف اضافی:

تکالیف

  • بحث گروهی

توضیح دهید که گرفتن اکسپشن چه کمکی به مدیریت خطاها می کند. سه مثال پایتونی بزنید که در آن ها خطا ایجاد می شود و با بلوک try: except: خطاها را مدیریت کنید. توضیح دهید که در یک پروژه ی بزرگ چطور می توانید با هر خطا برخورد کنید. این توضیحات باید به زبان انگلیسی نوشته شوند نه پایتون.

  • انشانویسی

برنامه ای را که در بخش قبل نوشتید تغییر دهید به طوری که آیتم های دیکشنری را از یک فایل بخواند و دیکشنری وارونه شده را در یک فایل بنویسد. درباره ی موارد زیر توضیح دهید:

-- هر آیتم دیکشنری را چطور به عنوان یک رشته ی متنی در فایل فرمت بندی می کنید؟

-- چطور هر رشته ی ورودی را به آیتم دیکشنری تبدیل می کنید؟

-- چطور هر آیتم دیکشنری وارونه شده را به یک رشته ی متنی برای فایل خروجی تبدیل می کنید؟

در فایل ورودی خود حداقل شش آیتم برای دیکشنری داشته باشید. فایل ورودی و خروجی، کد پایتونی و توضیحات لازم را در تکلیف بیاورید.

قوانین دوره

در دوره ای که من شرکت کردم، استاد دوره چند قانون را در بخش «اعلامیه ها»ی دوره گذاشته بود. بعضی از این قوانین عمومی و مربوط به کل دوره های دانشگاه مردم هستند اما مورد اول خاص این استاد است:

  • 1. از ویکی پدیا استفاده نکنید: استفاده از ویکی پدیا در هر کدام از تکالیف باعث نمره ی صفر در آن تکلیف می شود.
  • 2. به بحث های گروهی هم کلاسی تان بازخوردهای معنی دار و مودبانه بدهید. استاد نمرات نظرات نامناسب را کاهش می دهد. همچنین اگر به تکلیفی که به وضوح مشکل دارد، نمره ی 10 دهید، نمره ی خودتان کم می شود.
  • 3. منابع مورد استفاده به شیوه ی APA ذکر کنید.
  • 4. فایل های ارسالی در تکالیف نباید به هیچ وجه شامل نام شما باشند (چون همتاارزیابی به شکل ناشناس انجام می شود). راهنماهای آفیس و اوپن آفیس در این زمینه کمک کننده هستند.
  • 5. تقلب علمی می تواند باعث نمره ی صفر و گزارش به دانشگاه شود. اگر اکثریت متن شما از جایی گرفته شده باشد تقلب علمی است. همچنین استفاده از ایده ای دیگر بدون ذکر منبع آن تقلب علمی است. پیش از ارسال مطالب خود، آن را در سایت های یونی چک و گرامرلی بررسی کنید و مطمئن شوید که تقلب علمی ندارند.

تجربه ی شخصی من

این دوره خیلی برای من مفید بود چون پایتون را هدفمند و از پایه آموزش می داد. همچنین در کتاب درسی، نکات ریزی که شاید بعضی از برنامه نویسان حرفه ای نیز ندانند ذکر شده بود. تکالیف کمک می کردند که مطالب در ذهن بنشینند و نوشتن متن های توضیحات (به زبان انگلیسی) برای تقویت زبان مفید بود. من متن های انگلیسی را با کمک گرامرلی تصحیح می کردم (اکانت پرمیوم دانشجویی). آزمون های میان ترم و پایانی تقریبن از همان سوالات خودارزیابی ها بودند. همه ی سوالات چندگزینه ای (دو تا پنج گزینه) بودند و ساده. در خیلی از سوالات خواسته می شد که نتیجه ی اجرای یک کد پایتونی گفته شود. با این که استاد دوره سخت گیر بود و به دلایل مختلف نمرات تکالیف مرا کم می کرد اما در مجموع دوره ی بسیار خوبی بود. نمره ی نهایی من (اگر بعدن تغییری نکند) 92.04 شد که معادل A- (در سیستم نمره دهی حرفی) و 3.67 (در سیستم چهارتایی) است.

آموزش آنلاینمبانی برنامه نویسیپایتون
بذارید بهش فکر کنم
شاید از این پست‌ها خوشتان بیاید