Coding for KidsCoding for Kids
שלבים יצירתייםאתגריםמדריך למורים
הצבע על תכונות
קורס פיתוח מתקדם בפייתון
פרק
>
רמה

טיפול בחריגות
סיכום חריגה

מטרה

לך למשרד והבטח שאספקת הכסף מאוזנת כראוי על ידי שימוש בבלוק הקוד finally ובמילת המפתח assert.

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

חוץ מבלוקי הקוד try / except ו-else, קיים גם בלוק הקוד finally שמאפשר לסיים טיפול בחריגה. בנוסף לכך, מילת המפתח assert היא תכונת בדיקה שמאפשרת לך לסרוק אם הקוד שלך מכיל שגיאות, ובכך לתקן קוד לקוי.

התחל בהליכה אל סימן ה־X הבהיר שמול דלת המשרד והשתמש בפונקציה open() כדי לפתוח את הדלת ולהיכנס. ברגע שאתה בפנים, עבור לסימן ה־X הזהב והשתמש בפונקציה collect() כדי לאסוף שני קבועים שונים בשם: categories ו-savings. הקבוע categories הוא רשימה שמכילה את אספקת הכסף של שלוש הקטגוריות, ששמם: "exports", "imports", "stock", אשר יש לאמת. הקבוע savings הוא משתנה שמכיל את אספקת הכסף שעשויה להיות נחוצה כדי להבטיח שהקופות יהיו מסופקות כראוי.

עכשיו, כשכל הפריטים הנחוצים נאספו, הגיע הזמן לאזן את אספקת הכסף המאוחסנת בשקיות, אשר ייאספו ויחולקו על ידי פקיד מאוחר יותר. לך אל סימן ה־X הכהה מעל השטיח הכחול, עבור אל סימני ה־X מעל השטיחים הכחול, הצהוב והאדום. כאן נשתמש בקבוע הרשימה categories כדי לאמת שלכל שקית יש את כל הרכיבים הדרושים לפני המשלוח.

כל שקית אמורה להכיל את הרכיבים המופיעים ברשימת categories. קיימים שלושה קבועים מסוג מילון התואמים לכל שקית: blue_sack, yellow_sack ו-red_sack. הפעל לולאת for בזמן שאתה עומד על סימן ה־X מעל השטיח הכחול כדי לאמת שלשקית יש את כל החומרים הדרושים ולאחר מכן לאשר שהאספקה נלקחה בחשבון.

for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) player.speak("All assets accounted for")

חלק מהשקיות עשויות להכיל את כל החומרים הדרושים, אך כרגיל בתרגילים אלו, ייתכן שתיתקל בשגיאה. אם תיתקל בבעיה, עליך להשתמש בבלוקי הקוד try / except ללכידת השגיאה, במקרה זה KeyError:, שמתרחשת כאשר מפתח במילון לא נמצא. כאשר זה קורה, נוסיף גם את finally לחריגה, אשר סוגר את הטיפול על ידי הוספת קוד שתמיד מתבצע בסיום הטיפול. בניגוד לחריגות, ניתן להשתמש רק בבלוק finally אחד לכל try. לדוגמה, במקרה של blue_sack:

try: for x in range(3): player.speak("%s = %s" % (categories[x] , blue_sack[categories[x]])) except: player.speak("Bag is missing %s, adding now" % (categories[x])) player.place(categories[x]) finally: player.speak("All assets accounted for")

חזור על תהליך זה בסימני ה־X הכהים מעל השטיחים הצהוב והאדום, תוך שימוש בקבועי המילון yellow_sack ו-red_sack. יתכן שזה לא יהיה נחוץ במקרים מסוימים, שכן השגיאה מתרחשת רק אם פריט חסר בשקיות.

עכשיו, לאחר שהשקיות אומתו, הגיע הזמן לעבור לתיבות שמול השטיחים הירוק, הסגול והכתום. כאן עלינו להבטיח שאספקת הכסף היא בדיוק 30 בכל תיבה, ולאחר מכן לסגור את התיבה. קיימים שלושה קבועים משתנים התואמים לכל תיבה, ששמם: green_chest, purple_chest ו-orange_chest.

הבעיה הגדולה ביותר באימות התיבות היא שאיננו יודעים את התכולה המדויקת שלהן. כאשר מתמודדים עם ערכים בלתי ידועים, ניתן להשתמש במילת המפתח assert. מילת מפתח זו מאפשרת לאמת אם ההצהרה שאתה מציג היא נכונה או שגויה, והיא מאוד שימושית לסריקה אם לקוד שלך יש שגיאות. מילת המפתח assert משמשת בשילוב עם: try, except, else ו-final ובשילובים שונים שלהם לתיקון קוד עם שגיאות. לדוגמה, במקרה של green_chest:

try: assert(green_chest = 30) except AssertionError: player.speak("Chest is not full %s/30" % green_chest) drop = 30-green_chest savings -= drop player.place(drop) else: player.speak("All assets accounted for") finally: player.close()

בקוד שלמעלה אנו מאמתים אם green_chest מכילה את כמות הכסף הנכונה באמצעות מילת המפתח assert. אם היא לא מכילה את הכמות הנכונה, בלוק ה-except מופעל ואנו מחשבים ואז מחסרים את האספקה החסרה מהמשתנה savings ומוסיפים אותה לתיבה. אם האספקה מלאה, בלוק ה-else מופעל ואשר שהוא מאשר שכל הנכסים נלקחו בחשבון. לאחר שכל האימותים בוצעו, בלוק ה-finally מתבצע ופונקציית close() מופעלת כדי לסגור את התיבה.

על סימני ה־X מעל השטיחים הירוק, הסגול והכתום, פנה לעבר התיבות והרץ את האימות תוך שימוש ב-green_chest, purple_chest, orange_chest בשטיחים הצבועים בהתאם. לאחר סיום, עבור לסימן ה־X הבהיר והשתמש בפונקציה place() כדי לאחסן את השארית של המשתנה savings בתיבה, ובכך להשלים את השלב.

ספר קוד