پاسخها را با جوابهای خودتان مقایسه کنید و طبق راهنمای انتهای فایل نمره بدهید. «تقریباً درست» هم نمره دارد — دنبال عین جملههای ما نباشید، دنبال درستی مفهوم باشید.
مشاهده سوالات آزمون خودسنجی فصل صفر
تمرین ۱ – مفاهیم پایه
۱. هر دو دنبالهای از مقادیرند، اما list قابلتغییر است (اضافه/حذف/جایگزینی) و tuple تغییرناپذیر. برای مختصات جغرافیایی فروشگاه tuple مناسبتر است: دو مقدار بههمچسبیده که بعد از ساخت نباید دستکاری شوند — تغییرناپذیری اینجا یک محافظ است، نه محدودیت.
۲.
- الف)
set— عضویت بدون تکرار، و تست «آیا این کاربر امروز آمده؟» سریع است. - ب)
list— ترتیب ثبت مهم است و سفارش جدید مدام اضافه میشود. - ج)
dict— هر مشخصه یک نام روشن (کلید) دارد:{"name": ..., "price": ..., "stock": ...}. - د)
tuple— سه مقدار ثابت بههمچسبیده مثل(1370, 7, 14).
۳. print مقدار را فقط روی صفحه نمایش میدهد؛ return مقدار را به فراخواننده برمیگرداند تا در ادامهی برنامه قابلاستفاده باشد. تابعی که return ندارد (یا به آن نمیرسد)، None برمیگرداند.
۴. برچسبی جدید روی همان مقدار. در پایتون متغیرها جعبه نیستند که مقدار داخلشان کپی شود؛ ارجاعاند. اگر مقدار زیرین تغییرپذیر باشد (مثل لیست)، تغییر از طریق y از چشم x هم دیده میشود. (این موضوع در فصل دوم — بخش self — و فصل چهاردهم — حافظه — عمیق باز میشود.)
تمرین ۲ – خواندن کد
۵.
3 mouse
append به انتها اضافه میکند (طول: ۳) و ایندکس از صفر شروع میشود، پس cart[1] یعنی mouse.
۶.
0
3
get("price", 0) چون کلید price وجود ندارد، پیشفرض 0 را برمیگرداند (و خطا نمیدهد). موجودی هم از ۵ به ۳ رسیده.
۷.
180000.0
100000.0
فراخوانی اول از percent پیشفرض (۱۰) استفاده میکند، دومی آن را با ۵۰ جایگزین میکند. (اعشار بهخاطر تقسیم است — تقسیم در پایتون همیشه float میدهد.)
۸.
350
continue یعنی «همین دور را رها کن و برو سراغ بعدی»؛ پس ۴۰۰ (بزرگتر از ۳۰۰) جمع نمیشود: ۱۰۰ + ۲۵۰.
۹.
hello sara
None
سوال کلیدی این آزمون. greet فقط print میکند و return ندارد؛ پس result برابر None است. اگر این را درست جواب دادید، مهمترین دام پیشرویتان را رد کردهاید.
۱۰.
OK
f = shout بدون پرانتز، خود تابع را (نه نتیجهاش را) در f میگذارد؛ حالا f نام دیگری برای همان تابع است. توابع در پایتون شیءاند — این ایده در فصل پنجم (دکوراتورها) ستاره میشود.
تمرین ۳ – نوشتن کد
۱۱.
def is_valid_password(password):
return len(password) >= 8راه دیگر: با if/else هم درست است، اما برگرداندن مستقیم نتیجهی مقایسه کوتاهتر و رایجتر است — عبارت len(password) >= 8 خودش True/False است.
۱۲.
def count_paid(orders):
count = 0
for order in orders:
if order["paid"]:
count += 1
return countراه دیگر (پیشرفتهتر):
def count_paid(orders):
return sum(1 for order in orders if order["paid"])اگر نسخهی دوم به ذهنتان رسید عالی است، ولی برای این دوره نسخهی اول کاملاً کافی است.
۱۳.
def describe_user(username, role="member"):
return f"{username} ({role})"
print(describe_user("ali", "admin")) # ali (admin)
print(describe_user("sara")) # sara (member)تمرین ۴ – خواندن Traceback
۱۴.
- الف)
ZeroDivisionError— تلاش برای تقسیم بر صفر؛ یعنیcountصفر بوده. - ب) فایل
app.py، خط ۷، درون تابعshow_report. - ج) از خط ۱۲ همان فایل (سطح اصلی برنامه) با فراخوانی
show_report(sales).
اگر پاسخها را از خط آخر Traceback شروع کردید و بالا آمدید، مهارت را درست بهکار بردهاید.
۱۵. خطا KeyError: 'email' است: کلید email در دیکشنری وجود ندارد. دو راه رفع: قبل از دسترسی وجودش را بررسی کنید (if "email" in user:) یا از user.get("email", "unknown") استفاده کنید که بهجای خطا، مقدار پیشفرض میدهد.
راهنمای نمرهگذاری
به هر سوال که مفهومش را درست جواب دادهاید ۱ نمره بدهید (سوالهای چندقسمتی: اگر بیش از نیمی از قسمتها درست بود، ۱ نمره). جمع کل از ۱۵:
| نمره | وضعیت | توصیه |
|---|---|---|
| ۱۲ تا ۱۵ | آمادهاید | مستقیم بروید فصل اول. |
| ۸ تا ۱۱ | تقریباً آماده | فصل صفر را یکبار با تایپ همهی کدها بخوانید، مخصوصاً بخشهایی که غلط داشتید؛ بعد شروع کنید. |
| کمتر از ۸ | هنوز زود است | یکی دو هفته با مقدمات پایتون تمرین کنید (متغیرها، لیست/دیکشنری، توابع) و دوباره همین آزمون را بدهید. عجله نکنید — این دوره جایی نمیرود. |
یک نکتهی دلگرمکننده: سوالهای ۳، ۹ و ۱۰ مهمترینهای این آزمون بودند. اگر آن سه را درست جواب دادهاید، سختترین بدفهمیهای مسیر را ندارید؛ بقیه با تمرین حل میشود.