שאלות ופתרונות

חלק I — הבנת קוד: שאלות רב־ברירה

שאלה 1

מה יהיה הפלט של הקוד הבא?

def calc(n):
    if n <= 0:
        return 0
    return n + calc(n - 2)

print(calc(5))
  1. א. 9
  2. ב. 6
  3. ג. 5
  4. ד. 15
  5. ה. 0

פתרון

א. 9

שאלה 2

מה יהיה הפלט של הקוד הבא?

d = {"x": 3, "y": 8, "z": 5}
total = 0
for key in d:
    if d[key] > 4:
        total = total + d[key]

print(total)
  1. א. 8
  2. ב. 13
  3. ג. 5
  4. ד. 16
  5. ה. 0

פתרון

ב. 13

שאלה 3

מה יהיה הפלט של הקוד הבא?

text = "Python"
print(text[1:5:2])
  1. א. "yt"
  2. ב. "yh"
  3. ג. "Pto"
  4. ד. "yth"
  5. ה. "Pyhn"

פתרון

ב. "yh"

שאלה 4

מה יהיה הפלט של הקוד הבא?

x = 1
total = 0
while x < 5:
    total = total + x
    x = x + 2

print(total)
  1. א. 3
  2. ב. 4
  3. ג. 6
  4. ד. 9
  5. ה. 1

פתרון

ב. 4

שאלה 5

מה יהיה הפלט של הקוד הבא?

def rises(lst):
    count = 0
    for i in range(1, len(lst)):
        if lst[i] > lst[i - 1]:
            count = count + 1
    return count

print(rises([4, 4, 7, 2, 5]))
  1. א. 0
  2. ב. 1
  3. ג. 2
  4. ד. 3
  5. ה. 4

פתרון

ג. 2

חלק II — הבנת קוד: שאלות פתוחות

בכל שאלה משתמשים בנתונים המקוריים הבאים:

students = ["Noa", "Lior", "Maya", "Omer", "Dana"]
grades = [82, 95, 76, 88, 95]
hours = [3, 5, 2, 4, 5]
projects = [2, 4, 1, 3, 4]

שאלה 1

מהו הפלט המדויק של קטע הקוד הבא?

if grades[1] == grades[-1]:
    print(students[1] + " & " + students[-1])
else:
    print("Different")

פתרון

Lior & Dana

שאלה 2

מהו הפלט המדויק של קטע הקוד הבא?

total = 0
for i in range(len(hours)):
    if projects[i] >= 3:
        total = total + hours[i]

print(total)

פתרון

14

שאלה 3

מהו הפלט המדויק של קטע הקוד הבא?

letters = []
for i in [4, 0, 2]:
    letters = letters + [students[i][0]]

print(letters)

פתרון

['D', 'N', 'M']

שאלה 4

מהו הפלט המדויק של קטע הקוד הבא?

i = 1
while i < len(projects):
    projects[i] = projects[i - 1] + 1
    i = i + 1

print(projects)

פתרון

[2, 3, 4, 5, 6]

שאלה 5

מהו הפלט המדויק של קטע הקוד הבא?

result = {}
for i in range(len(students)):
    if grades[i] >= 90:
        result[students[i]] = projects[i]

print(result)

פתרון

{'Lior': 4, 'Dana': 4}

חלק III — השלמת קוד

שאלה 1

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

def names_above(score_dict, minimum):
    result = []
    for name in ____________ (1):
        if score_dict[name] >= ____________ (2):
            result = result + [name]
    return result

print(names_above({"Noa": 72, "Lior": 91, "Maya": 84}, 80))
# ["Lior", "Maya"]

פתרון

def names_above(score_dict, minimum):
    result = []
    for name in score_dict.keys():
        if score_dict[name] >= minimum:
            result = result + [name]
    return result

שאלה 2

הפונקציה running_max מקבלת רשימה לא ריקה של מספרים. היא מחזירה רשימה חדשה שבה כל איבר הוא המספר הגדול ביותר שנראה עד אותו מקום, משמאל לימין. לדוגמה, עבור הרשימה [3, 1, 5, 4] מוחזרת הרשימה [3, 3, 5, 5]. השלימו את המקומות המסומנים.

def running_max(lst):
    current = lst[0]
    result = []
    for i in range(____________ (3), len(lst)):
        if lst[i] > current:
            current = ____________ (4)
        result = result + [____________ (5)]
    return result

פתרון

def running_max(lst):
    current = lst[0]
    result = []
    for i in range(0, len(lst)):
        if lst[i] > current:
            current = lst[i]
        result = result + [current]
    return result

חלק IV — כתיבת קוד

שאלה 1

דוח קניות

בחנות נשמר מילון בשם prices, שבו שמור המחיר של יחידה אחת מכל מוצר, ורשימה בשם cart, שבה כל הופעה של מוצר מייצגת יחידה אחת שנקנתה.

כתבו פונקציה בשם shopping_report(prices, cart) אשר:

  1. יוצרת מילון כמויות לכל המוצרים שנקנו.
  2. מחשבת את המחיר הכולל לפני ההנחה ושומרת אותו בשם subtotal.
  3. אם subtotal גדול או שווה ל־50, מחשבת הנחה של 10%; אחרת ההנחה היא 0.
  4. מחשבת את המחיר הסופי לאחר ההנחה.
  5. מוצאת את המוצר שנקנה במספר היחידות הגדול ביותר. במקרה של שוויון יש לבחור את המוצר שהופיע ראשון ברשימה cart.
  6. מחזירה מילון עם המפתחות "quantities", "subtotal", "discount", "total", "most_bought".

אפשר להניח שהרשימה אינה ריקה, שכל מוצר המופיע ב־cart קיים במילון prices, ושכל המחירים חיוביים.

prices = {
    "milk": 7,
    "bread": 12,
    "coffee": 25,
    "apples": 5
}

cart = ["milk", "bread", "milk", "coffee", "apples", "milk"]

פתרון

def shopping_report(prices, cart):
    quantities = {}
    subtotal = 0

    for item in cart:
        if item in quantities:
            quantities[item] = quantities[item] + 1
        else:
            quantities[item] = 1
        subtotal = subtotal + prices[item]

    most_bought = cart[0]
    for item in cart:
        if quantities[item] > quantities[most_bought]:
            most_bought = item

    if subtotal >= 50:
        discount = subtotal / 10
    else:
        discount = 0

    total = subtotal - discount

    return {
        "quantities": quantities,
        "subtotal": subtotal,
        "discount": discount,
        "total": total,
        "most_bought": most_bought
    }

עבור נתוני הדוגמה:

{
    "quantities": {"milk": 3, "bread": 1, "coffee": 1, "apples": 1},
    "subtotal": 63,
    "discount": 6.3,
    "total": 56.7,
    "most_bought": "milk"
}