מבחן Python לגאמא: 12 שאלות מעקב קוד

מאת ארז ברזאני · תרגול מקורי של GammaCyber

לפני הפעלת Python, נסו לחזות את הערך או הפלט וכתבו משפט שמסביר אותו. התרגול המקורי מתמקד בשיתוף אובייקטים, לולאות, scope וחריגות; הפתרונות מתייחסים ל־Python 3.

לעקוב אחרי אובייקטים

שמות ב־Python נקשרים לאובייקטים. השמה לרשימה אינה מעתיקה אותה; חיתוך מלא יוצר רשימה חדשה רדודה. לכן בטבלת המעקב חשוב לרשום מתי שני שמות מצביעים לאותו אובייקט ומתי נוצר אובייקט חדש.

דוגמה: alias לעומת העתקה

אחרי a=[1,2] ו־b=a, הפעלה של b.append(3) משנה את הרשימה המשותפת. לעומת זאת, b=a[:] יוצר רשימה חיצונית חדשה. גם בהעתקה רדודה איברים שהם רשימות יכולים עדיין להיות משותפים, ולכן בודקים את עומק מבנה הנתונים.

תרגול עצמאי עם הסברים

נסו לענות לפני פתיחת ההסבר. אפשר לעבוד ללא שעון או לבחור זמן אימון משלכם.

שאלה 1: מה מודפס?

a=[1,2]
b=a
b.append(3)
print(a)
  1. [1, 2, 3]
  2. [1, 2]
  3. [3]
תשובה והסבר

[1, 2, 3]: a ו־b קשורים לאותה רשימה.

שאלה 2: מה מודפס?

a=[1,2]
b=a[:]
b.append(3)
print(a)
  1. [1, 2, 3]
  2. [1, 2]
  3. None
תשובה והסבר

[1, 2]: חיתוך מלא יוצר רשימה חיצונית חדשה.

שאלה 3: מה תוצאת list(range(2,7,2))?

  1. [2,4,6]
  2. [2,4,6,7]
  3. [2,3,4,5,6]
תשובה והסבר

[2,4,6]: הגבול העליון אינו נכלל והצעד הוא 2.

שאלה 4: מה מודפס?

x=2
def f():
    x=9
f()
print(x)
  1. 2
  2. 9
  3. שגיאה
תשובה והסבר

2: ההשמה בתוך f יוצרת שם מקומי ואינה משנה את x שבחוץ.

שאלה 5: מה מודפס?

print([x*x for x in range(3)])
  1. [0, 1, 4]
  2. [0, 1, 2]
  3. [1, 4, 9]
תשובה והסבר

[0, 1, 4]: range(3) מספק 0,1,2; כל איבר מועלה בריבוע.

שאלה 6: מה מוחזר מפונקציה ללא return מפורש?

  1. 0
  2. None
  3. רשימה ריקה
תשובה והסבר

None: סיום גוף פונקציה ללא return עם ערך מחזיר None.

שאלה 7: מה התוצאה?

7/2
  1. 2
  2. 3
  3. 3.5
תשובה והסבר

3.5: / מחזיר מנה; // הוא חילוק רצפה.

שאלה 8: מה תוצאת len(set([1,1,2]))?

  1. 2
  2. 3
  3. 1
תשובה והסבר

2: set מכיל ערכים ייחודיים: 1 ו־2.

שאלה 9: מה d.get("b",0) מחזיר?

d={"a":1}
  1. KeyError
  2. 0
  3. None
תשובה והסבר

0: get מחזיר את ברירת המחדל כשהמפתח אינו קיים.

שאלה 10: איזו חריגה נוצרת?

int("abc")
  1. ValueError
  2. IndexError
  3. ZeroDivisionError
תשובה והסבר

ValueError: המחרוזת אינה ייצוג של מספר שלם.

שאלה 11: מה מודפס?

def f(a=[]):
    a.append(1)
    return a
print(f())
print(f())
  1. [1] [1]
  2. [1] [1, 1]
  3. [] []
תשובה והסבר

[1] [1, 1]: ברירת המחדל נבנית פעם אחת בעת הגדרת הפונקציה. מומלץ להשתמש ב־None וליצור רשימה בגוף הפונקציה.

שאלה 12: מה מודפס?

def f():
    try:
        return 2
    finally:
        pass
print(f())
  1. 1
  2. 2
  3. 3
תשובה והסבר

2: finally רץ לאחר try; הוא אינו מבטל כאן את חישוב הערך.

הכפתור מסמן סיום לפי הדיווח שלכם; פתיחת פתרון אינה בדיקת ידע.

הצעד הבא בלמידה

בחרו עיקרון אחד שעדיין לא ברור, חזרו לדוגמה ונסו להסביר אותה במילים שלכם.

לשיעור הקשור בקורסלמפת הקורס וחלוקת התוכן

המשאבים בעמוד הזה פתוחים. חלק משיעורי הקורס זמינים בתצוגה מקדימה, וגישה מלאה בתשלום.

להמשך תרגול

מקורות טכניים וגבולות התרגול

המקורות מסבירים טכנולוגיה. הם אינם אסמכתה למבנה מיון צבאי. התוכן כאן עצמאי; הנחיות הזימון האישי הן הקובעות. מצאתם שגיאה? כתבו לנו.