این نوشته خلاصه ای از 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 (که در یکی از ویدئوهای اولیه ی دوره معرفی شده بود) استفاده کردم که نرم افزاری سبک و سریع برای نوشتن و اجرای کدهای پایتونی است.
در پایان دوره، دانشجو می تواند:
این دوره مانند دوره های دیگر دانشگاه مردم هشت هفته ای است و در پایان هفته ی هشتم، آزمون نهایی آن برگزار می شود.
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل اول کتاب دوره.
منابع اضافی:
تکالیف
عبارات زیر را در مفسر پایتون بنویسید و خروجی آن را ببینید. خروجی و توضیح آن را در فروم بنویسید. این عبارات را با عبارات کتاب مقایسه کنید و بگویید که چه نکته ای درباره ی تفاوت نسخه های پایتون در این جا وجود دارد:
>>> print 'Hello, World!' >>> 1/2 >>> type(1/2) >>> print(01) >>> 1/(2/3)
بخش اول: اگر بخواهید یک رشته را چاپ کنید و یک یا هر دو علامت نقل قول را فراموش کنید چه اتفاقی می افتد؟ چرا؟ با نوشتن هر کدام از عبارات زیر چه اتفاقی می افتد و چرا؟
a>>> 2++2 >>> 2--2 >>> 2+-2 >>> 2-+2
شروع کردن نمادهای ریاضی با صفر مشکلی ندارد (مثلن در 02). اگر همین کار را در پایتون انجام دهیم چه می شود و چرا؟ اگر دو مقدار را با یک فاصله بین آنها (بدون هیچ عملگری در بین آنها) بنویسیم چه اتفاقی می افتد و چرا؟
بخش دوم: حداقل سه تجربه ی دیگری را که در نوشتن کدهای پایتونی در هنگام مطالعه ی فصل اول کتاب داشته اید بنویسید. کد نوشته شده و خروجی آن را بنویسید و توضیح دهید که چه چیزی یاد گرفته اید.
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل دوم (متغیرها، عبارات و بیان ها) و سوم (توابع) از کتاب دوره.
-- منابع اضافی:
تکالیف
برای هر کدام از موارد زیر یک کد پایتونی بنویسید. کدی از کتاب کپی پیست نکنید. سعی کنید مبتکرانه عمل کنید:
-- مثال 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)
را بنویسید که شعاع دریافت کند و حجم کره را به عنوان خروجی ارائه دهد. این تابع را با سه شعاع متفاوت فراخوانی کنید. کد تابع و ورودی ها و خروجی ها را در تکلیف خود بیاورید.
-- بخش دوم
با توجه به چیزهایی که در این هفته آموختید تابع خودتان را بنویسید. این تابع باید حداقل یک ورودی (آرگومان) دریافت کند. از هیچ منبع خارجی برای نوشتن تابع استفاده نکنید. آوردن کد، ورودی و خروجی و توضیح ویژگی هایی که تابع شما انجام می دهد لازم است.
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل پنجم کتاب دوره (شرط ها و توابع بازگشتی).
-- منابع اضافی:
تکالیف
تفاوت شرط زنجیره ای و شرط تو در تو را توضیح دهید و برای هر کدام مثال بزنید (از مثال های کتاب استفاده نکنید).
شرط تو در تو می تواند خیلی پیچیده شود. راهکار پرهیز از این پیچیدگی را بنویسید. یک مثال از شرط تو در توی عمیق بزنید و بعد آن را با یک شرط تک بازنویسی کنید. نشان دهید که هر دو کد خروجی یکسانی دارند (از مثال های کتاب استفاده نکنید).
-- از بخش 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 داشته باشد. کد برنامه، خروجی آن (به همراه خطای تولیدشده)، توضیح علت ایجاد خطا و راه حل رفع خطا را بفرستید.
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل ششم کتاب دوره (توابع با مقدار بازگشتی).
-- منابع اضافی:
تکالیف
بخش 6.9 کتاب سه احتمال را برای کار نکردن یک تابع مطرح می کند:
-- این سه احتمال را توضیح دهید.
-- از تعریف پیش شرط (precondition) و پس شرط (postcondition) در توضیحات خود استفاده کنید.
-- مثال خودتان از هر احتمال در کد پایتون را بنویسید. کد و خروجی آن را هم در پاسخ بیاورید.
تمرین 6.4 کتاب را با استفاده از توابع بازگشتی و تابع is_divisible انجام دهید. فرض کنید که هر دو ورودی تابع is_power مثبت خوهد بود. دقت کنید که هر عدد مثبتی به توان صفر یک می شود. این قاعده درباره ی خود صفر و یک هم صدق می کند. وقتی تابع is_power خود را نوشتید، این حالات را تست کنید:
print("is_power(10, 2) returns: ", is_power(10, 2)) print("is_power(27, 3) returns: ", is_power(27, 3)) print("is_power(1, 1) returns: ", is_power(1, 1)) print("is_power(10, 1) returns: ", is_power(10, 1)) print("is_power(3, 3) returns: ", 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) را چاپ کنید. این تابع را با دو ورودی متفاوت دیگر هم تست کنید.
-- بخش دوم:
خودتان یک تابع پایتونی بنویسید که محاسباتی را انجام بدهد. تابع را از جایی کپی نکنید. از توسعه افزایشی استفاده کنید و مرحله به مرحله ی کارتان را توضیح دهید. در نهایت خروجی ای را که نشان می دهد تابع شما به درستی کار می کند بنویسید. مرحله به مرحله از کارتان و ورودی و خروجی هر مرحله را بنویسید و همچنین خروجی سه بار فراخوانی تابع تان با سه ورودی مختلف را بنویسید.
-- بخش سوم:
تجربه ی خود از همتاارزیابی را بنویسید. احساس تان درباره ی بازخورد و نمره ای که در این بخش گرفتید چه بوده است؟ فکر می کنید احساس دیگران درباره ی بازخوردهای شما و نمراتی که به آنها داده اید چه بوده است؟
موضوعات
while
و عبارت break
for
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
for
و شرط ها و متدهای رشته ها تفسیر کند.while
تابع بنویسد.for
روی رشته ها عملیات انجام دهد.منابع
فصل هفتم (تکرار) و هشتم (رشته ها) از کتاب دوره.
-- منابع اضافی:
تکالیف
این تکلیف بر اساس تمرین 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- حداقل سه مثال بنویسید که در آنها از قطعه های رشته استفاده شده است. ویژگی های هر کدام را توضیح دهید. مثال ها را خودتان بنویسید و از جایی کپی نکنید.
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل دهم کتاب دوره (لیست ها).
-- منابع اضافی:
تکالیف
با استفاده از دو واژه ی equivalent و identical تفاوت بین objects و values را توضیح دهید. این تفاوت را با استفاده از یک مثال ساخته ی خودتان در پایتون و با استفاده از اپراتور is نشان دهید.
رابطه ی بین object، reference و aliasing را با مثال پایتونی توضیح دهید.
یک تابع پایتونی بسازید که یک لیست به عنوان ورودی می گیرد. مثال خودتان را با مفاهیم argument, parameter, object و reference توضیح دهید.
در همه ی موارد، مثال ها را خودتان بسازید و از جایی کپی پیست نکنید.
-- بخش اول: یک برنامه ی پایتونی با مشخصات زیر بسازید:
--- یک رشته از واژه هایی داشته باشد که با فاصله از هم جدا شده اند. این رشته می تواند فهرستی از اسامی، غذاهای مورد علاقه، میوه ها و... باشد. اما نباید این رشته را از جایی کپی کنید.
--- با استفاده از split این رشته را به لیست تبدیل کنید.
--- سه واژه را از لیست حذف کنید. هر حذف را با یک روش متفاوت پایتونی انجام دهید.
-- بخش دوم: درباره ی مفاهیم مرتبط با لیست ها (که در زیر می آید) مثال های خودتان را بزنید:
--- فهرست های تو در تو
--- عملگر *
--- قطعات لیست
--- عملگر +=
--- فیلتر لیست
--- یکی از عملکردهای لیست که مجاز است اما کار اشتباهی انجام می دهد (کاری که برنامه نویس انتظارش را ندارد).
کد و خروجی برنامه ی خود را در این تکلیف بگذارید.
-- بخش سوم: تجربه ی خود از همتاارزیابی در زمینه ی برنامه نویسی را بنویسید. احساس تان درباره ی بازخورد و نمراتی که در این بخش گرفتید چه بوده است؟ فکر می کنید احساس دیگران درباره ی بازخوردهای شما و نمراتی که به آنها داده اید چه بوده است؟
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل یازدهم (دیکشنری ها) و دوازدهم (چندتایی ها) از کتاب دوره.
-- منابع اضافی:
تکالیف
توضیح دهید که چندتایی ها چطور در اعمال حلقه روی لیست ها و دیکشنری ها می توانند مفید باشند. مثال های خاص خودتان را بزنید. در مثال های خود باید از zip, enumerate, and items استفاده کنید.
کد زیر را در برنامه ی خود بگذارید:
alphabet = "abcdefghijklmnopqrstuvwxyz" test_dups = ["zzz","dog","bookkeeper","subdermatoglyphic","subdermatoglyphics"] test_miss = ["zzz","subdermatoglyphic","the quick brown fox jumps over the lazy dog"] # 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
تغیرداده شده را روی دیکشنری خود اجرا کنید و دیکشنری عادی و وارونه شده را چاپ کنید. کد پایتونی و خروجی آن را در تکلیف بگذارید. همچنین توضیح دهید که این دیکشنری و حالت وارونه شده ی آن به چه درد می خورند.
موضوعات
اهداف آموزشی
در پایان این هفته دانشجو می تواند:
منابع
فصل نهم (بازی واژه، بخش اول) و بخش های 1 تا 5 از فصل چهاردهم (فایل ها) کتاب دوره.
-- تکالیف اضافی:
تکالیف
توضیح دهید که گرفتن اکسپشن چه کمکی به مدیریت خطاها می کند. سه مثال پایتونی بزنید که در آن ها خطا ایجاد می شود و با بلوک try: except:
خطاها را مدیریت کنید. توضیح دهید که در یک پروژه ی بزرگ چطور می توانید با هر خطا برخورد کنید. این توضیحات باید به زبان انگلیسی نوشته شوند نه پایتون.
برنامه ای را که در بخش قبل نوشتید تغییر دهید به طوری که آیتم های دیکشنری را از یک فایل بخواند و دیکشنری وارونه شده را در یک فایل بنویسد. درباره ی موارد زیر توضیح دهید:
-- هر آیتم دیکشنری را چطور به عنوان یک رشته ی متنی در فایل فرمت بندی می کنید؟
-- چطور هر رشته ی ورودی را به آیتم دیکشنری تبدیل می کنید؟
-- چطور هر آیتم دیکشنری وارونه شده را به یک رشته ی متنی برای فایل خروجی تبدیل می کنید؟
در فایل ورودی خود حداقل شش آیتم برای دیکشنری داشته باشید. فایل ورودی و خروجی، کد پایتونی و توضیحات لازم را در تکلیف بیاورید.
در دوره ای که من شرکت کردم، استاد دوره چند قانون را در بخش «اعلامیه ها»ی دوره گذاشته بود. بعضی از این قوانین عمومی و مربوط به کل دوره های دانشگاه مردم هستند اما مورد اول خاص این استاد است:
این دوره خیلی برای من مفید بود چون پایتون را هدفمند و از پایه آموزش می داد. همچنین در کتاب درسی، نکات ریزی که شاید بعضی از برنامه نویسان حرفه ای نیز ندانند ذکر شده بود. تکالیف کمک می کردند که مطالب در ذهن بنشینند و نوشتن متن های توضیحات (به زبان انگلیسی) برای تقویت زبان مفید بود. من متن های انگلیسی را با کمک گرامرلی تصحیح می کردم (اکانت پرمیوم دانشجویی). آزمون های میان ترم و پایانی تقریبن از همان سوالات خودارزیابی ها بودند. همه ی سوالات چندگزینه ای (دو تا پنج گزینه) بودند و ساده. در خیلی از سوالات خواسته می شد که نتیجه ی اجرای یک کد پایتونی گفته شود. با این که استاد دوره سخت گیر بود و به دلایل مختلف نمرات تکالیف مرا کم می کرد اما در مجموع دوره ی بسیار خوبی بود. نمره ی نهایی من (اگر بعدن تغییری نکند) 92.04 شد که معادل A- (در سیستم نمره دهی حرفی) و 3.67 (در سیستم چهارتایی) است.