כתיבת קוד — שיעור 6
Python מרוכז — פונקציות ומודולריות
כל 3 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.
T1 · מתחיל150 נק'~8 דק'debug
תיקון באג — ברירת מחדל בת-שינוי
הפונקציה אמורה להוסיף פריט ל'דלי'; אם לא סופק דלי — להתחיל רשימה חדשה בכל קריאה. אך יש בה המלכודת הקלאסית: ברירת מחדל בת-שינוי [] נוצרת פעם אחת ומשותפת בין כל הקריאות, ולכן פריטים 'זולגים' מקריאה לקריאה. תקן כך שכל קריאה ללא דלי תתחיל רשימה חדשה.
// הקוד השבור לתיקון
def add_item(item, bucket=[]): # באג כאן
bucket.append(item)
return bucketדוגמאות
add_item(1) # קריאה 1 → [1]
add_item(2) # קריאה 2 (נפרדת) → [2]
add_item(3, [9]) → [9, 3]
הפתרון נשמר מקומית אוטומטית.
T2 · בסיסי200 נק'~15 דק'algorithmic
הרכבת פונקציות (compose)
ממש compose(*funcs) שמקבל מספר פונקציות של משתנה יחיד ומחזיר פונקציה חדשה שמפעילה אותן מימין לשמאל: compose(f, g)(x) שקול ל-f(g(x)). ללא ארגומנטים — החזר פונקציית זהות (מחזירה את הקלט כמות שהוא).
דוגמאות
compose(lambda x:x+1, lambda x:x*2)(3) → 7
compose(lambda x:x*2, lambda x:x+1)(3) → 8
compose()(5) → 5
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~25 דק'algorithmic
דקורטור retry(times)
ממש דקורטור עם פרמטר retry(times) שעוטף פונקציה כך שאם היא זורקת חריגה — הוא ינסה שוב, עד times ניסיונות בסך הכול. אם ניסיון הצליח — החזר את ערכו. אם כל הניסיונות נכשלו — זרוק מחדש את החריגה האחרונה. שמור על הערכים המוחזרים והארגומנטים המקוריים (*a, **k).
דוגמאות
פונקציה שנכשלת פעמיים ואז מחזירה 42, עטופה ב-@retry(3) → 42
אותה פונקציה עטופה ב-@retry(2) → זורקת (רק 2 ניסיונות, צריך 3)
הפתרון נשמר מקומית אוטומטית.