מגדירים מה רוצים לבנות ולמה
בחרו מטרה קטנה: לחשב סכום, לסווג מספר או לעבור על רשימת נתונים. אין צורך להתחיל בפרויקט גדול או בהתקנת כלים רבים. בררו עם המורה מה סביבת העבודה ואיך מריצים תוכנית ורואים שגיאה.
אם המטרה היא לימודי בית ספר, אמתו גם את שפת הלימוד ואת הדרישות. Python אינה תחליף אוטומטי לשפה שנדרשת בקורס או בבחינה.
מפרידים רעיון, קוד ובדיקת תוצאה
לפני הכתיבה, תארו במילים מה התוכנית צריכה לעשות. בדוגמה המקורית הבאה עוברים על רשימה ומוסיפים לסכום רק מספרים זוגיים. זו תוכנית תרגול פשוטה, ולא מערכת לטיפול בקלט חיצוני.
numbers = [2, 5, 8, 11]
total = 0
for number in numbers:
if number % 2 == 0:
total += number
print(total)הפלט הוא 10, משום שנוספו 2 ו־8. בקשו להסביר מה ערכו של total אחרי כל סיבוב. להסבר התחביר אפשר לעיין בתיעוד Python הרשמי לתנאים וללולאות.
בוחרים מקרי בדיקה לפני שמרחיבים
| קלט בדוגמה | תוצאה צפויה |
|---|---|
| רשימה ריקה | 0 |
| רק מספרים אי זוגיים | 0 |
| 0, 2 ומינוס 4 | מינוס 2 |
כאשר התוצאה אינה צפויה, עברו צעד אחר צעד ורשמו את ערכי המשתנים. אל תשנו כמה שורות יחד בתקווה שהקוד יתחיל לעבוד; כך קשה לדעת מה פתר את התקלה.
משנים דרישה ובודקים מי מחזיק בהבנה
אחרי שהדוגמה ברורה, בקשו לספור כמה מספרים זוגיים קיימים במקום לחשב את סכומם. שינוי קטן כזה מחייב לבחור מחדש מה שומרים במשתנה ומה מעדכנים בכל סיבוב.
אפשר גם לבקש מהתלמיד להסביר את הקוד בלי להריץ. שימוש בכלי עזר או בהצעת קוד אינו מחליף יכולת להסביר למה התוכנית פועלת ומה יקרה בקלט אחר.
בוחרים מורה שנותן מקום לכתיבה עצמאית
במורים למדעי המחשב ותכנות בדקו ניסיון עם מתחילים ועם המטרה שלכם. בררו כיצד מתבצע שיתוף מסך ואיך נשמרות משימות לעבודה עצמאית.
אם מדובר בבגרות, קראו את מדריך ההכנה במדעי המחשב. אם נדרשת עזרה גם במקצועות אחרים, קראו איך מתאמים חיזוק בכמה תחומי לימוד.
אחרי שהקוד רץ, צריך לבדוק גם אם הוא נכון. המדריך על איתור באגים בפייתון מציג טבלת מעקב ובדיקות קצה לדוגמה שבה אתחול לאפס מחזיר תשובה שגויה.
מתחילים מתוצאה שאפשר לצפות לה
לפני כתיבת קוד, תארו מה התוכנית צריכה לקבל ומה היא אמורה לעשות. בדוגמה של סכום מספרים זוגיים, הקלט הוא רשימת מספרים והפלט הוא סכום הערכים המתאימים. עבור רשימה קטנה אפשר לחשב ביד. בלי ציפייה ברורה, הרצה מוצלחת אינה אומרת שהתוכנית פתרה את הבעיה; היא רק אומרת שהסביבה הצליחה לבצע את ההוראות שנכתבו.
בחרו מטרה קטנה מספיק כדי שאפשר יהיה להסביר כל שורה. אין צורך להתחיל ממשחק גדול או מממשק גרפי. אפשר לבנות כלי פשוט שמונה פריטים, מסכם ערכים או בוחר תוצאה לפי תנאי. המטרה אינה להישאר תמיד בתוכניות קטנות, אלא לבנות רצף שבו התלמיד כותב, מריץ ובודק בעצמו לפני שמוסיפים כמה רכיבים חדשים יחד.
משתנה הוא שם לערך נוכחי
משתנה יכול להשתנות במהלך הריצה, ולכן חשוב לדעת מה ערכו בכל שלב. בתוכנית הסכום, total מתחיל באפס מפני שטרם נוספו ערכים. אחרי שמוסיפים את שתיים הוא שווה שתיים, ואחרי שמוסיפים שמונה הוא שווה עשר. בקשו מן התלמיד לעצור ולנבא את הערך לפני ההרצה, ולא רק לקרוא את הפלט בסוף.
הבחינו בין השמה לבין טענה מתמטית של שוויון. שורה שמעדכנת total משתמשת בערך הקודם כדי לייצר ערך חדש. אין צורך לפרש אותה כמשוואה אלגברית שמחפשים לה פתרון. אפשר לכתוב טבלת לפני ואחרי עבור שורה אחת. ההמחשה מבהירה למה סדר ההוראות משנה וכיצד אותו שם יכול להצביע על ערכים שונים בזמנים שונים.
תנאי מחלק את האפשרויות
ביטוי תנאי נבדק ומוביל לביצוע או לדילוג. בדוגמה, שארית חלוקה בשתיים מאפשרת לבדוק זוגיות של מספר שלם. אם התנאי מתקיים, מוסיפים את הערך לסכום. אין צורך לכתוב תנאי חדש לכל מספר אפשרי. הכלל מתאר קבוצה של קלטים, וזו אחת הסיבות שקוד יכול לפעול על רשימות שונות.
בקשו דוגמה שבה התנאי מתקיים ודוגמה שבה אינו מתקיים. הוסיפו גם אפס ומספר שלילי מתאים. אם בודקים רק מספרים חיוביים מוכרים, טעות יכולה להישאר מוסתרת. אין צורך להעמיס את כל סוגי הקלט בשיעור הראשון, אבל כדאי ללמוד מן ההתחלה שבדיקה נבחרת לפי הדרישה ולא רק לפי מה שנוח להקליד.
לולאה: אותו צעד על ערכים שונים
הלולאה עוברת על הרשימה, ובכל סיבוב number מקבל את הערך הבא. זהו אינו משתנה שמכיל את כל הרשימה בבת אחת. כתבו בצד את הערכים לפי הסדר ובקשו לומר איזה מהם נמצא בשימוש בסיבוב מסוים. כך אפשר לראות את ההבדל בין האוסף לבין הפריט הנוכחי.
אפשר לשנות את סדר הרשימה ולשאול אם הפלט של סכום הזוגיים אמור להשתנות. הסכום נשמר אף שהמעקב באמצע שונה. אחר כך שנו ערך אחד ובדקו מה צפוי לקרות. ניבוי לפני הרצה מחייב להבין את התהליך, ולא רק לזהות את אותו פלט שהופיע בדוגמה הראשונה.
הזחה היא חלק מן המבנה
בפייתון, ההזחה מראה אילו הוראות נמצאות בתוך תנאי או לולאה. print בסוף הדוגמה מופיע מחוץ ללולאה, ולכן מדפיס את הסכום הסופי פעם אחת. אם מעבירים אותו פנימה, רואים פלט בכל סיבוב. שתי התוכניות יכולות לרוץ, אבל הן עושות פעולות שונות. אין לראות בהזחה פרט של עיצוב בלבד.
בקשו מן התלמיד לסמן גבולות של קטעי קוד לפני הרצה. אילו שורות חוזרות ואילו מבוצעות רק פעם אחת? אם מתקבלת הודעת שגיאה, קראו את סוגה ואת השורה המצוינת. לפעמים הבעיה נוצרה בשורה הקודמת. אין צורך לשנות קוד באופן אקראי; מתחילים מהמבנה ומהציפייה ובודקים שינוי אחד בכל פעם.
מתוכנית קצרה לפונקציה
פונקציה מאפשרת להפעיל רעיון על קלטים שונים בלי להעתיק את כל הקוד. הנה גרסה מקורית של מונה ערכים העומדים בסף. הקלט בדוגמה הוא רשימת מספרים וסף, והפלט הוא מספר הערכים הגדולים מן הסף או שווים לו.
def count_at_least(values, threshold):
count = 0
for value in values:
if value >= threshold:
count += 1
return countעבור הערכים ארבע, שבע, חמש, שתיים ותשע וסף חמש, התוצאה היא שלוש. הערך חמש נכלל מפני שהדרישה אומרת ״לפחות״. אם התנאי היה גדול ממש, התוצאה הייתה שתיים. הבחנה קטנה במילים משנה את הקוד ואת מקרה הגבול שצריך לבדוק. לפני ההרצה כתבו אילו ערכים נספרים ומדוע.
return ו־print ממלאים תפקידים שונים
return מחזיר ערך למי שקרא לפונקציה. print מציג מידע בפלט. אפשר להדפיס את הערך שהוחזר, אבל עצם ההדפסה אינה תחליף להחזרה אם רוצים להשתמש בתוצאה בהמשך. בקשו מן התלמיד לתאר מי צריך לקבל את התוצאה ומה ייעשה בה.
לדוגמה, אפשר לקרוא לפונקציה, לשמור את התוצאה בשם ולהשוותה למספר אחר. אם הפונקציה רק מדפיסה, המשך החישוב אינו מקבל בהכרח את הערך שהתכוונו להעביר. ההבחנה הזו חשובה גם כשמוסיפים ממשק או כמה פונקציות בהמשך. התחילו ממקרה קטן שבו הצורך בהחזרה ברור, ולא מהגדרה מופשטת בלבד.
בודקים גבול ורשימה ריקה
למונה שבדוגמה, רשימה ריקה נותנת אפס כי לא נספר שום ערך. רשימה שבה כל הערכים קטנים מן הסף נותנת אפס, ורשימה שבה כולם מתאימים נותנת את מספר האיברים. הוסיפו מקרה שבו ערך שווה בדיוק לסף. כל בדיקה בוחנת רכיב אחר של ההגדרה.
אין צורך לבחור מספר רב של בדיקות דומות. ארבעה מקרים שונים יכולים ללמד יותר מעשרים רשימות אקראיות. כתבו תוצאה צפויה לפני ההרצה. אם היא אינה ברורה, חזרו לחוזה. אם הפלט שונה, השתמשו בקלט קטן ובטבלת מעקב כדי למצוא את השורה שבה ההתנהגות נפרדת מן הציפייה.
שינוי עצמאי קטן
אחרי שהמונה ברור, בקשו לסכם את הערכים המתאימים במקום למנות אותם. כעת צריך להוסיף את value ולא את אחת. זהו שינוי במטרת המשתנה המצטבר. שאלו מה צריך לשנות בשם ובתוצאה הצפויה. אין צורך למסור את כל הפתרון; תנו לתלמיד להסביר את ההבדל לפני כתיבה.
במשימה נוספת אפשר למנות ערכים הקטנים מן הסף. השינוי בתנאי צריך להתאים לניסוח, ויש לבדוק שוב ערך גבול. כך התלמיד לומד להשתמש ברעיון במצב חדש. העתקת דוגמה עם החלפת מספרים בלבד יכולה להיות שלב, אבל שינוי הדרישה בודק הבנה עמוקה יותר של מה שכל שורה עושה.
סביבת עבודה פשוטה ומשוב
בררו עם המורה איך מריצים, שומרים וקוראים הודעת שגיאה. אין צורך להתקין כמה כלים בבת אחת. התלמיד צריך לדעת היכן נמצא הקובץ ומה השתנה מאז ההרצה הקודמת. אם הסביבה מורכבת מדי לשלב, היא עלולה להפוך לחסם שאינו קשור לרעיון התכנותי.
שמרו גרסה שעובדת לפני שינוי. אין צורך בכלי מורכב כדי להבין את העיקרון: שינוי אחד, הרצה ובדיקה. אם מוחקים את כל הקוד ברגע שיש טעות, אובד מידע על מה כבר היה נכון. תהליך מסודר של ניסיון ותיקון הוא חלק מלימוד תכנות, ולא שלב שמתחיל רק אחרי שיודעים לכתוב תוכנית גדולה.
בחירת מורה לתכנות
בקטגוריית מדעי המחשב והתכנות בררו ניסיון עם ילדים, עם השפה ועם מטרת הלימוד. אם המטרה בית־ספרית, אמתו שהעבודה מתאימה לשפה ולדרישות שקיבלתם. Python יכולה להיות דרך ללמוד רעיונות, אך אינה מחליפה אוטומטית סימון או שפה שנדרשים במטלה אחרת.
בקשו לראות איך המורה מחזיר את המקלדת ואת ההחלטות לתלמיד. אחרי תקופה נסו בעיה חדשה בעלת אותו רעיון ובדקו תכנון, מעקב ובדיקות. אין צורך למדוד התקדמות רק במספר שורות או בפרויקט שנראה מרשים. תוכנית קצרה שהתלמיד יודע להסביר, לשנות ולבדוק מספקת בסיס אמיתי להמשך בנייה.
מבחינים בין מספר לבין טקסט שמציג מספר
כאשר מקבלים קלט טקסטואלי, חשוב לדעת אם התוכנית צריכה להשתמש בו כמילה או כמספר. הטקסט שמורכב מן התווים אחת ושתיים אינו אותו ערך כמו המספר שנים עשר. פעולת חיבור יכולה להתנהג אחרת לפי סוגי הערכים, ולכן אל תבחרו המרה רק כדי להעלים הודעת שגיאה. שאלו מה הקלט מייצג ומה התוצאה הנדרשת. אם נדרש מספר שלם, צריך להשתמש בדרך ההמרה שנלמדה ולהגדיר מה עושים בקלט שאינו מתאים לפי דרישת התרגיל.
לתרגול כתבו מראש שלוש דוגמאות קלט ופלט לפני שאתם מריצים. בחרו אחת רגילה, אחת בגבול ואחת שממחישה את ההנחה שלכם על סוג הנתון. לאחר ההרצה הסבירו מדוע התקבלה כל תוצאה. אם הפלט שונה מהציפייה, בדקו את ערכי המשתנים ואת סוגיהם סמוך לנקודת השינוי. לא חייבים לשכתב את כל התוכנית. לעיתים ההבדל נמצא בשורת קלט אחת או בהמרה שבוצעה מוקדם מדי או שלא בוצעה כלל.
בהמשך חזרו לאותה פעולה עם קלט חדש. היכולת לנבא את הפלט לפני ההרצה מראה אם משמעות הפעולות ברורה, ונותנת לתלמיד דרך בדיקה שאינה תלויה בניחוש.
