py_course · תרגול מרכז — מהדורה מורחבת

תרגול מקיף — מיסודות Python ועד if / else

חוברת תרגול נלווית לשיעורים, בסדר עולה של קושי בכל יחידה (קל → בינוני → מאתגר). מכסה את כל החומר שנלמד עד כה — כולל if ו-else — בלי elif, שנלמד בהמשך.

יחידה 0 · מבוא יחידה 1 · print יחידה 2 · משתנים וטיפוסים יחידה 3 · אופרטורים יחידה 4 · שמות וקוד נקי יחידה 5 · קלט ומחרוזות יחידה 6 · if / else
89 שאלות בסך הכול · כל יחידה: תזכורת קצרה + קל → בינוני → מאתגר · מפתח תשובות בסוף החוברת
0

מבוא לתכנות ול-Python

8 שאלות

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

  1. 1מה ההבדל בין חומרה לתוכנה? תנו דוגמה אחת לכל אחת.קל
  2. 2מה ההבדל בין שפה מתורגמת (interpreted, כמו Python) לשפה מהודרת (compiled, כמו C)?קל
  3. 3נסחו במשפט אחד מה זה אלגוריתם — ותנו דוגמה מחיי היומיום שאינה קשורה למחשב.בינוני
  4. 4מה ההבדל בין קוד המקור שאנחנו כותבים לבין שפת מכונה שהמעבד באמת מריץ?בינוני
  5. 5מה זה "באג" (bug) בתכנות, במילים פשוטות? האם באג תמיד גורם לתוכנית לקרוס?קל
  6. 6מה ההבדל בין קוד מקור (source code) לבין תוכנית מורצת (executable)?קל
  7. 7תנו שתי דוגמאות לתחומים בעולם האמיתי שבהם נעשה שימוש נרחב ב-Python.בינוני
  8. 8למה קוד קריא (readable) חשוב, גם אם התוכנית כבר עובדת נכון?בינוני
1

התוכנית הראשונה: print, מחרוזות והערות

