חוברת תרגול נלווית לשיעורים, בסדר עולה של קושי בכל יחידה (קל → בינוני → מאתגר). מכסה את כל החומר שנלמד עד כה — כולל if ו-else — בלי elif, שנלמד בהמשך.
שאלות מושג, בלי קוד — לוודא שהתמונה הכללית ברורה לפני שצוללים לתחביר.
print(...) מדפיסה למסך את מה שבתוך הסוגריים." " או ' ' — בלעדיהן זו שגיאת תחביר.\n יוצר שורה חדשה בתוך מחרוזת, \t יוצר טאב.# הערה — כל מה שאחרי # באותה שורה, Python מתעלמת ממנו.print חייב אותיות קטנות בדיוק.print("שלום")?קלprint(7) לבין print("7")?קלprint נפרדים.קלprint('Hello') (עם גרשיים בודדים)?קל"""...""" לעומת שרשור כמה \n בתוך מחרוזת רגילה?קלprint("א") print() print("ב")
\n לבין \t בתוך מחרוזת?בינוניprint יחידה שמדפיסה "שלום" ו-"עולם" בשתי שורות נפרדות, בעזרת \n בלבד (בלי print נוסף).בינוניprint("א", "ב", "ג")? שימו לב לרווחים.בינוניprint("5+3") לבין print(5+3)? מה מדפיס כל אחד?בינוניprint('אני אוהב'ת ללמוד').מאתגרprint("מספר:", 5) print("מספר: " + 5)
Print("Hello")
\n ואין מרכאות משולשות)?print("שורה 1 שורה 2")
name = "דנה". שם המשתנה תמיד משמאל ל-=.int, float, str, bool. בודקים עם type().Score ו-score הם שני משתנים שונים.NameError.10, "10", 10.5, True?קלnum_of_pets עם מספר לבחירתכם, והדפיסו אותו ואת type() שלו.קלx = 5 לבין x == 5?קלis_raining מסוג bool, והדפיסו אותו יחד עם type() שלו.קלMAX_SCORE = 100 לבין משתנה רגיל כמו score = 0?קלx = 4 y = x x = 9 print(x, y)
Height = 1.75 ואז print(height) — לא עובד. מה הבעיה, ואיך מתקנים?בינוניprint(total) כאשר total עדיין לא הוגדר בשום מקום קודם בתוכנית? איזו שגיאה מתקבלת?בינוניx = 5, מה הטיפוס של x? ולאחר ההרצה x = x / 2 — מה הטיפוס שלו עכשיו?בינוניa = 3 b = a a = a + 2 b = b + 1 print(a, b)
name, age, height, is_student) והדפיסו את כולם עם תוויות ברורות.מאתגרscore = 70 grade = "עובר" score = score + 20 print(score, grade) grade = "מצטיין" print(score, grade)
a ו-b, והחליפו ביניהם ערכים בעזרת משתנה עזר שלישי temp, כך שבסוף a יקבל את הערך שהיה ל-b ולהפך. הדפיסו את שניהם לפני ואחרי ההחלפה.מאתגר+ - * /. חילוק / תמיד מחזיר float.// חילוק שלם (כמה פעמים שלמות), % שארית, ** חזקה.** לפני * / // % לפני + -. סוגריים תמיד ראשונים.** שהוא מימין לשמאל.7 // 2? ומה מחזיר 7 % 2?קל6 / 2? (שימו לב, גם אם היא "עגולה")קל2 ** 3 + 1. אחר כך בדקו ב-Python.קל15 % 4? ומה מחזיר 15 // 4?קל5 ** 2? ומה הטיפוס של 5 ** 2.0?קלprint(2 + 3 * 4)?בינוני2 + 3 * 4 כך שהתוצאה תהיה 20.בינוניavg = 10 + 20 + 30 / 3. תקנו, והסבירו למה המקור שגוי.בינוניprint(10 - 3 - 2)
2 ** 3 ** 2 (בלי סוגריים) לבין (2 ** 3) ** 2? חשבו את שתי התוצאות בעצמכם.בינוניx = 10 / 4 y = 10 // 4 z = 10 % 4 print(x, y, z)
total_seconds = 400, כתבו קוד שמחשב כמה דקות שלמות וכמה שניות נשארות (בעזרת // ו-%), והדפיסו את שניהם עם תוויות.מאתגרresult = 2 + 3 * 4 - 6 / 2 print(result)
if) שמחשב, בהינתן n = 47, האם n מתחלק ב-5 בלי שארית — התוצאה עצמה תהיה True או False. השתמשו ב-% ובאופרטור יחסי.מאתגר_ בלבד, ואסור להתחיל בספרה.snake_case — אותיות קטנות עם קו תחתון בין מילים.if, class, return, True) כשם משתנה.my_score, 2nd_place, user-name, _temp, Total$.קלsnake_case: totalPrice, NumOfItems.קלif כשם משתנה, למשל if = 5?קלage) לשם לא ברור (כמו x), מבחינת תחזוקת קוד בעתיד?קלscore ל-Score בפייתון?בינוניx, למשתנה ששומר "כמה ניסיונות נותרו למשתמש".בינוניTrue כשם משתנה? נסו בעצמכם my_true = 5 מול True = 5 — מה ההבדל, ולמה?בינוניtax = price * 0.17.בינוני1age = 20 Total-Score = 90 class = "A"
a = 5 b = 3 c = a * b
2nd = "כן" print(2nd)
input() מקבלת קלט מהמשתמש, ותמיד מחזירה str — גם אם הוקלד מספר.int() / float() ממירים מחרוזת למספר; str() ממיר מספר למחרוזת.+, חזרה *, אורך len(), וגישה לתו בעזרת אינדקס — s[0], s[-1].input() תמיד, גם אם המשתמש מקליד מספר?קלint(input(...)) לבין float(input(...))?קלlen("שלום")?קלs = "Python", מה מחזיר s[2]? ומה מחזיר s[-3]?קלstr(5) לבין "5", אם שתיהן בסוף מייצרות את אותה מחרוזת "5"?קלage = input("גיל: ") print("בעוד 5 שנים תהיה בן " + age + 5)
"ab" * 3?בינוניname = "דניאל", מה מחזיר name[0]? ומה מחזיר name[-1]?בינוניx = 5 y = "5" print(x == y)
first = "12" second = "3" print(first + second) print(int(first) + int(second))
len()).מאתגרword = "coding" print(len(word)) word = word + "!" print(word) print(len(word))
"23" ולא 5:a = input("מספר ראשון: ") b = input("מספר שני: ") print(a + b)
== != > < >= <= מחזירים תמיד ערך בוליאני.= הצבה, == השוואה — לא לבלבל.if תנאי: ואז שורה מוזחת — הגוף רץ רק אם התנאי True.else: רץ בדיוק כשהתנאי של ה-if False. תמיד בדיוק אחד מהבלוקים ירוץ.8 == 8? ומה מחזיר 8 == "8"? (שימו לב לטיפוסים)קל= ל-==?קלage, כתבו if שמדפיס "בגיר/ה" אם age >= 18.קל10 != 10? ומה מחזיר 10 != 9?קלis_member, כתבו if שמדפיס "חבר מועדון" אם is_member הוא True — בלי לכתוב == True במפורש.קלn = 7 if n % 2 == 0: print("זוגי") else: print("אי-זוגי")
if x > 0: print("חיובי")
if-else שמדפיס "עבר/ה" אם grade >= 60, ואחרת "נכשל/ה".בינוניx = 12 if x > 10: x = x - 5 else: x = x + 5 print(x)
if age >= 18: print("בגיר") if age < 18: print("קטין")
if age >= 18: print("בגיר") else: print("קטין")
balance = 500 withdrawal = 700 if withdrawal <= balance: balance = balance - withdrawal print("משיכה בוצעה") else: print("אין מספיק יתרה") print("היתרה הסופית:", balance)
if ו-else (בלי elif) — כלומר, יהיה עליכם "לקנן" if נוסף בתוך ה-else.מאתגרstock = 10 sold = 3 if sold <= stock: stock = stock - sold print("המכירה בוצעה") else: print("אין מספיק מלאי") stock = stock + 2 print("מלאי סופי:", stock)
username = "admin", password = "1234"), אחרת "פרטים שגויים". מותר להשתמש רק ב-if/else (אפשר לקנן if בתוך if אם צריך, בלי elif).מאתגרשימו לב: עדיין לא למדנו elif. כשיש צורך ביותר משתי אפשרויות, הפתרון הזמני הוא if מקונן בתוך else — מסורבל יותר, אבל עובד. נראה למה elif פותר את זה ביחידה הבאה.
רק לשאלות עם תשובה חד-משמעית (ניחוש פלט, איתור באג, שאלות ידע). משימות "כתבו תוכנית" הן פתוחות ואין להן פתרון יחיד — בדקו אותן בעצמכם על ידי הרצה.
.py); תוכנית מורצת היא הצורה שהמחשב בפועל מבצע.print(7) מדפיס את המספר 7; print("7") מדפיס את התו 7 כטקסט — באותו מקרה נראים זהים על המסך, אך type() שלהם שונה.\n בכל מעבר שורה — נוח לטקסט ארוך.א, שורה ריקה, ב.\n עובר לשורה חדשה; \t מוסיף רווח בגודל טאב, באותה שורה.א ב ג — כל פסיק מוסיף רווח בודד אוטומטית.print("5+3") מדפיס את הטקסט המילולי 5+3; print(5+3) מחשב ומדפיס 8.'...' סוגר את המחרוזת מוקדם מדי → SyntaxError. פתרון: לעטוף במרכאות כפולות, או לברוח מהגרש עם \'.מספר: 5. שורה 2: שגיאה — TypeError: can only concatenate str (not "int") to str, כי אי אפשר לחבר מחרוזת למספר עם +.NameError: name 'Print' is not defined — Python רגישה לרישיות, ואין פונקציה בשם Print (רק print קטן).SyntaxError: unterminated string literal — מחרוזת רגילה (לא משולשת) לא יכולה להשתרע פיזית על יותר משורה אחת בלי \n.int, str, float, bool.x = 5 מציב את הערך 5 במשתנה; x == 5 בודק אם x שווה ל-5, ומחזיר True/False.MAX_SCORE), כדי לסמן חזותית "אל תשנו את הערך הזה" — זו מוסכמה בלבד, לא אכיפה של השפה.9 4Height (H גדולה) אך נקרא כ-height — Python רגישה לרישיות, זו שגיאת NameError. יש להשתמש באותו שם בדיוק בשני המקומות.NameError: name 'total' is not defined — אי אפשר להשתמש במשתנה לפני שהוא הוגדר.int, ואז float (כי / תמיד מחזירה float).5 490 עובר. שורה 2: 90 מצטיין.7 // 2 → 3; 7 % 2 → 1.float (חילוק רגיל / תמיד מחזיר float, גם כשהתוצאה "עגולה").15 % 4 → 3; 15 // 4 → 3.5 ** 2 → int; 5 ** 2.0 → float (אם ערך אחד float, התוצאה float).(2 + 3) * 4/ מתבצע לפני החיבור, אז רק 30 מחולק ב-3. תיקון: (10 + 20 + 30) / 3.(10-3)-2 = 5.** הוא מימין לשמאל: 2 ** 3 ** 2 = 2 ** (3 ** 2) = 2 ** 9 = 512. לעומת זאת (2 ** 3) ** 2 = 8 ** 2 = 64.2.5 2 23*4=12, 6/2=3.0, 2+12=14, 14-3.0=11.0 → מודפס 11.0 (float).n % 5 == 0my_score, _temp. לא חוקיים: 2nd_place (מתחיל בספרה), user-name (מקף), Total$ (תו מיוחד).total_price, num_of_items.if היא מילה שמורה, ואי אפשר להשתמש בה כשם משתנה.x לא מספר כלום על תוכן המשתנה.attempts_left.my_true = 5 עובד; True = 5 נכשל — True היא מילה שמורה (ערך קבוע), לא ניתן לשנות אותה בהצבה.# חישוב מס בשיעור 17 אחוז ממחיר המוצר1age מתחיל בספרה; Total-Score מכיל מקף; class היא מילה שמורה. תיקון לדוגמה: age1 = 20, total_score = 90, grade = "A".2nd מתחיל בספרה — שם משתנה לא חוקי, SyntaxError. תיקון: למשל answer = "כן".str.int() ממיר למספר שלם, float() ממיר למספר עשרוני.s[2] → t ; s[-3] → h.str(5) ממיר ערך קיים; "5" נכתב ישירות ככזה.age הוא מחרוזת (מוחזר מ-input()); אי אפשר לחבר str + int ישירות. תיקון: str(int(age) + 5), או להמיר age ל-int מראש."ababab"name[0] → ד ; name[-1] → לFalse — משווים int ל-str, טיפוסים שונים, לכן לא שווים.123 (הצמדת מחרוזות); שורה 2: 15 (חיבור מספרים אחרי המרה).coding! ; 7a ו-b הן מחרוזות (מ-input()), אז + מצמיד אותן במקום לחבר. תיקון: print(int(a) + int(b)).8 == 8 → True. 8 == "8" → False (טיפוסים שונים, int מול str).= הצבה; == השוואה.10 != 10 → False; 10 != 9 → True.אי-זוגיIndentationError — שורת ה-print חייבת להיות מוזחת בתוך גוף ה-if. תיקון: להוסיף הזחה (4 רווחים) לפני print.x > 10 הוא True (12>10) → x = 12-5 = 7 → מודפס 7.>=18 מול <18) שני הקטעים מדפיסים תמיד את אותו הדבר, כי בדיוק אחד מהתנאים מתקיים. ההבדל האמיתי: קטע 2 (עם else) בודק תנאי אחד בלבד ומבטיח מבנית שרק בלוק אחד ירוץ; קטע 1 בודק פעמיים ותלוי בכך שהתנאים באמת משלימים זה את זה במדויק — קל יותר לטעות בו אם אחד התנאים משתנה בעתיד.700 <= 500 הוא False → רץ ה-else: אין מספיק יתרה, ואז היתרה הסופית: 500 (הבלוק של ה-if לא רץ, אז balance לא השתנה).sold(3) <= stock(10) True → stock = 10-3 = 7 → מודפס המכירה בוצעה; אחר כך stock = 7+2 = 9 → מודפס מלאי סופי: 9.