14 שאלות
תזכורת
  • print(...) מדפיסה למסך את מה שבתוך הסוגריים.
  • טקסט חייב מרכאות " " או ' ' — בלעדיהן זו שגיאת תחביר.
  • \n יוצר שורה חדשה בתוך מחרוזת, \t יוצר טאב.
  • # הערה — כל מה שאחרי # באותה שורה, Python מתעלמת ממנו.
  • Python רגישה לאותיות רישיות: print חייב אותיות קטנות בדיוק.
  1. 1מה יודפס: print("שלום")?קל
  2. 2מה ההבדל בין print(7) לבין print("7")?קל
  3. 3כתבו תוכנית שמדפיסה שתי שורות טקסט לבחירתכם, בעזרת שני print נפרדים.קל
  4. 4מה יודפס: print('Hello') (עם גרשיים בודדים)?קל
  5. 5מה היתרון בשימוש במרכאות משולשות """...""" לעומת שרשור כמה \n בתוך מחרוזת רגילה?קל
  6. 6מה בדיוק יודפס, שורה אחר שורה?
    print("א")
    print()
    print("ב")
    בינוני
  7. 7מה ההבדל בין \n לבין \t בתוך מחרוזת?בינוני
  8. 8כתבו שורת print יחידה שמדפיסה "שלום" ו-"עולם" בשתי שורות נפרדות, בעזרת \n בלבד (בלי print נוסף).בינוני
  9. 9מה מדפיס print("א", "ב", "ג")? שימו לב לרווחים.בינוני
  10. 10מה ההבדל בין print("5+3") לבין print(5+3)? מה מדפיס כל אחד?בינוני
  11. 11איתור באג: מצאו ותקנו את השגיאה בשורה print('אני אוהב'ת ללמוד').מאתגר
  12. 12נחשו לפני שמריצים — מה יודפס בכל שורה, ואיפה תתקבל שגיאה?
    print("מספר:", 5)
    print("מספר: " + 5)
    מאתגר
  13. 13איתור באג: מה בדיוק תהיה השגיאה, ולמה?
    Print("Hello")
    מאתגר
  14. 14נחשו לפני שמריצים: מה יקרה בהרצת השורה הבאה (שימו לב, אין \n ואין מרכאות משולשות)?
    print("שורה 1
    שורה 2")
    מאתגר
2

משתנים וטיפוסי נתונים

14 שאלות
תזכורת
  • משתנה נוצר בהצבה: name = "דנה". שם המשתנה תמיד משמאל ל-=.
  • ארבעה טיפוסים בסיסיים: int, float, str, bool. בודקים עם type().
  • Python היא שפה עם הקלדה דינמית — אותו משתנה יכול לקבל ערך מטיפוס אחר בהמשך.
  • Python רגישה לאותיות רישיות: Score ו-score הם שני משתנים שונים.
  • שימוש במשתנה שלא הוגדר קודם גורם ל-NameError.
  1. 1מה הטיפוס של כל אחד: 10, "10", 10.5, True?קל
  2. 2צרו משתנה בשם num_of_pets עם מספר לבחירתכם, והדפיסו אותו ואת type() שלו.קל
  3. 3מה ההבדל בין x = 5 לבין x == 5?קל
  4. 4צרו משתנה is_raining מסוג bool, והדפיסו אותו יחד עם type() שלו.קל
  5. 5מה ההבדל, מבחינת המוסכמה בכתיבה, בין קבוע כמו MAX_SCORE = 100 לבין משתנה רגיל כמו score = 0?קל
  6. 6טבלת מעקב (trace): בלי להריץ — מה יודפס?
    x = 4
    y = x
    x = 9
    print(x, y)
    בינוני
  7. 7איתור באג: Height = 1.75 ואז print(height) — לא עובד. מה הבעיה, ואיך מתקנים?בינוני
  8. 8מהי "הקלדה דינמית" (dynamic typing)? הדגימו עם משתנה יחיד שמחליף טיפוס פעמיים לאורך תוכנית קצרה.בינוני
  9. 9מה יקרה בהרצת השורה print(total) כאשר total עדיין לא הוגדר בשום מקום קודם בתוכנית? איזו שגיאה מתקבלת?בינוני
  10. 10בהינתן x = 5, מה הטיפוס של x? ולאחר ההרצה x = x / 2 — מה הטיפוס שלו עכשיו?בינוני
  11. 11טבלת מעקב: בלי להריץ — מה יודפס?
    a = 3
    b = a
    a = a + 2
    b = b + 1
    print(a, b)
    מאתגר
  12. 12בנו "פרופיל אישי" עם ארבעה משתנים מארבעה טיפוסים שונים (name, age, height, is_student) והדפיסו את כולם עם תוויות ברורות.מאתגר
  13. 13טבלת מעקב: בלי להריץ — מה יודפס בכל אחד משני ה-print?
    score = 70
    grade = "עובר"
    score = score + 20
    print(score, grade)
    grade = "מצטיין"
    print(score, grade)
    מאתגר
  14. 14כתבו תוכנית עם שני משתנים a ו-b, והחליפו ביניהם ערכים בעזרת משתנה עזר שלישי temp, כך שבסוף a יקבל את הערך שהיה ל-b ולהפך. הדפיסו את שניהם לפני ואחרי ההחלפה.מאתגר
3

אופרטורים וביטויים

14 שאלות
תזכורת
  • אריתמטיקה בסיסית: + - * /. חילוק / תמיד מחזיר float.
  • // חילוק שלם (כמה פעמים שלמות), % שארית, ** חזקה.
  • סדר פעולות: ** לפני * / // % לפני + -. סוגריים תמיד ראשונים.
  • בין אופרטורים באותה רמת עדיפות: רוב האופרטורים נבדקים משמאל לימין, חוץ מ-** שהוא מימין לשמאל.
  1. 1מה מחזיר 7 // 2? ומה מחזיר 7 % 2?קל
  2. 2מה הטיפוס של התוצאה של 6 / 2? (שימו לב, גם אם היא "עגולה")קל
  3. 3חשבו על דף, בלי מחשב: 2 ** 3 + 1. אחר כך בדקו ב-Python.קל
  4. 4מה מחזיר 15 % 4? ומה מחזיר 15 // 4?קל
  5. 5מה הטיפוס של 5 ** 2? ומה הטיפוס של 5 ** 2.0?קל
  6. 6נחשו לפני שמריצים: מה מדפיס print(2 + 3 * 4)?בינוני
  7. 7הוסיפו סוגריים לביטוי 2 + 3 * 4 כך שהתוצאה תהיה 20.בינוני
  8. 8איתור באג: המטרה היא לחשב ממוצע של שלושה מספרים, אך יש טעות: avg = 10 + 20 + 30 / 3. תקנו, והסבירו למה המקור שגוי.בינוני
  9. 9נחשו: מה תדפיס השורה הבאה, ולפי איזה כלל (הקשר בין אופרטורים)?
    print(10 - 3 - 2)
    בינוני
  10. 10מה ההבדל בין 2 ** 3 ** 2 (בלי סוגריים) לבין (2 ** 3) ** 2? חשבו את שתי התוצאות בעצמכם.בינוני
  11. 11טבלת מעקב: בלי להריץ — מה יודפס?
    x = 10 / 4
    y = 10 // 4
    z = 10 % 4
    print(x, y, z)
    מאתגר
  12. 12בהינתן total_seconds = 400, כתבו קוד שמחשב כמה דקות שלמות וכמה שניות נשארות (בעזרת // ו-%), והדפיסו את שניהם עם תוויות.מאתגר
  13. 13טבלת מעקב (סדר עדיפויות מלא): בלי להריץ — מה יודפס, ומה הטיפוס של התוצאה?
    result = 2 + 3 * 4 - 6 / 2
    print(result)
    מאתגר
  14. 14כתבו ביטוי יחיד (בלי if) שמחשב, בהינתן n = 47, האם n מתחלק ב-5 בלי שארית — התוצאה עצמה תהיה True או False. השתמשו ב-% ובאופרטור יחסי.מאתגר
4

מתן שמות וקוד נקי

11 שאלות
תזכורת
  • שם משתנה: אותיות, ספרות, _ בלבד, ואסור להתחיל בספרה.
  • המוסכמה של Python היא snake_case — אותיות קטנות עם קו תחתון בין מילים.
  • אסור להשתמש במילה שמורה (כמו if, class, return, True) כשם משתנה.
  1. 1אילו מהשמות הבאים חוקיים בפייתון? my_score, 2nd_place, user-name, _temp, Total$.קל
  2. 2כתבו מחדש בסגנון snake_case: totalPrice, NumOfItems.קל
  3. 3מה קורה אם ננסה להשתמש במילה השמורה if כשם משתנה, למשל if = 5?קל
  4. 4מה ההבדל בין שם משתנה בעל משמעות (כמו age) לשם לא ברור (כמו x), מבחינת תחזוקת קוד בעתיד?קל
  5. 5מה ההבדל בין score ל-Score בפייתון?בינוני
  6. 6הציעו שם משתנה ברור וקצר, במקום x, למשתנה ששומר "כמה ניסיונות נותרו למשתמש".בינוני
  7. 7בדקו: האם אפשר להשתמש במילה True כשם משתנה? נסו בעצמכם my_true = 5 מול True = 5 — מה ההבדל, ולמה?בינוני
  8. 8כתבו הערת שורה בודדת שמסבירה את מטרת השורה: tax = price * 0.17.בינוני
  9. 9איתור באג משולש: מצאו ותקנו את כל השגיאות:
    1age = 20
    Total-Score = 90
    class = "A"
    מאתגר
  10. 10שכתבו מחדש עם שמות ברורים והערה מתאימה (הניחו שמדובר בחישוב שטח מלבן):
    a = 5
    b = 3
    c = a * b
    מאתגר
  11. 11איתור באג: מה הבעיה בקוד הבא, ואיך מתקנים?
    2nd = "כן"
    print(2nd)
    מאתגר
5

קלט, פלט ומחרוזות

14 שאלות
תזכורת
  • input() מקבלת קלט מהמשתמש, ותמיד מחזירה str — גם אם הוקלד מספר.
  • int() / float() ממירים מחרוזת למספר; str() ממיר מספר למחרוזת.
  • למחרוזות: הצמדה +, חזרה *, אורך len(), וגישה לתו בעזרת אינדקס — s[0], s[-1].
  1. 1מה מחזירה input() תמיד, גם אם המשתמש מקליד מספר?קל
  2. 2מה ההבדל בין int(input(...)) לבין float(input(...))?קל
  3. 3מה מדפיס len("שלום")?קל
  4. 4בהינתן s = "Python", מה מחזיר s[2]? ומה מחזיר s[-3]?קל
  5. 5מה ההבדל בין str(5) לבין "5", אם שתיהן בסוף מייצרות את אותה מחרוזת "5"?קל
  6. 6איתור באג: התוכנית קורסת. מצאו את הבעיה ותקנו:
    age = input("גיל: ")
    print("בעוד 5 שנים תהיה בן " + age + 5)
    בינוני
  7. 7מה מחזיר "ab" * 3?בינוני
  8. 8בהינתן name = "דניאל", מה מחזיר name[0]? ומה מחזיר name[-1]?בינוני
  9. 9נחשו לפני שמריצים: מה יודפס?
    x = 5
    y = "5"
    print(x == y)
    בינוני
  10. 10כתבו קוד שמבקש מהמשתמש מספר שלם, ומדפיס אותו כפול 2 כמספר אמיתי (לא כמחרוזת חוזרת פעמיים).בינוני
  11. 11טבלת מעקב: בלי להריץ — מה יודפס בכל שורה?
    first = "12"
    second = "3"
    print(first + second)
    print(int(first) + int(second))
    מאתגר
  12. 12כתבו תוכנית שמבקשת מהמשתמש שתי מילים, מדפיסה אותן מחוברות עם רווח ביניהן, ולצידן את האורך הכולל של המחרוזת המחוברת (len()).מאתגר
  13. 13טבלת מעקב: בלי להריץ — מה יודפס בכל אחד משלושת ה-print?
    word = "coding"
    print(len(word))
    word = word + "!"
    print(word)
    print(len(word))
    מאתגר
  14. 14איתור באג: המטרה היא לחשב ולהדפיס את סכום שני מספרים שהמשתמש מזין, אך מתקבלת תוצאה שגויה — לדוגמה, בעבור הקלט 2 ו-3 מתקבל "23" ולא 5:
    a = input("מספר ראשון: ")
    b = input("מספר שני: ")
    print(a + b)
    מצאו את הבעיה ותקנו.
    מאתגר
6

ביטויים בוליאניים ו-if / else (בלי elif)

14 שאלות
תזכורת
  • אופרטורים יחסיים == != > < >= <= מחזירים תמיד ערך בוליאני.
  • = הצבה, == השוואה — לא לבלבל.
  • if תנאי: ואז שורה מוזחת — הגוף רץ רק אם התנאי True.
  • else: רץ בדיוק כשהתנאי של ה-if False. תמיד בדיוק אחד מהבלוקים ירוץ.
  1. 1מה מחזיר 8 == 8? ומה מחזיר 8 == "8"? (שימו לב לטיפוסים)קל
  2. 2מה ההבדל בין = ל-==?קל
  3. 3בהינתן משתנה age, כתבו if שמדפיס "בגיר/ה" אם age >= 18.קל
  4. 4מה מחזיר הביטוי 10 != 10? ומה מחזיר 10 != 9?קל
  5. 5בהינתן משתנה בוליאני is_member, כתבו if שמדפיס "חבר מועדון" אם is_member הוא True — בלי לכתוב == True במפורש.קל
  6. 6טבלת מעקב: בלי להריץ — מה יודפס?
    n = 7
    if n % 2 == 0:
        print("זוגי")
    else:
        print("אי-זוגי")
    בינוני
  7. 7איתור באג: מה השגיאה כאן, ואיך מתקנים?
    if x > 0:
    print("חיובי")
    בינוני
  8. 8כתבו if-else שמדפיס "עבר/ה" אם grade >= 60, ואחרת "נכשל/ה".בינוני
  9. 9טבלת מעקב: בלי להריץ — מה יודפס?
    x = 12
    if x > 10:
        x = x - 5
    else:
        x = x + 5
    print(x)
    בינוני
  10. 10מה ההבדל בין שני הקטעים הבאים? האם הם תמיד יתנהגו אותו דבר?
    קטע 1:
    if age >= 18:
        print("בגיר")
    if age < 18:
        print("קטין")
    קטע 2:
    if age >= 18:
        print("בגיר")
    else:
        print("קטין")
    בינוני
  11. 11טבלת מעקב עם מספר משתנים: בלי להריץ — מה יודפס, שורה אחר שורה?
    balance = 500
    withdrawal = 700
    if withdrawal <= balance:
        balance = balance - withdrawal
        print("משיכה בוצעה")
    else:
        print("אין מספיק יתרה")
    print("היתרה הסופית:", balance)
    מאתגר
  12. 12כתבו תוכנית שמקבלת שני מספרים מהמשתמש, ומדפיסה איזה מהם גדול יותר — או שהם שווים. מותר להשתמש רק ב-if ו-else (בלי elif) — כלומר, יהיה עליכם "לקנן" if נוסף בתוך ה-else.מאתגר
  13. 13טבלת מעקב עם מספר משתנים: בלי להריץ — מה יודפס, שורה אחר שורה?
    stock = 10
    sold = 3
    if sold <= stock:
        stock = stock - sold
        print("המכירה בוצעה")
    else:
        print("אין מספיק מלאי")
    stock = stock + 2
    print("מלאי סופי:", stock)
    מאתגר
  14. 14כתבו תוכנית שמבקשת מהמשתמש שם משתמש וסיסמה, ומדפיסה "התחברות הצליחה" רק אם שני הקלטים תואמים בדיוק לערכים קבועים שהגדרתם מראש בקוד (למשל username = "admin", password = "1234"), אחרת "פרטים שגויים". מותר להשתמש רק ב-if/else (אפשר לקנן if בתוך if אם צריך, בלי elif).מאתגר

שימו לב: עדיין לא למדנו elif. כשיש צורך ביותר משתי אפשרויות, הפתרון הזמני הוא if מקונן בתוך else — מסורבל יותר, אבל עובד. נראה למה elif פותר את זה ביחידה הבאה.

מפתח תשובות

רק לשאלות עם תשובה חד-משמעית (ניחוש פלט, איתור באג, שאלות ידע). משימות "כתבו תוכנית" הן פתוחות ואין להן פתרון יחיד — בדקו אותן בעצמכם על ידי הרצה.

יחידה 0
  1. —
  2. —
  3. —
  4. —
  5. באג הוא טעות בקוד שגורמת להתנהגות לא רצויה. לא תמיד קורס — לפעמים התוכנית ממשיכה לרוץ אבל נותנת תוצאה שגויה.
  6. קוד מקור הוא הטקסט שאנחנו כותבים (קובץ .py); תוכנית מורצת היא הצורה שהמחשב בפועל מבצע.
  7. —
  8. —
יחידה 1
  1. שלום
  2. print(7) מדפיס את המספר 7; print("7") מדפיס את התו 7 כטקסט — באותו מקרה נראים זהים על המסך, אך type() שלהם שונה.
  3. —
  4. Hello (מרכאות בודדות עובדות בדיוק כמו כפולות)
  5. מרכאות משולשות שומרות על מבנה השורות המקורי בלי צורך לכתוב \n בכל מעבר שורה — נוח לטקסט ארוך.
  6. שלוש שורות: א, שורה ריקה, ב.
  7. \n עובר לשורה חדשה; \t מוסיף רווח בגודל טאב, באותה שורה.
  8. —
  9. א ב ג — כל פסיק מוסיף רווח בודד אוטומטית.
  10. print("5+3") מדפיס את הטקסט המילולי 5+3; print(5+3) מחשב ומדפיס 8.
  11. הגרש הבודד בתוך '...' סוגר את המחרוזת מוקדם מדי → SyntaxError. פתרון: לעטוף במרכאות כפולות, או לברוח מהגרש עם \'.
  12. שורה 1: מספר: 5. שורה 2: שגיאה — TypeError: can only concatenate str (not "int") to str, כי אי אפשר לחבר מחרוזת למספר עם +.
  13. NameError: name 'Print' is not defined — Python רגישה לרישיות, ואין פונקציה בשם Print (רק print קטן).
  14. SyntaxError: unterminated string literal — מחרוזת רגילה (לא משולשת) לא יכולה להשתרע פיזית על יותר משורה אחת בלי \n.
יחידה 2
  1. int, str, float, bool.
  2. —
  3. x = 5 מציב את הערך 5 במשתנה; x == 5 בודק אם x שווה ל-5, ומחזיר True/False.
  4. —
  5. קבועים נכתבים באותיות גדולות עם קו תחתון (MAX_SCORE), כדי לסמן חזותית "אל תשנו את הערך הזה" — זו מוסכמה בלבד, לא אכיפה של השפה.
  6. 9 4
  7. המשתנה הוגדר כ-Height (H גדולה) אך נקרא כ-height — Python רגישה לרישיות, זו שגיאת NameError. יש להשתמש באותו שם בדיוק בשני המקומות.
  8. —
  9. NameError: name 'total' is not defined — אי אפשר להשתמש במשתנה לפני שהוא הוגדר.
  10. int, ואז float (כי / תמיד מחזירה float).
  11. 5 4
  12. —
  13. שורה 1: 90 עובר. שורה 2: 90 מצטיין.
  14. —
יחידה 3
  1. 7 // 2 → 3; 7 % 2 → 1.
  2. float (חילוק רגיל / תמיד מחזיר float, גם כשהתוצאה "עגולה").
  3. 9
  4. 15 % 4 → 3; 15 // 4 → 3.
  5. 5 ** 2 → int; 5 ** 2.0 → float (אם ערך אחד float, התוצאה float).
  6. 14 (כפל לפני חיבור)
  7. (2 + 3) * 4
  8. הבעיה: / מתבצע לפני החיבור, אז רק 30 מחולק ב-3. תיקון: (10 + 20 + 30) / 3.
  9. 5 — חיסור נבדק משמאל לימין: (10-3)-2 = 5.
  10. ** הוא מימין לשמאל: 2 ** 3 ** 2 = 2 ** (3 ** 2) = 2 ** 9 = 512. לעומת זאת (2 ** 3) ** 2 = 8 ** 2 = 64.
  11. 2.5 2 2
  12. —
  13. 3*4=12, 6/2=3.0, 2+12=14, 14-3.0=11.0 → מודפס 11.0 (float).
  14. n % 5 == 0
יחידה 4
  1. חוקיים: my_score, _temp. לא חוקיים: 2nd_place (מתחיל בספרה), user-name (מקף), Total$ (תו מיוחד).
  2. total_price, num_of_items.
  3. SyntaxError — if היא מילה שמורה, ואי אפשר להשתמש בה כשם משתנה.
  4. שם ברור חוסך זמן וטעויות כשקוראים לקוד מחדש בעתיד — x לא מספר כלום על תוכן המשתנה.
  5. שני משתנים נפרדים לגמרי — Python רגישה לרישיות.
  6. למשל attempts_left.
  7. my_true = 5 עובד; True = 5 נכשל — True היא מילה שמורה (ערך קבוע), לא ניתן לשנות אותה בהצבה.
  8. למשל: # חישוב מס בשיעור 17 אחוז ממחיר המוצר
  9. 1age מתחיל בספרה; Total-Score מכיל מקף; class היא מילה שמורה. תיקון לדוגמה: age1 = 20, total_score = 90, grade = "A".
  10. —
  11. השם 2nd מתחיל בספרה — שם משתנה לא חוקי, SyntaxError. תיקון: למשל answer = "כן".
יחידה 5
  1. תמיד str.
  2. int() ממיר למספר שלם, float() ממיר למספר עשרוני.
  3. 4
  4. s[2] → t ; s[-3] → h.
  5. שתי הדרכים מייצרות מחרוזת זהה — ההבדל הוא איך הגענו אליה: str(5) ממיר ערך קיים; "5" נכתב ישירות ככזה.
  6. age הוא מחרוזת (מוחזר מ-input()); אי אפשר לחבר str + int ישירות. תיקון: str(int(age) + 5), או להמיר age ל-int מראש.
  7. "ababab"
  8. name[0] → ד ; name[-1] → ל
  9. False — משווים int ל-str, טיפוסים שונים, לכן לא שווים.
  10. —
  11. שורה 1: 123 (הצמדת מחרוזות); שורה 2: 15 (חיבור מספרים אחרי המרה).
  12. —
  13. 6 ; coding! ; 7
  14. a ו-b הן מחרוזות (מ-input()), אז + מצמיד אותן במקום לחבר. תיקון: print(int(a) + int(b)).
יחידה 6
  1. 8 == 8 → True. 8 == "8" → False (טיפוסים שונים, int מול str).
  2. = הצבה; == השוואה.
  3. —
  4. 10 != 10 → False; 10 != 9 → True.
  5. —
  6. אי-זוגי
  7. IndentationError — שורת ה-print חייבת להיות מוזחת בתוך גוף ה-if. תיקון: להוסיף הזחה (4 רווחים) לפני print.
  8. —
  9. x > 10 הוא True (12>10) → x = 12-5 = 7 → מודפס 7.
  10. עבור התנאים המשלימים האלה (>=18 מול <18) שני הקטעים מדפיסים תמיד את אותו הדבר, כי בדיוק אחד מהתנאים מתקיים. ההבדל האמיתי: קטע 2 (עם else) בודק תנאי אחד בלבד ומבטיח מבנית שרק בלוק אחד ירוץ; קטע 1 בודק פעמיים ותלוי בכך שהתנאים באמת משלימים זה את זה במדויק — קל יותר לטעות בו אם אחד התנאים משתנה בעתיד.
  11. 700 <= 500 הוא False → רץ ה-else: אין מספיק יתרה, ואז היתרה הסופית: 500 (הבלוק של ה-if לא רץ, אז balance לא השתנה).
  12. —
  13. sold(3) <= stock(10) True → stock = 10-3 = 7 → מודפס המכירה בוצעה; אחר כך stock = 7+2 = 9 → מודפס מלאי סופי: 9.
  14. —