diff --git a/week1/1_Strings_and_Output.ipynb b/week1/1_Strings_and_Output.ipynb index 66ea93f..6462051 100644 --- a/week1/1_Strings_and_Output.ipynb +++ b/week1/1_Strings_and_Output.ipynb @@ -4,22 +4,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#
ברוכים הבאים למחברת הפייתון הראשונה שלכם!
" + "#ברוכים הבאים למחברת הפייתון הראשונה שלכם!
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "ממש בקרוב נצלול לעולם התכנות, שבו תוכלו להריץ דוגמאות קוד מעניינות.
\n",
+ "
\n",
+ "ממש בקרוב נצלול לעולם התכנות, שבו תוכלו להריץ דוגמאות קוד מעניינות.
\n",
"המחברת שלפניכם היא מחברת אינטראקטיבית שמאפשרת לנו להריץ קוד ולראות את התוצאות שלו בקלות.\n",
"
כדי להריץ את התוכן של תא מסוים, לחצו עליו כך שתופיע סביבו מסגרת, והקישו בו־זמנית על המקשים CTRL + ENTER במקלדת.
\n",
- "לאחר שתעשו זאת, פייתון תעבד את הביטוי המופיע במשבצת ותציג לכם תשובה בהתאם.
\n",
+ "
כדי להריץ את התוכן של תא מסוים, לחצו עליו כך שתופיע סביבו מסגרת, והקישו בו־זמנית על המקשים CTRL + ENTER במקלדת.
\n",
+ "לאחר שתעשו זאת, פייתון תעבד את הביטוי המופיע במשבצת ותציג לכם תשובה בהתאם.
\n",
"נסו את זה על המשבצת הבאה!
אפשר לזהות בקלות תא שמיועד להרצה, באמצעות צבע הרקע האפור שלו שנמתח על גבי כל השורה.
" + "אפשר לזהות בקלות תא שמיועד להרצה, באמצעות צבע הרקע האפור שלו שנמתח על גבי כל השורה.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " תוכלו להמנע משימוש בעכבר ולעבוד מהר יותר רק עם המקלדת. עברו בין התאים בעזרת המקשים ↓ או ↑ במקלדת שלכם.\n", "
\n", - "הדפסה
" + "##הדפסה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אבל רגע
, יגידו הסקרנים ביניכם, מה הרצתי שם למעלה?
\n",
+ "
\n",
+ "אבל רגע
, יגידו הסקרנים ביניכם, מה הרצתי שם למעלה?
\n",
"
\n", + "
\n", "כמו שוודאי ניחשתם, הקוד שהרצתם מדפיס \"שלום עולם\". הוא מורכב משני חלקים יחסית פשוטים: מחרוזת ופקודת הדפסה.\n", "
" ] @@ -94,16 +94,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n",
- "אחד הדברים שנעשה לא מעט בשבועות הקרובים זה להדפיס למסך.
\n",
- "כדי לעשות את זה, נצטרך פשוט לכתוב print
, לפתוח סוגריים, לכתוב ביטוי חוקי כלשהו ולסגור את הסוגריים.
\n",
+ "
\n",
+ "אחד הדברים שנעשה לא מעט בשבועות הקרובים זה להדפיס למסך.
\n",
+ "כדי לעשות את זה, נצטרך פשוט לכתוב print
, לפתוח סוגריים, לכתוב ביטוי חוקי כלשהו ולסגור את הסוגריים.
\n",
"בואו נסתכל על כמה דוגמאות:\n",
"
\n",
- " נהוג לרשום את הסוגריים סמוך למילה print
, בלי רווחים לפני או אחרי הסוגריים.
\n",
- " אם תשכחו סוגריים, או אם תפתחו סוגריים ותשכחו לסגור אותם, פייתון תתריע על שגיאה.
\n",
+ "
\n",
+ " נהוג לרשום את הסוגריים סמוך למילה print
, בלי רווחים לפני או אחרי הסוגריים.
\n",
+ " אם תשכחו סוגריים, או אם תפתחו סוגריים ותשכחו לסגור אותם, פייתון תתריע על שגיאה.
\n",
" זה לא באמת מפחיד אותנו, אבל כדאי לזכור שזו אחת הסיבות שאתם עלולים להיתקל בהודעות שגיאה.\n",
"
\n",
- "למרות השם הרשמי, מחרוזת היא בסך הכול רצף של תווים. מחרוזת יכולה להיות \"שלום עולם\", התוכן של הספר הארי פוטר ואפילו האות \"ש\" לבדה.
\n",
- "במקרה שלנו, המחרוזת היא \"Hello World\"
.
\n",
- "כדי שפייתון תזהה שמדובר במחרוזת, נהיה חייבים להקיף את המחרוזת בגרש (צ'וקו) או בגרשיים (צ'וקיים).
\n",
- "פייתון נחמדה אלינו ולא באמת אכפת לה במה תשתמשו, כל עוד תתחילו בגרש ותסיימו בגרש, או תתחילו בגרשיים ותסיימו בגרשיים.
\n",
+ "
\n",
+ "למרות השם הרשמי, מחרוזת היא בסך הכול רצף של תווים. מחרוזת יכולה להיות \"שלום עולם\", התוכן של הספר הארי פוטר ואפילו האות \"ש\" לבדה.
\n",
+ "במקרה שלנו, המחרוזת היא \"Hello World\"
.
\n",
+ "כדי שפייתון תזהה שמדובר במחרוזת, נהיה חייבים להקיף את המחרוזת בגרש (צ'וקו) או בגרשיים (צ'וקיים).
\n",
+ "פייתון נחמדה אלינו ולא באמת אכפת לה במה תשתמשו, כל עוד תתחילו בגרש ותסיימו בגרש, או תתחילו בגרשיים ותסיימו בגרשיים.
\n",
"בואו נסתכל על כמה דוגמאות:\n",
"
\n",
- " טעות נפוצה בקרב אנשים שמצטרפים לעולם התכנות, היא לשכוח את הגרש או את הגרשיים בסיום ו/או בתחילת המחרוזת.
\n",
+ "
\n",
+ " טעות נפוצה בקרב אנשים שמצטרפים לעולם התכנות, היא לשכוח את הגרש או את הגרשיים בסיום ו/או בתחילת המחרוזת.
\n",
" אם תשכחו אותם, פייתון עלולה להתריע על שגיאה. זה לא באמת מפחיד אותנו, אבל כדאי לזכור שזו אחת הסיבות שאתם עלולים להיתקל בהודעות שגיאה.\n",
"
מה מחרוזת ומה לא?
" + "###מה מחרוזת ומה לא?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "לפניכם כמה ביטויים בפייתון. מה לדעתכם מחרוזת תקינה ומה לא?
\n",
- "רשמו בצד את התשובות שלכם, ורק אז עברו לתא שאחרי התרגיל כדי לבדוק אם עניתם נכונה על השאלות.
\n",
+ "
\n",
+ "לפניכם כמה ביטויים בפייתון. מה לדעתכם מחרוזת תקינה ומה לא?
\n",
+ "רשמו בצד את התשובות שלכם, ורק אז עברו לתא שאחרי התרגיל כדי לבדוק אם עניתם נכונה על השאלות.
\n",
"זהירות! הטמנו שם כמה מוקשים ;)\n",
"
\"Hello World\"
'Hello World'
1234
'Israel'
Moshe
\".\"
\"_)(*&^%\"
\"_)('*&^%\"
\"_)(\"*&^%\"
\"_)(*&^%\"
\"_)('*&^%\"
\"_)(\"*&^%\"
\n", - " סמנו בעזרת העכבר את הריבוע השחור (המחרוזות התקינות הן: 1, 2, 4, 7, 9, 10, 11) כדי לראות אילו מן הסעיפים הוא מחרוזת תקינה.\n", + "
\n", + " סמנו בעזרת העכבר את הריבוע השחור (המחרוזות התקינות הן: 1, 2, 4, 7, 9, 10, 11) כדי לראות אילו מן הסעיפים הוא מחרוזת תקינה.\n", "
\n", - "\n",
- " \n",
+ "
\n",
+ "
\n", "
" ] }, @@ -312,18 +312,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###חוברים למחברת
" + "###חוברים למחברת
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "הוסיפו למחברת תא שבו ניתן לכתוב קוד.
\n",
- "ניתן לעשות זאת בלחיצה על המשבצת הזו, ואז בלחיצה על b במקלדת.
\n",
- "הלחיצה על b משמעה \"הוסף אזור קוד מתחת (below) למשבצת שסימנתי\".
\n",
- "כתבו במשבצת קוד לבחירתכם. ודאו שהתא שמכיל את הקוד מסומן, ואז לחצו CTRL יחד עם ENTER כדי להריץ אותו.
\n",
+ "
\n",
+ "הוסיפו למחברת תא שבו ניתן לכתוב קוד.
\n",
+ "ניתן לעשות זאת בלחיצה על המשבצת הזו, ואז בלחיצה על b במקלדת.
\n",
+ "הלחיצה על b משמעה \"הוסף אזור קוד מתחת (below) למשבצת שסימנתי\".
\n",
+ "כתבו במשבצת קוד לבחירתכם. ודאו שהתא שמכיל את הקוד מסומן, ואז לחצו CTRL יחד עם ENTER כדי להריץ אותו.
\n",
"
שרה שרה שיר שמח
" + "###שרה שרה שיר שמח
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "הדפיסו את הפזמון מהשיר האהוב עליכם!
\n",
- "אם צריך, היעזרו בדוגמת ההדפסה שמופיעה בתחילת המחברת.
\n",
- "שימו לב שניתן להדפיס יותר משורה אחת על ידי חזרה על print
בכמה שורות נפרדות.
\n",
+ "
\n",
+ "הדפיסו את הפזמון מהשיר האהוב עליכם!
\n",
+ "אם צריך, היעזרו בדוגמת ההדפסה שמופיעה בתחילת המחברת.
\n",
+ "שימו לב שניתן להדפיס יותר משורה אחת על ידי חזרה על print
בכמה שורות נפרדות.
\n",
"הוסיפו אזור קוד שבו תוכלו לכתוב את פתרון התרגיל.\n",
"
נגמר הדיו
" + "###נגמר הדיו
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " בהרצה של קטע הקוד הבא, פייתון תתריע על שגיאה:
\n",
+ "
\n",
+ " בהרצה של קטע הקוד הבא, פייתון תתריע על שגיאה:
\n",
"
\n",
- "הריצו את הקוד, צפו בשגיאה ותקנו את הקוד בהתאם.
\n",
+ "
\n",
+ "הריצו את הקוד, צפו בשגיאה ותקנו את הקוד בהתאם.
\n",
"חזרו על הפעולה עד שהקוד ירוץ במלואו.\n",
"
\n",
- "לפעמים נרצה לצרף דברי הסבר לקוד שכתבנו.
\n",
- "כדי להוסיף הסברים לצד הקוד נשתמש בתו סולמית, ומייד אחריה נכתוב את ההסברים שרצינו לצרף.
\n",
+ "
\n",
+ "לפעמים נרצה לצרף דברי הסבר לקוד שכתבנו.
\n",
+ "כדי להוסיף הסברים לצד הקוד נשתמש בתו סולמית, ומייד אחריה נכתוב את ההסברים שרצינו לצרף.
\n",
"החלקים האלו בקוד נקראים הערות, ופייתון מתעלמת מקיומם כשהיא מריצה את הקוד.\n",
"
\n", + "
\n", "לדוגמה:\n", "
" ] @@ -48,7 +48,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "או אפילו באותה שורה:
" + "או אפילו באותה שורה:
" ] }, { @@ -64,9 +64,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " הערות נועדו להסביר את הקוד שלכם למתכנתים אחרים שיקראו אותו בעתיד.
\n",
- " בינתיים, אנחנו נשתמש בהערות כדי להבהיר ולהדגיש דוגמאות במחברת הקורס.
\n",
+ "
\n",
+ " הערות נועדו להסביר את הקוד שלכם למתכנתים אחרים שיקראו אותו בעתיד.
\n",
+ " בינתיים, אנחנו נשתמש בהערות כדי להבהיר ולהדגיש דוגמאות במחברת הקורס.
\n",
" נהוג לכתוב הערות באנגלית, אבל רק לצורך הקורס שלנו, שמתקיים בעברית, נכופף קצת את החוקים.\n",
"
\n",
- " אין צורך לפחד מהמונח המאיים, מדובר פשוט בפעולות חשבון בסיסיות. בואו נראה מה פייתון יודעת לעשות.
\n",
+ "
\n",
+ " אין צורך לפחד מהמונח המאיים, מדובר פשוט בפעולות חשבון בסיסיות. בואו נראה מה פייתון יודעת לעשות.
\n",
" חשבו מה תהיה התוצאה בכל אחד מהתאים הבאים. לאחר שכתבתם בצד את התוצאה שעליה חשבתם, הריצו את התאים ובדקו אם צדקתם.\n",
"
חלוקת שלמים היא פעולה שתוצאתה תמיד מספר שלם, בניגוד לפעולת החילוק שאנחנו רגילים אליה (/
).
כאשר אנחנו עושים חלוקת שלמים מהצורה A // B
, אנחנו למעשה מתכוונים לשאול:
\n", - "\n", - "אם יש לי A משולשי פיצה, וחילקתי את כל משלושי הפיצה באופן שווה ל־B ילדים (תזהרו מלחתוך לי את המשולשים!), כמה משולשי פיצה יקבל כל ילד?
לדוגמה: הביטוי 4 // 9
, אומר שיש לנו 9 משולשי פיצה ו־4 ילדים רעבים.
אם נחלק את משולשי הפיצה בין הילדים, נגלה שכל ילד יקבל 2 משולשים, ושנשאר משולש אחד שלא ניתן לחלק.
חלוקת שלמים היא פעולה שתוצאתה תמיד מספר שלם, בניגוד לפעולת החילוק שאנחנו רגילים אליה (/
).
כאשר אנחנו עושים חלוקת שלמים מהצורה A // B
, אנחנו למעשה מתכוונים לשאול:
\n", + "אם יש לי A משולשי פיצה, וחילקתי את כל משלושי הפיצה באופן שווה ל־B ילדים (תזהרו מלחתוך לי את המשולשים!), כמה משולשי פיצה יקבל כל ילד?
לדוגמה: הביטוי 4 // 9
, אומר שיש לנו 9 משולשי פיצה ו־4 ילדים רעבים.
אם נחלק את משולשי הפיצה בין הילדים, נגלה שכל ילד יקבל 2 משולשים, ושנשאר משולש אחד שלא ניתן לחלק.
למשולשי הפיצה שלא הצלחנו לחלק לילדים אנחנו קוראים שארית, וזו התוצאה שנקבל כשנכתוב את הסימן %
במקום //
.
לדוגמה, אם היינו כותבים 4 % 9
, היינו מקבלים 1
, הרי הוא משולש הפיצה שנשאר מהדוגמה שלמעלה.
למשולשי הפיצה שלא הצלחנו לחלק לילדים אנחנו קוראים שארית, וזו התוצאה שנקבל כשנכתוב את הסימן %
במקום //
.
לדוגמה, אם היינו כותבים 4 % 9
, היינו מקבלים 1
, הרי הוא משולש הפיצה שנשאר מהדוגמה שלמעלה.
\n",
- "חובבי תה רציניים ידעו להגיד לכם, שחליטת התה שלכם צריכה להיעשות בטמפרטורה מסוימת מאוד, שתלויה בסוג התה שבידכם.
\n",
- "כפלצן תה גדול, אני מזמין לעיתים קרובות תה ממחוזות מוזרים בעולם, שבהם מציגים את הטמפרטורה המושלמת לחליטת התה במעלות פרנהייט במקום בצלזיוס.
\n",
- "לאחרונה קיבלתי תה יסמין שהיה צריך לחלוט ב־176 מעלות פרנהייט.
\n",
+ "
\n",
+ "חובבי תה רציניים ידעו להגיד לכם, שחליטת התה שלכם צריכה להיעשות בטמפרטורה מסוימת מאוד, שתלויה בסוג התה שבידכם.
\n",
+ "כפלצן תה גדול, אני מזמין לעיתים קרובות תה ממחוזות מוזרים בעולם, שבהם מציגים את הטמפרטורה המושלמת לחליטת התה במעלות פרנהייט במקום בצלזיוס.
\n",
+ "לאחרונה קיבלתי תה יסמין שהיה צריך לחלוט ב־176 מעלות פרנהייט.
\n",
"הדלקתי קומקום ועקבתי אחרי הטמפרטורה של המים. עזרו לי, והדפיסו את הטמפרטורה שאליה המים צריכים להגיע, במעלות צלזיוס.\n",
"
\n",
- "הנוסחה להמרה מפרנהייט לצלזיוס היא (5 חלקי 9) כפול (מעלות בפרנהייט פחות 32)
.
\n",
- "או, אם אתם מעדיפים כתיב מתמטי: $\\normalsize{C = \\frac{5}{9}\\times(F - 32)}$
\n",
- "לדוגמה, אם הייתי צריך לחלוט את התה שלי ב־212 מעלות פרנהייט, הייתי מצפה שתציגו לי 100, כיוון ש: $\\normalsize{C = \\frac{5}{9}\\times(212 - 32)} = 100$\n",
+ "
\n",
+ "הנוסחה להמרה מפרנהייט לצלזיוס היא (5 חלקי 9) כפול (מעלות בפרנהייט פחות 32)
.
\n",
+ "או, אם אתם מעדיפים כתיב מתמטי: $\\normalsize{C = \\frac{5}{9}\\times(F - 32)}$
\n",
+ "לדוגמה, אם הייתי צריך לחלוט את התה שלי ב־212 מעלות פרנהייט, הייתי מצפה שתציגו לי 100, כיוון ש: $\\normalsize{C = \\frac{5}{9}\\times(212 - 32)} = 100$\n",
"
כל ערך שאנחנו כותבים בפייתון הוא מסוג מסוים. עד כה למדנו על שלושה סוגי ערכים שקיימים בפייתון (איזה זריזים אנחנו!):
" + "כל ערך שאנחנו כותבים בפייתון הוא מסוג מסוים. עד כה למדנו על שלושה סוגי ערכים שקיימים בפייתון (איזה זריזים אנחנו!):
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "היעזרו בסוגי הערכים המוצגים למעלה ונסו לקבוע מה סוג הנתונים בכל אחת מהשורות הבאות:
" + "היעזרו בסוגי הערכים המוצגים למעלה ונסו לקבוע מה סוג הנתונים בכל אחת מהשורות הבאות:
" ] }, { @@ -58,16 +58,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "המינוח המקצועי ל\"סוג\" הוא \"טיפוס\", או באנגלית: type.
" + "המינוח המקצועי ל\"סוג\" הוא \"טיפוס\", או באנגלית: type.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "טיפוסי נתונים מזכירים מצבי צבירה: כפי שניתן למצוא בטבע מים בצורות שונות (כנוזל – לשתייה, וכמוצק – קוביות קרח),
\n",
- "כך בפייתון ניתן להשתמש בערך מסוים בכמה צורות.
\n",
+ "
\n",
+ "טיפוסי נתונים מזכירים מצבי צבירה: כפי שניתן למצוא בטבע מים בצורות שונות (כנוזל – לשתייה, וכמוצק – קוביות קרח),
\n",
+ "כך בפייתון ניתן להשתמש בערך מסוים בכמה צורות.
\n",
"נניח, בערך 9.5 ניתן להשתמש גם כמספר (9.5
) וגם כמחרוזת ('9.5'
). השימוש בכל אחד מהם הוא למטרה אחרת.\n",
"
\n",
- " בניסוח רשמי או אקדמי משתמשים במינוח \"טיפוס\" או במינוח \"טיפוס נתונים\" כדי לסווג ערכים לקבוצות שונות.
\n",
- " בתעשייה וביום־יום משתמשים במינוח \"סוג\". לדוגמה: מוישה, מאיזה סוג המשתנה age שהגדרת פה?
\n",
- "
\n",
+ " בניסוח רשמי או אקדמי משתמשים במינוח \"טיפוס\" או במינוח \"טיפוס נתונים\" כדי לסווג ערכים לקבוצות שונות.
\n",
+ " בתעשייה וביום־יום משתמשים במינוח \"סוג\". לדוגמה: מוישה, מאיזה סוג המשתנה age שהגדרת פה?
\n",
+ "
type
" + "##type
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "כיוון שסוגי ערכים הם עניין מרכזי כל כך בפייתון, קיימת דרך לבדוק מה הוא הסוג של ערך מסוים.
\n",
+ "
כיוון שסוגי ערכים הם עניין מרכזי כל כך בפייתון, קיימת דרך לבדוק מה הוא הסוג של ערך מסוים.
\n",
"לפני שנציג לכם איך לגלות את הסוג של כל ערך (אף על פי שחשוב שתדעו לעשות את זה בעצמכם), אנחנו רוצים להציג לפניכם איך פייתון מכנה כל סוג נתונים:
type(VALUE)
, כאשר במקום VALUE
יופיע הערך אותו נרצה לבדוק.\n",
+ "\n",
+ " כדי לראות את הסוג של ערך נתון, נשתמש ב־type(VALUE)
, כאשר במקום VALUE
יופיע הערך אותו נרצה לבדוק.\n",
""
]
},
@@ -125,17 +124,17 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- " לפניכם דוגמאות אחדות של שימוש ב־type
.
\n",
- " קבעו מה תהיה התוצאה של כל אחת מהדוגמאות, ורק לאחר מכן הריצו ובדקו אם צדקתם.
\n",
+ "
\n",
+ " לפניכם דוגמאות אחדות של שימוש ב־type
.
\n",
+ " קבעו מה תהיה התוצאה של כל אחת מהדוגמאות, ורק לאחר מכן הריצו ובדקו אם צדקתם.
\n",
" אם טעיתם – לא נורא, ממילא מדובר פה בהימורים מושכלים.\n",
"
\n", + "
\n", "בדקו מה הסוג של הערכים והביטויים הבאים:\n", "
" ] @@ -255,14 +254,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##שוני בין סוגי ערכים
" + "##שוני בין סוגי ערכים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "סוג הערכים ישפיע על התנהגותם בפועל. הריצו את שלושת קטעי הקוד הבאים ונסו לעמוד על ההבדלים ביניהם:\n", "
" ] @@ -298,17 +297,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " פעולות המערבות סוגי ערכים שונים לא תמיד עובדות.
\n",
- " לדוגמה, כשננסה לחבר מספר שלם ומספר עשרוני, נקבל מספר עשרוני. לעומת זאת, כשננסה לחבר מספר שלם למחרוזת, פייתון תתריע לפנינו על שגיאה.
\n",
- " נמשיל לקערת קוביות קרח: נוכל לספור כמה קוביות קרח יש בה גם אם נוסיף מספר קוביות, אבל יהיה קשה לנו לתאר את תוכן הקערה אם נשפוך אליה כוס מים.
\n",
- "
\n",
+ " פעולות המערבות סוגי ערכים שונים לא תמיד עובדות.
\n",
+ " לדוגמה, כשננסה לחבר מספר שלם ומספר עשרוני, נקבל מספר עשרוני. לעומת זאת, כשננסה לחבר מספר שלם למחרוזת, פייתון תתריע לפנינו על שגיאה.
\n",
+ " נמשיל לקערת קוביות קרח: נוכל לספור כמה קוביות קרח יש בה גם אם נוסיף מספר קוביות, אבל יהיה קשה לנו לתאר את תוכן הקערה אם נשפוך אליה כוס מים.
\n",
+ "
\n", + "
\n", "דוגמה לערכים מסוגים שונים שפעולת החיבור ביניהם עובדת:\n", "
" ] @@ -334,7 +333,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "דוגמה לערכים מסוגים שונים שפעולת החיבור ביניהם גורמת לפייתון להתריע על שגיאה:\n", "
" ] diff --git a/week1/4_Variables.ipynb b/week1/4_Variables.ipynb index 7905537..7e0ba3d 100644 --- a/week1/4_Variables.ipynb +++ b/week1/4_Variables.ipynb @@ -4,27 +4,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#משתנים
" + "#משתנים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "בואו נחשב את נפח הפיצה שלנו לפי אורך המשולש ועוביו.
\n",
+ "
\n",
+ "בואו נחשב את נפח הפיצה שלנו לפי אורך המשולש ועוביו.
\n",
"הנוסחה לחישוב נפח פיצה היא:\n",
- " $pi \\times z \\times z \\times a$,\n",
- "כאשר $z$ הוא אורך המשולש ו־$a$ הוא עובי המשולש.
\n",
- " pi, או $\\pi$, הוא מספר קבוע שנקרא בעברית פאי, וערכו קרוב ל־3.141592653589793. בפועל יש לו אין־סוף ספרות אחרי הנקודה העשרונית, אבל אנחנו נסתפק באלו.
\n",
- "נניח שאורכו של המשולש הוא 5 מטרים, ועוביו הוא 2 מטרים (זו למעשה עוגת פיצה. אנחנו אוהבים!)
\n",
+ " $pi \\times z \\times z \\times a$,\n",
+ "כאשר $z$ הוא אורך המשולש ו־$a$ הוא עובי המשולש.
\n",
+ " pi, או $\\pi$, הוא מספר קבוע שנקרא בעברית פאי, וערכו קרוב ל־3.141592653589793. בפועל יש לו אין־סוף ספרות אחרי הנקודה העשרונית, אבל אנחנו נסתפק באלו.
\n",
+ "נניח שאורכו של המשולש הוא 5 מטרים, ועוביו הוא 2 מטרים (זו למעשה עוגת פיצה. אנחנו אוהבים!)
\n",
"נחשב:\n",
"
\n",
- "אך אבוי!
\n",
- "מתכנת אחר שיקרא את הקוד שלכם, עלול להתבלבל מכמות המספרים הלא מובנים בעליל שכתובים שם, וקרוב לוודאי שהוא לא יבין מה הם אומרים.
\n",
+ "
\n",
+ "אך אבוי!
\n",
+ "מתכנת אחר שיקרא את הקוד שלכם, עלול להתבלבל מכמות המספרים הלא מובנים בעליל שכתובים שם, וקרוב לוודאי שהוא לא יבין מה הם אומרים.
\n",
"יותר מזה, אם תרצו לחשב את גודלן של פיצות רבות נוספות, תצטרכו לכתוב את פאי המסורבל (סליחה פאי) פעמים רבות בקוד.\n",
"
השמה
" + "##השמה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "למזלנו, בפייתון יש דרך לתת לערכים שם, ממש כמו תווית שכזו. ערכים עם שם נקראים משתנים, ויש להם יתרונות רבים נוספים שנגלה בהמשך.
\n",
+ "
\n",
+ "למזלנו, בפייתון יש דרך לתת לערכים שם, ממש כמו תווית שכזו. ערכים עם שם נקראים משתנים, ויש להם יתרונות רבים נוספים שנגלה בהמשך.
\n",
"כעת נדגים כיצד אנחנו נותנים לערך \"פאי\" שם, ואיך מייד לאחר מכן אנחנו משתמשים בו.\n",
"
\n",
- "תחילה נשים לב לכך שאף שהשתמשנו בסימן =
, השורה הראשונה היא לא שוויון מהסוג שאנחנו רגילים אליו.
\n",
- "משמעות הסימן בתכנות שונה לחלוטין, והעיקרון שאותו הוא מממש נקרא השמה.
\n",
- "בהשמה אנחנו שמים את הערך שנמצא בצד ימין של השווה, בתוך משתנה ששמו נכתב בצד שמאל של השווה.
\n",
+ "
\n",
+ "תחילה נשים לב לכך שאף שהשתמשנו בסימן =
, השורה הראשונה היא לא שוויון מהסוג שאנחנו רגילים אליו.
\n",
+ "משמעות הסימן בתכנות שונה לחלוטין, והעיקרון שאותו הוא מממש נקרא השמה.
\n",
+ "בהשמה אנחנו שמים את הערך שנמצא בצד ימין של השווה, בתוך משתנה ששמו נכתב בצד שמאל של השווה.
\n",
"אחרי שביצענו את הפעולה הזו, בכל פעם שנכתוב את שמו של המשתנה, פייתון תבין את מה שכתוב שם כאילו רשמנו את הערך שנמצא בתוכו.\n",
"
\n", + "
\n", "ניצור משתנים גם עבור שאר הערכים:\n", "
" ] @@ -120,7 +120,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "או אם בא לנו להיות אפילו מובנים יותר, ניתן למשתנים שמות ברורים:\n", "
" ] @@ -142,9 +142,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אם נרצה לתאר את הקוד שלנו במילים, נוכל להגיד שיצרנו שלושה משתנים שאליהם השמנו את הנתונים הדרושים לנו לחישוב נפח הפיצה.
\n",
- "בסוף, חישבנו את נפח הפיצה, ואת התוצאה השמנו למשתנה נוסף בשם pizza_volume.
\n",
+ "
\n",
+ "אם נרצה לתאר את הקוד שלנו במילים, נוכל להגיד שיצרנו שלושה משתנים שאליהם השמנו את הנתונים הדרושים לנו לחישוב נפח הפיצה.
\n",
+ "בסוף, חישבנו את נפח הפיצה, ואת התוצאה השמנו למשתנה נוסף בשם pizza_volume.
\n",
"את הערך הנמצא במשתנה הזה הדפסנו למסך.\n",
"
מונחים
" + "###מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "=
כשרוצים לבצע השמה.איך משתנים עובדים?
" + "##איך משתנים עובדים?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אפשר לדמיין משתנים כמצביע לייזר קטן.
\n",
- "כשאתם מבצעים השמה, אתם מבקשים מפייתון ליצור לייזר בשם שבחרתם, ולהצביע בעזרתו על ערך מסוים.
\n",
- "נניח, במקרה שבו pi = 3.14
, אנחנו מבקשים מפייתון ליצור לייזר בשם pi שיצביע על הערך 3.14.
\n",
- "בכל פעם שתציינו בהמשך הקוד את שם הלייזר, פייתון תבדוק להיכן הוא מצביע, ותיקח את הערך שנמצא שם.
\n",
+ "
\n",
+ "אפשר לדמיין משתנים כמצביע לייזר קטן.
\n",
+ "כשאתם מבצעים השמה, אתם מבקשים מפייתון ליצור לייזר בשם שבחרתם, ולהצביע בעזרתו על ערך מסוים.
\n",
+ "נניח, במקרה שבו pi = 3.14
, אנחנו מבקשים מפייתון ליצור לייזר בשם pi שיצביע על הערך 3.14.
\n",
+ "בכל פעם שתציינו בהמשך הקוד את שם הלייזר, פייתון תבדוק להיכן הוא מצביע, ותיקח את הערך שנמצא שם.
\n",
"אם כך, לצורך האנלוגיה הזו, הלייזר הוא שם המשתנה, שמצביע על ערך המשתנה.\n",
"
חוקים לשמות משתנים
" + "##חוקים לשמות משתנים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "0–9
), אותיות לטיניות גדולות (A-Z
) או קטנות (a-z
) וקו תחתון (_
).\n", + "
\n", "המוסכמה הראשונה נכונה ברוב המקרים, אך לא בכולם. בעתיד ניכנס לעובי הקורה בכל הנוגע לכתיבת קוד בהתאם למוסכמות בעולם התכנות.\n", "
" ] @@ -224,30 +223,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###תרגול שמות משתנים
" + "###תרגול שמות משתנים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "####בדקו האם שם המשתנה עומד בחוקים ובמוסכמות
" + "####בדקו האם שם המשתנה עומד בחוקים ובמוסכמות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " עבור כל אחד משמות המשתנים שלפניכם, רשמו במחברת או בהערה האם שם המשתנה עומד בחוקים ובמוסכמות.
\n",
+ "
\n",
+ " עבור כל אחד משמות המשתנים שלפניכם, רשמו במחברת או בהערה האם שם המשתנה עומד בחוקים ובמוסכמות.
\n",
" אחרי שרשמתם בצד, תקנו את שמות המשתנים הבעיתיים, וודאו שהרצת התא לא תגרום לשגיאה.\n",
"
עריכת ערכי משתנים
" + "##עריכת ערכי משתנים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "בתחילת המחברת ביצענו כמה השמות למשתנים. לעיתים קרובות, נרצה לערוך את התוכן של המשתנה.
\n",
+ "
\n",
+ "בתחילת המחברת ביצענו כמה השמות למשתנים. לעיתים קרובות, נרצה לערוך את התוכן של המשתנה.
\n",
"בואו נראה דוגמה:\n",
"
\n",
- "מה קרה כאן?
\n",
- "בשורה 1 עשינו השמה פשוטה, כפי שלמדנו קודם. עד כאן הכול מוכר.
\n",
+ "
\n",
+ "מה קרה כאן?
\n",
+ "בשורה 1 עשינו השמה פשוטה, כפי שלמדנו קודם. עד כאן הכול מוכר.
\n",
"בשורה 2 הרעיון זהה. כל מה שאתם צריכים לזכור הוא שפייתון תחשב קודם את צד ימין (הערך) ורק אז תכניס אותו לתוך צד שמאל (שם המשתנה).\n",
"
\n", + "
\n", "בואו נעקוב אחרי דרך המחשבה של פייתון כשהיא קוראת את השורה השנייה:\n", "
\n", "my_age
.1 + 24
.my_age
.my_age
.תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###ארגז קרמבו
" + "###ארגז קרמבו
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "קניתי 5 ארגזים גדולים של קרמבו. בארגז יש 10 יחידות קרמבו בכל שורה, ו־4 יחידות קרמבו בכל עמודה.
\n",
+ "
\n",
+ "קניתי 5 ארגזים גדולים של קרמבו. בארגז יש 10 יחידות קרמבו בכל שורה, ו־4 יחידות קרמבו בכל עמודה.
\n",
"נסו לשים כל אחד מהנתונים שמצאתם בשאלה במשתנה, ולהדפיס כמה קרמבו יש לי.\n",
"
מבריחים מהבריכה
" + "###מבריחים מהבריכה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אורך הבריכה הפרטית שהייתי מת שתהיה לי הוא 50 מטר, ורוחבה 25 מטר.
\n",
- "כדי להיתקע בכמה שיותר אנשים בדרך, אני מתכנן לשחות באלכסון, מהפינה האחת של הבריכה לפינה הנגדית לה.
\n",
- "אני נמצא בפינה שממנה אני מתכנן לצאת. תוכלו לעזור לי להבין מה המרחק שאצטרך לשחות כדי להגיע לפינה הנגדית?
\n",
- "נסו לעשות שימוש ב־3 משתנים כדי לפתור את השאלה.
\n",
+ "
\n",
+ "אורך הבריכה הפרטית שהייתי מת שתהיה לי הוא 50 מטר, ורוחבה 25 מטר.
\n",
+ "כדי להיתקע בכמה שיותר אנשים בדרך, אני מתכנן לשחות באלכסון, מהפינה האחת של הבריכה לפינה הנגדית לה.
\n",
+ "אני נמצא בפינה שממנה אני מתכנן לצאת. תוכלו לעזור לי להבין מה המרחק שאצטרך לשחות כדי להגיע לפינה הנגדית?
\n",
+ "נסו לעשות שימוש ב־3 משתנים כדי לפתור את השאלה.
\n",
"טיפ: סיפרו לי שנוסחת אלכסון היא $(l^2 + w^2)^{0.5}$, כאשר \n",
" ${l}$\n",
" מציין את אורך הבריכה ו־\n",
@@ -404,9 +403,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "
\n",
- "לאחר שיפוץ של הבריכה הפרטית שהייתי מת שתהיה לי, אורכה גדל פי 2.
\n",
- "כחלק מהשיפוצים גם הוסיפו לבריכה מסלולים, כך שהרוחב שלה גדל בגודל השווה לאורך החדש של הבריכה.
\n",
+ "
\n",
+ "לאחר שיפוץ של הבריכה הפרטית שהייתי מת שתהיה לי, אורכה גדל פי 2.
\n",
+ "כחלק מהשיפוצים גם הוסיפו לבריכה מסלולים, כך שהרוחב שלה גדל בגודל השווה לאורך החדש של הבריכה.
\n",
"הדפיסו את הגודל החדש של הבריכה. אל תשנו את הקוד למעלה; פשוט המשיכו אותו בתא הבא, והשתמשו בהשמה כדי להתאים את המשתנים למציאות החדשה.\n",
"
\n",
- " ניתן להתייחס גם למשתנים שהוגדרו בתאים אחרים במחברת.
\n",
- " לדוגמה, אם הרצנו תא שבו הוגדר משתנה בשם w, מאותו רגע כל תא אחר במחברת יוכל להשתמש במשתנה w.
\n",
+ "
\n",
+ " ניתן להתייחס גם למשתנים שהוגדרו בתאים אחרים במחברת.
\n",
+ " לדוגמה, אם הרצנו תא שבו הוגדר משתנה בשם w, מאותו רגע כל תא אחר במחברת יוכל להשתמש במשתנה w.
\n",
" ערכו של משתנה מסויים בזמן נתון הוא הערך שהוגדר עבורו בתא האחרון שהורץ במחברת.\n",
"
ברכות
" + "###ברכות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "לדוגמה: אם השם שלי הוא David והברכה שהוכנסה היא You are cool, המשפט שיצא הוא David You are cool.\n", "
" ] diff --git a/week1/5_Input_and_Casting.ipynb b/week1/5_Input_and_Casting.ipynb index c286f4e..ed58809 100644 --- a/week1/5_Input_and_Casting.ipynb +++ b/week1/5_Input_and_Casting.ipynb @@ -4,30 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#קלט
" + "#קלט
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##מה זה קלט?
" + "##מה זה קלט?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אחד הדברים הכיפיים ביותר בתכנות, הוא להשתמש ולהגיב לנתונים שנאספו ממקור חיצוני. נתונים אלו נקראים במינוח מקצועי קלט.
\n",
- "קלט יכול להגיע מכמה מקורות: מטקסט שהמשתמש מזין באמצעות המקלדת, או מקובץ חיצוני.
\n",
+ "
\n",
+ "אחד הדברים הכיפיים ביותר בתכנות, הוא להשתמש ולהגיב לנתונים שנאספו ממקור חיצוני. נתונים אלו נקראים במינוח מקצועי קלט.
\n",
+ "קלט יכול להגיע מכמה מקורות: מטקסט שהמשתמש מזין באמצעות המקלדת, או מקובץ חיצוני.
\n",
"בשיעורים הקרובים נתמקד בקלט שהמשתמש מזין באמצעות המקלדת, ובעתיד נרחיב את היכולות שלנו בשיטות נוספות.\n",
"
דוגמאות לקלט
" + "###דוגמאות לקלט
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "כיצד מקבלים קלט?
" + "##כיצד מקבלים קלט?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "כדי לקבל קלט מהמשתמש באמצעות המקלדת, נשתמש ב־input()
, כשבתוך הסוגריים נכתוב מחרוזת כלשהי שתוצג למשתמש (ראו דוגמה).
\n",
- "מטרת המחרוזת – להסביר למשתמש שאנחנו מצפים ממנו לקלט, ומאיזה סוג.
\n",
+ "
\n",
+ "כדי לקבל קלט מהמשתמש באמצעות המקלדת, נשתמש ב־input()
, כשבתוך הסוגריים נכתוב מחרוזת כלשהי שתוצג למשתמש (ראו דוגמה).
\n",
+ "מטרת המחרוזת – להסביר למשתמש שאנחנו מצפים ממנו לקלט, ומאיזה סוג.
\n",
"בואו נראה איך זה עובד:\n",
"
\n",
- "השורה הראשונה היא החידוש פה: בשורה זו אנחנו מבקשים קלט מהמשתמש (את השם שלו), ושומרים את הקלט שהזין במשתנה בשם name
.
\n",
- "ברגע שפייתון מגיעה ל־input()
, היא עוצרת כל פעולה, עד שתקבל קלט מהמשתמש.
\n",
- "לאחר מכן היא \"מחליפה\" את input()
בקלט שקיבלה מהמשתמש.
\n",
+ "
\n",
+ "השורה הראשונה היא החידוש פה: בשורה זו אנחנו מבקשים קלט מהמשתמש (את השם שלו), ושומרים את הקלט שהזין במשתנה בשם name
.
\n",
+ "ברגע שפייתון מגיעה ל־input()
, היא עוצרת כל פעולה, עד שתקבל קלט מהמשתמש.
\n",
+ "לאחר מכן היא \"מחליפה\" את input()
בקלט שקיבלה מהמשתמש.
\n",
"לדוגמה, אם הזנתי כקלט Moishalah, מה שיקרה בפועל אלו השורות הבאות (השוו עם הקוד מלמעלה):\n",
"
תרגול
" + "###תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "כתבו קוד המבקש כקלט שלושה נתונים: שם פרטי, שם משפחה ותאריך לידה.
\n",
- "הקוד יציג למשתמש ברכה חביבה.
\n",
+ "
\n",
+ "כתבו קוד המבקש כקלט שלושה נתונים: שם פרטי, שם משפחה ותאריך לידה.
\n",
+ "הקוד יציג למשתמש ברכה חביבה.
\n",
"לדוגמה, עבור הנתונים Israel
, Cohen
, 22/07/1992
, הוא יציג:\n",
"
המרת ערכים
" + "##המרת ערכים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "מי מכם שזוכר היטב את השיעורים הקודמים, ודאי יודע שלכל ערך שנכתוב יש סוג (או \"טיפוס\").\n", "
" ] @@ -192,7 +192,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אם אתם מרגישים שממש הספקתם לשכוח, שווה לכם להציץ בפרק 3, שמלמד על טיפוסים.\n", "
" ] @@ -201,8 +201,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אם נשתעשע מעט עם input()
, נגלה מהר מאוד שלפעמים הקלט מהמשתמש לא מגיע אלינו בדיוק כמו שרצינו.
\n",
+ "
\n",
+ "אם נשתעשע מעט עם input()
, נגלה מהר מאוד שלפעמים הקלט מהמשתמש לא מגיע אלינו בדיוק כמו שרצינו.
\n",
"בואו נראה דוגמה:\n",
"
\n", + "
\n", " הזינו את הנתונים בסעיפים 1 עד 5 לתוכנית התפוחים של משה ואורלי המופיעה מעלה, ונסו להבין מה קרה.\n", "
\n", - "\n",
- " חשוב!
\n",
+ "
\n",
+ "חשוב!
\n",
" פתרו לפני שתמשיכו!\n",
"
0
תפוחים, ולאורלי יש 5
תפוחים.2
תפוחים, ולאורלי יש 3
תפוחים.-15
תפוחים, ולאורלי יש 2
תפוחים.אז מה קרה בתרגול?
" + "###אז מה קרה בתרגול?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אף על פי שרצינו להתייחס לקלט כאל נתון מספרי (int
), פייתון החליטה להתייחס אליו כמחרוזת (str
), ולכן חיברה בין מחרוזות ולא בין מספרים.
\n",
+ "
\n",
+ "אף על פי שרצינו להתייחס לקלט כאל נתון מספרי (int
), פייתון החליטה להתייחס אליו כמחרוזת (str
), ולכן חיברה בין מחרוזות ולא בין מספרים.
\n",
"מכאן אנחנו לומדים חוק חשוב מאוד, שאם ניטיב לזכור אותו יחסוך לנו הרבה תקלות בעתיד:\n",
"
\n", + "
\n",
" כשאנחנו מקבלים קלט באמצעות input()
, הערך שנקבל יהיה תמיד מטיפוס מחרוזת.\n",
"
\n",
- "שימו לב שניסיון לעשות פעולות בין טיפוסים שונים (כמו מחרוזת ומספר שלם) עלול לגרום לכם לשגיאות בתרגולים הקרובים.
\n",
+ "
\n",
+ "שימו לב שניסיון לעשות פעולות בין טיפוסים שונים (כמו מחרוזת ומספר שלם) עלול לגרום לכם לשגיאות בתרגולים הקרובים.
\n",
"נסו, לדוגמה, להריץ את הקוד הבא:\n",
"
המרת טיפוסים (Casting)
" + "###המרת טיפוסים (Casting)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " שפכנו ליטר מים לקערה עם 5 קוביות קרח. כמה יש בה עכשיו?
\n",
- " קשה לנו מאוד לענות על השאלה כיוון שהיא מנוסחת באופן גרוע ומערבת דברים מסוגים שונים. מאותה סיבה בדיוק לפייתון קשה עם הקוד מלמעלה.
\n",
- " נוכל להקפיא את המים ולמדוד כמה קרח יש בקערה, או להמיס את הקרח ולמדוד כמה מים יש בה.
\n",
+ "
\n",
+ " שפכנו ליטר מים לקערה עם 5 קוביות קרח. כמה יש בה עכשיו?
\n",
+ " קשה לנו מאוד לענות על השאלה כיוון שהיא מנוסחת באופן גרוע ומערבת דברים מסוגים שונים. מאותה סיבה בדיוק לפייתון קשה עם הקוד מלמעלה.
\n",
+ " נוכל להקפיא את המים ולמדוד כמה קרח יש בקערה, או להמיס את הקרח ולמדוד כמה מים יש בה.
\n",
" בפייתון נצטרך להחליט מה אנחנו רוצים לעשות, ולהמיר את הערכים שאנחנו עובדים איתם לטיפוסים המתאימים לפני שנבצע את הפעולה.\n",
"
\n", + "
\n",
"נזכיר שהטיפוס של כל קלט שנקבל בעזרת input()
תמיד יהיה מחרוזת (str
):\n",
"
\n",
- "כזכור, כל עוד הקלט שלנו הוא מסוג מחרוזת, פעולות כמו חיבור שלו עם מספר ייכשלו.
\n",
- "לכן נצטרך לדאוג ששניהם יהיו מאותו סוג על ידי המרה של אחד הערכים מסוג אחד לסוג אחר.
\n",
- "תהליך הפיכת ערך לסוג טיפוס אחר נקרא המרת טיפוסים, או Casting / Type Conversion.
\n",
+ "
\n",
+ "כזכור, כל עוד הקלט שלנו הוא מסוג מחרוזת, פעולות כמו חיבור שלו עם מספר ייכשלו.
\n",
+ "לכן נצטרך לדאוג ששניהם יהיו מאותו סוג על ידי המרה של אחד הערכים מסוג אחד לסוג אחר.
\n",
+ "תהליך הפיכת ערך לסוג טיפוס אחר נקרא המרת טיפוסים, או Casting / Type Conversion.
\n",
"אם נבחן את בעיית התפוחים של משה מהכותרת הקודמת:\n",
"
\n",
- "נראה שהקוד לא יעבוד, כיוון שאין אפשרות לחבר בין מחרוזת (מספר התפוחים של משה מהקלט של המשתמש) לבין מספר (ה־1 שאנחנו רוצים להוסיף).
\n",
- "כיוון שהמטרה היא להוסיף תפוח 1 למספר מסוים של תפוחים, נבחר להמיר את moshe_apples
למספר שלם (int
) במקום מחרוזת (str
).
\n",
+ "
\n",
+ "נראה שהקוד לא יעבוד, כיוון שאין אפשרות לחבר בין מחרוזת (מספר התפוחים של משה מהקלט של המשתמש) לבין מספר (ה־1 שאנחנו רוצים להוסיף).
\n",
+ "כיוון שהמטרה היא להוסיף תפוח 1 למספר מסוים של תפוחים, נבחר להמיר את moshe_apples
למספר שלם (int
) במקום מחרוזת (str
).
\n",
"נעשה זאת כך:\n",
"
\n",
- "איזה כיף, המרנו את מספר התפוחים של משה לערך מטיפוס שלם (שורה 2), ועכשיו הקוד עובד!
\n",
- "שימו לב שעכשיו אם נרצה להדפיס את מספר התפוחים לצד משפט שאומר \"למשה יש X תפוחים\", אנחנו עלולים להיתקל בבעיה.
\n",
- "המשפט שאנחנו רוצים להדפיס הוא str
, ומספר התפוחים שחישבנו ושננסה לשרשר אליו יהיה int
.
\n",
+ "
\n",
+ "איזה כיף, המרנו את מספר התפוחים של משה לערך מטיפוס שלם (שורה 2), ועכשיו הקוד עובד!
\n",
+ "שימו לב שעכשיו אם נרצה להדפיס את מספר התפוחים לצד משפט שאומר \"למשה יש X תפוחים\", אנחנו עלולים להיתקל בבעיה.
\n",
+ "המשפט שאנחנו רוצים להדפיס הוא str
, ומספר התפוחים שחישבנו ושננסה לשרשר אליו יהיה int
.
\n",
"ראו איך זה ישפיע על התוכנית:\n",
"
\n",
- "פייתון התריעה לפנינו שיש פה בעיה: בשורה האחרונה, היא לא מצליחה לחבר את מספר התפוחים עם המחרוזות הנמצאות בצדדיו.
\n",
- "מה הפתרון?
\n",
+ "
\n",
+ "פייתון התריעה לפנינו שיש פה בעיה: בשורה האחרונה, היא לא מצליחה לחבר את מספר התפוחים עם המחרוזות הנמצאות בצדדיו.
\n",
+ "מה הפתרון?
\n",
"אם אמרתם להמיר את מספר התפוחים של משה למחרוזת, זה אכן יעבוד. נעשה את זה ככה:\n",
"
טבלת המרה
" + "###טבלת המרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "כדי להמיר לסוג מסוים, כל מה שאתם צריכים לדעת זה את הסוג שאליו אתם רוצים להמיר.
\n",
+ "
\n",
+ "כדי להמיר לסוג מסוים, כל מה שאתם צריכים לדעת זה את הסוג שאליו אתם רוצים להמיר.
\n",
"משם פשוט בחרו את השם הרלוונטי מהטבלה שאתם כבר מכירים:\n",
"
תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###קרמבו
" + "###קרמבו
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "לגברת עמיטלי מחוות ביסקוויט יש מפעל משוגע לייצור קרמבו.
\n",
- "אחד התפקידים במפעל הוא הרכבת קופסאות לאריזת הקרמבו ומילויה. אדון מרקוב מאייש תפקיד זה.
\n",
- "מרקוב מחליט על מימדיה של כל קופסת קרמבו טעים חדשה שהוא ממלא: כמה יחידות קרמבו יכנסו לגובה, כמה יכנסו לרוחב וכמה יכנסו לאורך האריזה.
\n",
- "בנו תוכנה שתעזור למרקוב לחשב את כמות הקרמבו שהוא הכניס לקופסה, לפי הנוסחה: $w \\times h \\times l$, רוחב כפול גובה כפול אורך.
\n",
- "לדוגמה: התוכנה תקבל ממרקוב כקלט 3 עבור האורך, 4 עבור הרוחב ו־2.5 עבור הגובה, ותחזיר את הפלט 30, שהוא $2.5 \\times 3 \\times 4$.\n",
+ "
\n",
+ "לגברת עמיטלי מחוות ביסקוויט יש מפעל משוגע לייצור קרמבו.
\n",
+ "אחד התפקידים במפעל הוא הרכבת קופסאות לאריזת הקרמבו ומילויה. אדון מרקוב מאייש תפקיד זה.
\n",
+ "מרקוב מחליט על מימדיה של כל קופסת קרמבו טעים חדשה שהוא ממלא: כמה יחידות קרמבו יכנסו לגובה, כמה יכנסו לרוחב וכמה יכנסו לאורך האריזה.
\n",
+ "בנו תוכנה שתעזור למרקוב לחשב את כמות הקרמבו שהוא הכניס לקופסה, לפי הנוסחה: $w \\times h \\times l$, רוחב כפול גובה כפול אורך.
\n",
+ "לדוגמה: התוכנה תקבל ממרקוב כקלט 3 עבור האורך, 4 עבור הרוחב ו־2.5 עבור הגובה, ותחזיר את הפלט 30, שהוא $2.5 \\times 3 \\times 4$.\n",
"
תה אמריקה II
" + "###תה אמריקה II
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "חזרו למחברת 2. זוכרים את התרגיל האחרון שהיה שם, על התה והמרת מעלות פרנהייט לצלזיוס?
\n",
- "בואו נבנה מחשבון פרנהייט לצלזיוס! בקשו מהמשתמש להכניס מספר בפרנהייט, והדפיסו את המספר בצלזיוס.
\n",
- "להזכירכם, הנוסחה היא: (5 חלקי 9) כפול (מעלות בפרנהייט פחות 32)
, או בכתיב מתמטי, $C = \\frac{5}{9}\\times(F - 32)$.
\n",
+ "
\n",
+ "חזרו למחברת 2. זוכרים את התרגיל האחרון שהיה שם, על התה והמרת מעלות פרנהייט לצלזיוס?
\n",
+ "בואו נבנה מחשבון פרנהייט לצלזיוס! בקשו מהמשתמש להכניס מספר בפרנהייט, והדפיסו את המספר בצלזיוס.
\n",
+ "להזכירכם, הנוסחה היא: (5 חלקי 9) כפול (מעלות בפרנהייט פחות 32)
, או בכתיב מתמטי, $C = \\frac{5}{9}\\times(F - 32)$.
\n",
"לדוגמה: עבור הקלט 212 התוכנה תדפיס 100, כיוון ש־212 מעלות פרנהייט הן 100 מעלות צלזיוס.\n",
"
מסטיק בזוקה
" + "###מסטיק בזוקה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "לפי מסטיק בזוקה, עד גיל 21 תגיעו לירח. אנחנו פחות אופטימיים (לנו פשוט זה פחות עבד), ומנבאים לך הצלחה עד גיל 90.
\n",
- "כתוב תוכנה שמקבלת כקלט את השם שלך ואת הגיל שלך, ומחשבת בעוד כמה שנים תגיע לירח לפי הנבואה שלנו.
\n",
- "התוכנה תדפיס את המשפט: X, wait another Y years.
, כאשר X יוחלף בשמך ו־Y יוחלף במספר השנים שתצטרך לחכות עד גיל 90.
\n",
+ "
\n",
+ "לפי מסטיק בזוקה, עד גיל 21 תגיעו לירח. אנחנו פחות אופטימיים (לנו פשוט זה פחות עבד), ומנבאים לך הצלחה עד גיל 90.
\n",
+ "כתוב תוכנה שמקבלת כקלט את השם שלך ואת הגיל שלך, ומחשבת בעוד כמה שנים תגיע לירח לפי הנבואה שלנו.
\n",
+ "התוכנה תדפיס את המשפט: X, wait another Y years.
, כאשר X יוחלף בשמך ו־Y יוחלף במספר השנים שתצטרך לחכות עד גיל 90.
\n",
"לדוגמה: אם הכנסת לתוכנה שגילך הוא 25 ושמך הוא ים, התוכנה תדפיס:\n",
"
ביטויים בוליאניים
" + "#ביטויים בוליאניים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " החומר במחברת זו הוא מעט תיאורטי. אין סיבה להיות עצובים, במחברות הבאה נעשה בו שימוש רחב.
\n",
+ "
\n",
+ " החומר במחברת זו הוא מעט תיאורטי. אין סיבה להיות עצובים, במחברות הבאה נעשה בו שימוש רחב.
\n",
" ודאו שאתם מבינים היטב את החומר במחברת זו כדי לבסס את הידע שלכם כראוי.\n",
"
הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "ווהו! רק פתחנו מחברת וכבר זרקו עלינו מילים מפוצצות. מה בוליאניים עכשיו?
\n",
- "בכל הנוגע לתחום שלנו, זה הרבה יותר פשוט ממה שזה נשמע.
\n",
+ "
\n",
+ "ווהו! רק פתחנו מחברת וכבר זרקו עלינו מילים מפוצצות. מה בוליאניים עכשיו?
\n",
+ "בכל הנוגע לתחום שלנו, זה הרבה יותר פשוט ממה שזה נשמע.
\n",
"בתכנות, ביטוי נחשב ביטוי בוליאני אם תוצאתו היא אמת או שקר.\n",
"
דוגמאות
" + "###דוגמאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "אופרטורי השוואה
" + "##אופרטורי השוואה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "לא הספקתם להתאושש מהבוליאניים האלו וכבר אני מוריד עליכם עוד מכה. קורס חסר רחמים.
\n",
- "אבל גם הפעם זה ממש פשוט: אופרטור הוא בסך הכול סימן שמייצג פעולה כלשהי, כמו שווה או ועוד. אתם אולי אפילו זוכרים את אופרטור ההשמה מהשיעור על מה הם משתנים.
\n",
+ "
\n",
+ "לא הספקתם להתאושש מהבוליאניים האלו וכבר אני מוריד עליכם עוד מכה. קורס חסר רחמים.
\n",
+ "אבל גם הפעם זה ממש פשוט: אופרטור הוא בסך הכול סימן שמייצג פעולה כלשהי, כמו שווה או ועוד. אתם אולי אפילו זוכרים את אופרטור ההשמה מהשיעור על מה הם משתנים.
\n",
"אז מהם אופרטורי השוואה? ובכן, אלו סימנים שעוזרים לנו לבצע השוואות בין איברים שונים, שלהם אנחנו קוראים אופרנדים.\n",
"
\n",
- "בואו נכיר את אופרטור ההשוואה הראשון שלנו: ==
.
\n",
+ "
\n",
+ "בואו נכיר את אופרטור ההשוואה הראשון שלנו: ==
.
\n",
"הריצו את הביטויים הבוליאניים הבאים, ונסו לנחש מה הוא עושה.\n",
"
\n", + "
\n", "הדוגמה הזו מלמדת אותנו 3 דברים מגניבים:\n", "
" ] @@ -193,7 +193,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "True
או False
.==
והוא משווה בין 2 ערכים בפייתון.float
עם int
), ויש כאלו שלא (float
עם str
או int
עם str
).טיפוס בוליאני
" + "###טיפוס בוליאני
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "בתרגיל שלמעלה קיבלנו כתוצאה ערך חדש, שמעולם לא שמענו עליו. בואו נבדוק מאיזה סוג הוא!\n", "
" ] @@ -238,9 +238,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "ווהו! אז אם התרגלנו עד עכשיו שיש 3 טיפוסים שאנחנו מכירים: str
, int
ו־float
, הכירו את הבחור החדש בשכונה!
\n",
- "bool
הוא טיפוס חביב ופשוט שמייצג רק 2 ערכים אפשריים: True
או False
.
\n",
+ "
\n",
+ "ווהו! אז אם התרגלנו עד עכשיו שיש 3 טיפוסים שאנחנו מכירים: str
, int
ו־float
, הכירו את הבחור החדש בשכונה!
\n",
+ "bool
הוא טיפוס חביב ופשוט שמייצג רק 2 ערכים אפשריים: True
או False
.
\n",
"כל אופרטור השוואה שנחיל על שני ערכים, יחזיר תמיד ערך מסוג bool
(חוץ מכשפייתון תתריע על שגיאה).\n",
"
\n",
- " טעות נפוצה בעת שימוש בערכים בוליאניים היא לא להתחשב ברגישות לאותיות גדולות/קטנות.
\n",
+ "
\n",
+ " טעות נפוצה בעת שימוש בערכים בוליאניים היא לא להתחשב ברגישות לאותיות גדולות/קטנות.
\n",
" לדוגמה: True
יהיה תקין בעוד ש־true
יקפיץ שגיאה.\n",
"
אופרטורי השוואה נוספים
" + "###אופרטורי השוואה נוספים
" ] }, { @@ -277,10 +277,10 @@ "|:----------|:----------|:--------|------:|\n", "| True | 4 == 4 | האם צד שמאל שווה לצד ימין | == |\n", "| False | 4 != 4 | האם צד שמאל שונה מצד ימין | != |\n", - "| True | 5 > 4 | האם צד שמאל גדול יותר מצד ימין | > |\n", - "| False | 4 > 5 | האם צד שמאל קטן יותר מצד ימין | < |\n", - "| False | 2 >= 4 | האם צד שמאל גדול או שווה לצד ימין | >= |\n", - "| True | 4 <= 5 | האם צד שמאל קטן או שווה לצד ימין | <= |\n", + "| True | 5 > 4 | האם צד שמאל גדול יותר מצד ימין | > |\n", + "| False | 4 > 5 | האם צד שמאל קטן יותר מצד ימין | < |\n", + "| False | 2 >= 4 | האם צד שמאל גדול או שווה לצד ימין | >= |\n", + "| True | 4 <= 5 | האם צד שמאל קטן או שווה לצד ימין | <= |\n", "| True | 'hell' in 'hello' | האם צד שמאל נמצא ברצף בצד ימין | in |" ] }, @@ -288,14 +288,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###מונחים
" + "###מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "True
) או שקר (False
).תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###שווה את זה?
" + "###שווה את זה?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "רשמו בצד את התוצאות של כל אחת מהשורות הבאות.
\n",
- "רק לאחר מכן הריצו ובדקו האם צדקתם בתשובתכם.
\n",
+ "
\n",
+ "רשמו בצד את התוצאות של כל אחת מהשורות הבאות.
\n",
+ "רק לאחר מכן הריצו ובדקו האם צדקתם בתשובתכם.
\n",
"בחלק מהסעיפים (בייחוד באלו שקשורים ב־in
) דרושה קצת אינטואיציה.\n",
"
\n",
- " טעות נפוצה בקרב מתחילים היא לשכוח שבהשוואה בין נתונים מספריים יש להמיר קלט מהמשתמש ל־int
, ורק אז לבצע השוואה.
\n",
+ "
\n",
+ " טעות נפוצה בקרב מתחילים היא לשכוח שבהשוואה בין נתונים מספריים יש להמיר קלט מהמשתמש ל־int
, ורק אז לבצע השוואה.
\n",
" פייתון לא מתריעה על טעות זו, אבל השוואה שכזו לא תיתן לכם את התוצאה שאליה התכוונתם (ראו דוגמה למעלה).\n",
"
מעורב ירושלמי
" + "###מעורב ירושלמי
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אנחנו הולכים להגדיר פה כמה משתנים מעניינים:\n", "
" ] @@ -529,8 +529,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "הריצו את התא שנמצא למעלה: סמנו אותו ולחצו CTRL + ENTER.
\n",
+ "
\n",
+ "הריצו את התא שנמצא למעלה: סמנו אותו ולחצו CTRL + ENTER.
\n",
"מה יהיו התוצאות של הביטויים הבאים? כתבו אותן בצד, ואז הריצו ובדקו האם תשובתכם הייתה נכונה.\n",
"
\n",
- " טעות נפוצה היא להתבלבל בין הסימנים =
ו־==
.
\n",
- " זכרו: סימן שיוויון אחד (=
) מבצע פעולה של הכנסת הערך מימין למשתנה ששמו מופיע משמאל.
\n",
- " סימן שיוויון כפול (==
) היא פעולה אחרת לחלוטין, שבודקת האם הערך מימין זהה לערך משמאל.
\n",
- "
\n",
+ " טעות נפוצה היא להתבלבל בין הסימנים =
ו־==
.
\n",
+ " זכרו: סימן שיוויון אחד (=
) מבצע פעולה של הכנסת הערך מימין למשתנה ששמו מופיע משמאל.
\n",
+ " סימן שיוויון כפול (==
) היא פעולה אחרת לחלוטין, שבודקת האם הערך מימין זהה לערך משמאל.
\n",
+ "
בולילנד
" + "###בולילנד
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "במחוז בולילנד השערורייתי, מותר לאכול פיצה רק מגיל 25 ומעלה.
\n",
- "קבלו כקלט את גילו של המשתמש. הדפיסו לו True אם הוא יכול לאכול פיצה בבולילנד, או False אם הוא לא יכול.
\n",
+ "
\n",
+ "במחוז בולילנד השערורייתי, מותר לאכול פיצה רק מגיל 25 ומעלה.
\n",
+ "קבלו כקלט את גילו של המשתמש. הדפיסו לו True אם הוא יכול לאכול פיצה בבולילנד, או False אם הוא לא יכול.
\n",
"לדוגמה: אם דוד הזין שגילו הוא 23, עליכם להציג לו False.\n",
"
\n",
- " השורה print(1 == 1)
תדפיס למשתמש True.\n",
+ "
\n",
+ " השורה print(1 == 1)
תדפיס למשתמש True.\n",
"
אופרטורים לוגיים
" + "#אופרטורים לוגיים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- " החומר במחברת זו הוא מעט תיאורטי. אין סיבה להיות עצובים, במחברת הבאה נעשה בו שימוש רחב.
\n",
+ "
\n",
+ " החומר במחברת זו הוא מעט תיאורטי. אין סיבה להיות עצובים, במחברת הבאה נעשה בו שימוש רחב.
\n",
" ודאו שאתם מבינים היטב את החומר במחברת זו כדי לבסס את הידע שלכם כראוי.\n",
"
מבוא
" + "##מבוא
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "בשיעור הקודם למדנו קצת על ביטויים בוליאניים – ביטויים שתוצאתם היא בהכרח אמת או שקר.
\n",
- "ראינו איך מנסחים ביטויים כאלו, ולמדנו על אופרטורי השוואה כמו ==
או in
, שבעזרתם אנחנו מחליטים באיזו צורה אנחנו רוצים להשוות בין ביטויים.
\n",
+ "
\n",
+ "בשיעור הקודם למדנו קצת על ביטויים בוליאניים – ביטויים שתוצאתם היא בהכרח אמת או שקר.
\n",
+ "ראינו איך מנסחים ביטויים כאלו, ולמדנו על אופרטורי השוואה כמו ==
או in
, שבעזרתם אנחנו מחליטים באיזו צורה אנחנו רוצים להשוות בין ביטויים.
\n",
"למדנו שביטויים כאלו יכולים לעזור לנו לשאול שאלות מעניינות, כמו אם למשתמש יש יותר מ־1000 ש\"ח בבנק, או אם לבת שלו קוראים \"שמחה\".\n",
"
\n",
- "אבל מה יקרה כשנרצה לשאול שאלות מורכבות יותר?
\n",
- "לדוגמה, אם התנאים להרשמה לבנק שלנו הם גם שיהיו לך יותר מ־1,000 ש\"ח, וגם שתלמד בפקולטה נחשבת?
\n",
- "למרבה הצער, בכלים שיש ברשותנו כרגע לא נוכל לנסח שאלות מורכבות שכאלו.
\n",
+ "
\n",
+ "אבל מה יקרה כשנרצה לשאול שאלות מורכבות יותר?
\n",
+ "לדוגמה, אם התנאים להרשמה לבנק שלנו הם גם שיהיו לך יותר מ־1,000 ש\"ח, וגם שתלמד בפקולטה נחשבת?
\n",
+ "למרבה הצער, בכלים שיש ברשותנו כרגע לא נוכל לנסח שאלות מורכבות שכאלו.
\n",
"במחברת זו זה נלמד על כלים חדשים, אופרטורים לוגיים, שיאפשרו לנו לנסח שאלות מורכבות יותר.\n",
"
הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "כאמור, לעזרתנו מתגייסים \"אופרטורים לוגיים\", שמטרתם לאפשר לנו לשאול שאלות בנוגע לקשרים בין ביטויים בוליאניים.
\n",
- "ישנם שלושה אופרטורים לוגיים: and
(\"וגם\"), or
(\"או\") ו־not
(\"לא\").
\n",
+ "
\n",
+ "כאמור, לעזרתנו מתגייסים \"אופרטורים לוגיים\", שמטרתם לאפשר לנו לשאול שאלות בנוגע לקשרים בין ביטויים בוליאניים.
\n",
+ "ישנם שלושה אופרטורים לוגיים: and
(\"וגם\"), or
(\"או\") ו־not
(\"לא\").
\n",
"
דוגמאות
" + "###דוגמאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "מהדוגמאות נוכל לשים לב לדפוס חוזר – האופרטורים הלוגיים \"וגם\" ו\"או\" מקבלים משני צידיהם ביטויים בוליאניים, ומחזירים ביטוי בוליאני אחד.
\n",
- "האופרטור הלוגי \"לא\" מקבל רק ביטוי בוליאני אחד, והופך אותו.
\n",
+ "
\n",
+ "מהדוגמאות נוכל לשים לב לדפוס חוזר – האופרטורים הלוגיים \"וגם\" ו\"או\" מקבלים משני צידיהם ביטויים בוליאניים, ומחזירים ביטוי בוליאני אחד.
\n",
+ "האופרטור הלוגי \"לא\" מקבל רק ביטוי בוליאני אחד, והופך אותו.
\n",
"לדוגמה: בשאלה האם 2 גדול מ־1 (כן) וגם 2 קטן מ־3 (כן), האופרטור הלוגי \"וגם\" מקבל \"כן\" משני צידיו, ומחזיר את התשובה הסופית כן.\n",
"
אופרטורים לוגיים
" + "##אופרטורים לוגיים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###and / וגם
" + "###and / וגם
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "האופרטור הלוגי and פועל על שני ביטויים בוליאניים, אחד מימינו ואחד משמאלו, ומחזיר לנו ביטוי בוליאני אחד:
\n",
- "True אם הביטויים בשני צידיו היו True
, או False בכל מקרה אחר.
\n",
+ "
\n",
+ "האופרטור הלוגי and פועל על שני ביטויים בוליאניים, אחד מימינו ואחד משמאלו, ומחזיר לנו ביטוי בוליאני אחד:
\n",
+ "True אם הביטויים בשני צידיו היו True
, או False בכל מקרה אחר.
\n",
"מבחינת מינוחים, and
נחשב \"האופרטור\" (operator), והביטויים שנמצאים מצידיו נקראים \"האופרנדים\".\n",
"
\n", + "
\n", "נבדוק, בעזרת פייתון, אם 2 גדול מ־1 וקטן מ־3:\n", "
" ] @@ -179,7 +179,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "או בקיצור:\n", "
" ] @@ -197,17 +197,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###or / או
" + "###or / או
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "האופרטור הלוגי or פועל על שני ביטויים בוליאניים, אחד מימינו ואחד משמאלו, ומחזיר לנו ביטוי בוליאני אחד:
\n",
- "True אם לפחות אחד מהביטויים, מימינו או משמאלו, הם True
.
\n",
- "הוא יחזיר False רק אם הביטויים בשני הצדדים שלו הם False
.
\n",
+ "
\n",
+ "האופרטור הלוגי or פועל על שני ביטויים בוליאניים, אחד מימינו ואחד משמאלו, ומחזיר לנו ביטוי בוליאני אחד:
\n",
+ "True אם לפחות אחד מהביטויים, מימינו או משמאלו, הם True
.
\n",
+ "הוא יחזיר False רק אם הביטויים בשני הצדדים שלו הם False
.
\n",
"מבחינת מינוחים, or
נחשב \"האופרטור\" (operator), והביטויים שנמצאים מצידיו נקראים \"האופרנדים\" (operands).\n",
"
\n",
- "נבדוק בעזרת פייתון אם אחת האותיות, a או x, נמצאות במילה \"barvaz\".
\n",
+ "
\n",
+ "נבדוק בעזרת פייתון אם אחת האותיות, a או x, נמצאות במילה \"barvaz\".
\n",
"
\n", + "
\n", "או בקיצור:\n", "
" ] @@ -267,17 +267,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###not / לא
" + "###not / לא
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "האופרטור הלוגי not פועל על ביטוי בוליאני אחד שבא אחריו, ומחזיר לנו את הביטוי הבוליאני ההפוך לו. רוצה לומר:
\n",
- "True אם הביטוי הבוליאני שאחריו הוא False
.
\n",
- "False אם הביטוי הבוליאני שאחריו הוא True
.
\n",
+ "
\n",
+ "האופרטור הלוגי not פועל על ביטוי בוליאני אחד שבא אחריו, ומחזיר לנו את הביטוי הבוליאני ההפוך לו. רוצה לומר:
\n",
+ "True אם הביטוי הבוליאני שאחריו הוא False
.
\n",
+ "False אם הביטוי הבוליאני שאחריו הוא True
.
\n",
"מבחינת מינוחים, not
נחשב \"האופרטור\" (operator), והביטוי שנמצא אחריו נקרא \"האופרנד\" (operand).\n",
"
\n", + "
\n", "נבדוק בעזרת פייתון האם המילה \"barvaz\" לא כוללת בתוכה את האות \"q\":\n", "
" ] @@ -316,7 +316,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "או בקיצור:\n", "
" ] @@ -334,7 +334,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n",
"טריק מגניב כתוספת: פייתון מאפשרת לנו לכתוב את זה אפילו בצורה קריאה יותר, בעזרת האופרטור not in
:\n",
"
דוגמה
" + "##דוגמה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "לצורך המשך השיעור, נניח שיש לנו את המשתנים הבאים.
\n",
+ "
\n",
+ "לצורך המשך השיעור, נניח שיש לנו את המשתנים הבאים.
\n",
"הריצו את התא ומלאו ערכים. נשתמש במשתנים האלו בהמשך.\n",
"
\n",
- "מסיבה שמחה היא מסיבה שיש בה לפחות 20 משתתפים, וגם יותר מ־100 משולשי פיצה.
\n",
+ "
\n",
+ "מסיבה שמחה היא מסיבה שיש בה לפחות 20 משתתפים, וגם יותר מ־100 משולשי פיצה.
\n",
"עד עכשיו, היינו יכולים לבדוק האם מסיבה היא שמחה רק בצורה הזו, שמדפיסה לנו 2 תשובות:\n",
"
\n",
- "אפשר להגיד כאן שרק במקרה שגם בשורה הראשונה הודפס True וגם בשורה השנייה הודפס True, המסיבה היא מסיבה שמחה.
\n",
- "הסיטואציה הזו, כך נראה, מתאימה לאופרטור הלוגי הראשון שדיברנו עליו – and
, ובשמו העברי \"וגם\".
\n",
- "השאלה ששאלנו היא \"האם מספר האנשים במסיבה הוא לפחות 20, וגם מספר משולשי הפיצה במסיבה הוא מעל 100\".
\n",
+ "
\n",
+ "אפשר להגיד כאן שרק במקרה שגם בשורה הראשונה הודפס True וגם בשורה השנייה הודפס True, המסיבה היא מסיבה שמחה.
\n",
+ "הסיטואציה הזו, כך נראה, מתאימה לאופרטור הלוגי הראשון שדיברנו עליו – and
, ובשמו העברי \"וגם\".
\n",
+ "השאלה ששאלנו היא \"האם מספר האנשים במסיבה הוא לפחות 20, וגם מספר משולשי הפיצה במסיבה הוא מעל 100\".
\n",
"ננסח בקוד:\n",
"
\n",
- "\"מסיבה עצובה\" היא מסיבה שיש בה עד 5 משתתפים, או שבה אין משולש פיצה לכל משתתף.
\n",
+ "
\n",
+ "\"מסיבה עצובה\" היא מסיבה שיש בה עד 5 משתתפים, או שבה אין משולש פיצה לכל משתתף.
\n",
"עד עכשיו, היינו יכולים לעשות את זה רק בצורה הזו, שמדפיסה לנו 2 תשובות:\n",
"
\n",
- "אפשר להגיד כאן שבמקרה שתוצאת השורה הראשונה היא True או שתוצאת השורה השנייה היא True, המסיבה היא מסיבה עצובה.
\n",
- "הסיטואציה הזו, כך נראה, מתאימה לאופרטור הלוגי השני שדיברנו עליו – or
, ובשמו העברי \"או\".
\n",
- "השאלה ששאלנו היא \"האם מספר האנשים במסיבה קטן או שווה ל־5, או מספר משולשי הפיצה קטן ממספר האנשים במסיבה\".
\n",
+ "
\n",
+ "אפשר להגיד כאן שבמקרה שתוצאת השורה הראשונה היא True או שתוצאת השורה השנייה היא True, המסיבה היא מסיבה עצובה.
\n",
+ "הסיטואציה הזו, כך נראה, מתאימה לאופרטור הלוגי השני שדיברנו עליו – or
, ובשמו העברי \"או\".
\n",
+ "השאלה ששאלנו היא \"האם מספר האנשים במסיבה קטן או שווה ל־5, או מספר משולשי הפיצה קטן ממספר האנשים במסיבה\".
\n",
"ננסח בקוד:\n",
"
טבלאות אמת
" + "##טבלאות אמת
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "טבלאות אמת זו דרך ישנה נושנה לתאר את התוצאה של אופרטורים לוגיים בכל אחד מהמקרים האפשריים.
\n",
- "נצייר טבלאות כאלו עבור and
, or
ו־not
.
\n",
+ "
\n",
+ "טבלאות אמת זו דרך ישנה נושנה לתאר את התוצאה של אופרטורים לוגיים בכל אחד מהמקרים האפשריים.
\n",
+ "נצייר טבלאות כאלו עבור and
, or
ו־not
.
\n",
"אנחנו ממליצים שלא ללמוד אותן בעל פה, אלא להבין את ההיגיון שבהן.\n",
"
מונחים
" + "###מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###לא או או או וגם וגם?
" + "###לא או או או וגם וגם?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "בהנתן ההשמות שהתבצעו בשורה הבאה, רשמו בצד את התוצאות של כל אחת מהשורות הבאות.
\n",
- "רק לאחר מכן הריצו, ובדקו האם צדקתם בתשובתכם.
\n",
+ "בהנתן ההשמות שהתבצעו בשורה הבאה, רשמו בצד את התוצאות של כל אחת מהשורות הבאות.
\n",
+ "רק לאחר מכן הריצו, ובדקו האם צדקתם בתשובתכם.
\n",
- " מה קיבלתם?
\n",
- " שנו עד 2 משתנים למעלה כדי לקבל תוצאה אחרת.
\n",
+ "
\n",
+ " מה קיבלתם?
\n",
+ " שנו עד 2 משתנים למעלה כדי לקבל תוצאה אחרת.
\n",
" מצאו 2 תשובות אפשריות.\n",
"
\n", + "
\n", "בואו נמשיך:\n", "
" ] @@ -728,23 +728,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###קיפיק הצב
" + "###קיפיק הצב
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "קיפיק הצב הוא הלקוח היחיד שאוכל כמה כדורי גלידה, שאחד מהם בטעם כוכבי־על (superstars).
\n",
- "לגלידרייה שלכם נכנס לקוח, שמעוניין לקנות גלידה ממגוון הטעמים שיש במרכולתכם.
\n",
- "קבלו את הטעמים שהוא רוצה להזמין כקלט. אם הלקוח ירצה יותר מטעם אחד, הוא יפריד את הטעמים בפסיק.
\n",
+ "
\n",
+ "קיפיק הצב הוא הלקוח היחיד שאוכל כמה כדורי גלידה, שאחד מהם בטעם כוכבי־על (superstars).
\n",
+ "לגלידרייה שלכם נכנס לקוח, שמעוניין לקנות גלידה ממגוון הטעמים שיש במרכולתכם.
\n",
+ "קבלו את הטעמים שהוא רוצה להזמין כקלט. אם הלקוח ירצה יותר מטעם אחד, הוא יפריד את הטעמים בפסיק.
\n",
"בדקו האם מדובר בקיפיק הצב.\n",
"
\n",
- "לדוגמה, אם הלקוח יזין שהוא מעוניין להזמין superstars, לא מדובר בקיפיק הצב מכיוון שההזמנה כוללת כדור אחד בלבד.
\n",
- "אם הלקוח יזין שהוא מעוניין להזמין pineapple, nettles, לא מדובר בקיפיק הצב מכיוון שההזמנה לא כוללת כדור בטעם המועדף על קיפיק.
\n",
- "אם הלקוח יזין שהוא מעוניין להזמין superstars, creme-brulee, pineapple, נוכל להסיק שמדובר בקיפיק הצב.
\n",
+ "
\n",
+ "לדוגמה, אם הלקוח יזין שהוא מעוניין להזמין superstars, לא מדובר בקיפיק הצב מכיוון שההזמנה כוללת כדור אחד בלבד.
\n",
+ "אם הלקוח יזין שהוא מעוניין להזמין pineapple, nettles, לא מדובר בקיפיק הצב מכיוון שההזמנה לא כוללת כדור בטעם המועדף על קיפיק.
\n",
+ "אם הלקוח יזין שהוא מעוניין להזמין superstars, creme-brulee, pineapple, נוכל להסיק שמדובר בקיפיק הצב.
\n",
"
תנאים
" + "#תנאים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "ברוכים הבאים לשבוע השני של הקורס!
\n",
- "אנחנו פותחים את השבוע בנושא מעניין; הראשון שיאפשר לנו ליצור תוכניות מורכבות שמקבלות החלטות.
\n",
+ "
\n",
+ "ברוכים הבאים לשבוע השני של הקורס!
\n",
+ "אנחנו פותחים את השבוע בנושא מעניין; הראשון שיאפשר לנו ליצור תוכניות מורכבות שמקבלות החלטות.
\n",
"
ביטויים בוליאניים
" + "##ביטויים בוליאניים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נתחיל בתזכורת בנוגע לביטויים בוליאניים, שאותם הכרנו בשבוע שעבר:\n", "
" ] @@ -80,8 +80,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n",
- "אם כן, ביטויים בוליאניים הם ביטויים שתוצאתם היא True
או False
.
\n",
+ "
\n",
+ "אם כן, ביטויים בוליאניים הם ביטויים שתוצאתם היא True
או False
.
\n",
"לעיתים קרובות ביטויים אלו יכללו אופרטורים לוגיים, כמו and
, or
ו־not
. \n",
"
בתנאי ש...
" + "##בתנאי ש...
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Two roads diverged in a yellow wood,
\n", + "Two roads diverged in a yellow wood,\n", "- Robert Frost, The Road Not Taken" ] @@ -106,7 +106,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "And sorry I could not travel bothנקפוץ למים ללא הקדמה. הנה קוד מעניין:
" + "נקפוץ למים ללא הקדמה. הנה קוד מעניין:
" ] }, { @@ -125,9 +125,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "מה קטע הקוד הזה יעשה?
\n", - "את השורה הראשונה אנחנו כבר יודעים לקרוא: קלטנו את גיל המשתמש, המרנו אותו למספר שלם, ועכשיו המשתנהuser_age
מצביע עליו.
\n", + "\n", + "מה קטע הקוד הזה יעשה?
" ] @@ -136,13 +136,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "את השורה הראשונה אנחנו כבר יודעים לקרוא: קלטנו את גיל המשתמש, המרנו אותו למספר שלם, ועכשיו המשתנהuser_age
מצביע עליו.
\n", "בשורה השנייה הרוב כבר מוכר: נבדוק האם הגיל קטן מ־18. אבל מה זה ה־if
הזה?\n", "\n", - "כשאנחנו מעוניינים להגיד לפייתון לבצע רצף של שורות רק בתנאי שיקרה משהו מסוים, נשתמש במילת המפתח
if
.
\n", - "נחלק את המבנה של תנאי בפייתון ל־2 חלקים:
\n", + "\n", + "כשאנחנו מעוניינים להגיד לפייתון לבצע רצף של שורות רק בתנאי שיקרה משהו מסוים, נשתמש במילת המפתח
\n", - "if
.
\n", + "נחלק את המבנה של תנאי בפייתון ל־2 חלקים:
\n", "\n", - "
- הביטוי הבוליאני, שיבוא מייד אחרי מילת המפתח
\n", - "if
.- הפקודות שיש לבצע, שיבואו בשורות שאחריו.
\n", + "\n", + "
" ] }, @@ -150,18 +150,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- הביטוי הבוליאני, שיבוא מייד אחרי מילת המפתח
\n", + "if
.- הפקודות שיש לבצע, שיבואו בשורות שאחריו.
\n", "דוגמאות לתנאים\n", - "\n", - "\n", - "בדוגמאות הבאות, התנאי מופיע כך, והפעולות שיקרו בעקבותיו מופיעות כך.\n", + "###
דוגמאות לתנאים\n", + "\n", + "בדוגמאות הבאות, התנאי מופיע כך, והפעולות שיקרו בעקבותיו מופיעות כך.\n", "
\n", - "\n", - "\n", - "
- השמע את המוזיקה של השעון המעורר רק כשהשעה היא 20:00.
\n", - "- אם הלחץ במטוס לא תקין, הורד לנוסעים את מסכות החמצן ולאחר מכן גם היכנס למצב חירום.
\n", - "- אם המשתמש סימן קובץ אחד או יותר והמקש שנלחץ היה DEL, מחק את הקבצים המסומנים.
\n", - "- רק אם עגלת הקניות שלו מכילה מוצרים בשווי 100 ש\"ח לפחות, אפשר למשתמש לבצע הזמנה עם משלוח.
\n", - "- כספומט, הוצא למשתמש כסף, הדפס קבלה וצא מהממשק אם המשתמש הזין סכום שמתחלק ב־50, הוא הזין את הקוד הסודי הנכון והסכום הזה קיים בחשבון הבנק שלו.
\n", + "\n", + "
" ] }, @@ -169,7 +167,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- השמע את המוזיקה של השעון המעורר רק כשהשעה היא 20:00.
\n", + "- אם הלחץ במטוס לא תקין, הורד לנוסעים את מסכות החמצן ולאחר מכן גם היכנס למצב חירום.
\n", + "- אם המשתמש סימן קובץ אחד או יותר והמקש שנלחץ היה DEL, מחק את הקבצים המסומנים.
\n", + "- רק אם עגלת הקניות שלו מכילה מוצרים בשווי 100 ש\"ח לפחות, אפשר למשתמש לבצע הזמנה עם משלוח.
\n", + "- כספומט, הוצא למשתמש כסף, הדפס קבלה וצא מהממשק אם המשתמש הזין סכום שמתחלק ב־50, הוא הזין את הקוד הסודי הנכון והסכום הזה קיים בחשבון הבנק שלו.
\n", "זרימת התוכנית: ציור לדוגמה" + "###זרימת התוכנית: ציור לדוגמה" ] }, { @@ -177,8 +175,8 @@ "metadata": {}, "source": [ "" ] }, @@ -186,29 +184,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###כותבים תנאי\n", - "\n", - "\n", + "###
כותבים תנאי\n", + "\n", "ניסוח של תנאי אמור להיראות ככה:\n", "
\n", - "\n", - "if התנאי שלכם, ביטוי בוליאני:
מה שאתם רוצים לעשות (גוף התנאי)\n", + "if התנאי שלכם, ביטוי בוליאני:
\n", - "\n", - "
מה שאתם רוצים לעשות (גוף התנאי)\n", "\n", + "
\n", "נסביר:\n", "
\n", - "\n", - "\n", - "
- התנאי מתחיל במילת המפתח
\n", - "if
. אין פה מה לשנות.- אחרי מילת המפתח
\n", - "if
, יבוא ביטוי בוליאני. אם תוצאתו תהיה True, מה שנמצא בגוף התנאי יתבצע. אם False, פייתון תתעלם לגמרי מגוף התנאי.- מייד אחרי הביטוי הבוליאני תבואנה נקודתיים, שמסמנות שכאן נגמרת השאלה (הביטוי הבוליאני), ומתחיל החלק הביצועי – גוף התנאי.
\n", - "- לפני שנבקש מפייתון לבצע משהו בעקבות קיום התנאי שהיה ב־
if
, נצטרך להוסיף לפניו הזחה.
\n", - " הזחה היא תזוזה של השורה לימין, והיא נועדה לסמן מבניות מסוימת בקוד – נניח שהשורה הזו מתייחסת ל־if
שנמצא לפניה.
\n", - " אנחנו רוצים שהקוד שנכתוב אחרי ההזחה ירוץ רק אם התנאי שלפני ההזחה התקיים.
\n", + "\n", + "
" @@ -218,7 +212,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- התנאי מתחיל במילת המפתח
\n", + "if
. אין פה מה לשנות.- אחרי מילת המפתח
\n", + "if
, יבוא ביטוי בוליאני. אם תוצאתו תהיה True, מה שנמצא בגוף התנאי יתבצע. אם False, פייתון תתעלם לגמרי מגוף התנאי.- מייד אחרי הביטוי הבוליאני תבואנה נקודתיים, שמסמנות שכאן נגמרת השאלה (הביטוי הבוליאני), ומתחיל החלק הביצועי – גוף התנאי.
\n", + "- לפני שנבקש מפייתון לבצע משהו בעקבות קיום התנאי שהיה ב־
\n", - "if
, נצטרך להוסיף לפניו הזחה.
\n", + " הזחה היא תזוזה של השורה לימין, והיא נועדה לסמן מבניות מסוימת בקוד – נניח שהשורה הזו מתייחסת ל־if
שנמצא לפניה.
\n", + " אנחנו רוצים שהקוד שנכתוב אחרי ההזחה ירוץ רק אם התנאי שלפני ההזחה התקיים.
\n", " בפייתון הזחה מוגדרת כארבעה רווחים, אבל אפשר פשוט ללחוץ Tab ↹ במקלדת והמחברת תחליף לכם את הטאב ברווחים בעצמה.\n", "- וסוף סוף הגענו למטרה: אחרי ההזחה, כתבו את מה שאתם רוצים לעשות – כל פעולת פייתון שעולה על דעתכם תתאים כאן.
\n", + "- וסוף סוף הגענו למטרה: אחרי ההזחה, כתבו את מה שאתם רוצים לעשות – כל פעולת פייתון שעולה על דעתכם תתאים כאן.
\n", "
\n", "תוכלו להוסיף כמה שורות שתרצו אחרי ה־if
. הקוד בשורה ירוץ כחלק מהתנאי כל עוד היא מוזחת ונמצאת ישירות אחרי ה־if
, או אחרי שורות מוזחות אחרות ישירות מתחת ל־if
.\n", "דוגמאות קוד נוספות" + "###דוגמאות קוד נוספות" ] }, { @@ -243,21 +237,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -265,7 +259,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " נסו להבין מה הקוד למעלה אומר. הריצו ובדקו שעניתם נכונה לפני שתתקדמו הלאה.\n", "
\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", "דוגמה אחרת:\n", "
" ] @@ -300,24 +294,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### מה התרחש בקוד הזה?\n", - "\n", - "בשורה הראשונה, ביקשנו את הגיל של המשתמש וגרמנו למשתנה age להצביע אליו.
\n", + "#### מה התרחש בקוד הזה?\n", + "\n", + "בשורה הראשונה, ביקשנו את הגיל של המשתמש וגרמנו למשתנה age להצביע אליו.
\n", - "
\n", "בשורה השנייה, ביקשנו ש־allowed_to_enter יהיהFalse
. זה קצת מרושע ומיזנטרופי, אבל אנחנו מעדיפים כברירת מחדל לא להכניס אף אחד למסיבה שלנו.\n", "\n", + "
\n", "בשלב הבא בדקנו האם age (גיל המשתמש שלנו) הוא לפחות 18, ואם כן הגדרנו שיוכל להכנס למסיבה. עד כאן זה קל.\n", "
\n", - "\n", - "עכשיו נתאר מה תהיה ההתרחשות אם הגיל נמוך מ־18.
\n", - "אנחנו מחכים לחצות, ומבקשים לדעת אם יום ההולדת של המשתמש הוא היום.
\n", + "\n", + "עכשיו נתאר מה תהיה ההתרחשות אם הגיל נמוך מ־18.
\n", - "
\n", + "אנחנו מחכים לחצות, ומבקשים לדעת אם יום ההולדת של המשתמש הוא היום.
\n", "\n", - "מכאן אנחנו פותחים תנאי נוסף, בתוך התנאי הקודם. זה אומר שרק אם age אכן קטן מ־18 הבדיקה הבאה תקרה (בגלל שאנחנו עדיין בתוך התנאי
age < 18
, ראו את ההזחה):
\n", - "אם המשתמש הכניס שהיום יום ההולדת שלו, והגיל שלו היה עד עכשיו 17, אז עכשיו הוא טכנית בן 18 ויכול להיכנס למסיבה שלנו. נגדיל את הגיל שלו ונרשה לו להיכנס.
\n", + "\n", + "מכאן אנחנו פותחים תנאי נוסף, בתוך התנאי הקודם. זה אומר שרק אם age אכן קטן מ־18 הבדיקה הבאה תקרה (בגלל שאנחנו עדיין בתוך התנאי
\n", - "\n", - "age < 18
, ראו את ההזחה):
\n", + "אם המשתמש הכניס שהיום יום ההולדת שלו, והגיל שלו היה עד עכשיו 17, אז עכשיו הוא טכנית בן 18 ויכול להיכנס למסיבה שלנו. נגדיל את הגיל שלו ונרשה לו להיכנס.
\n", "\n", + "
\n", "עכשיו נשאר רק להתייחס למשתנה allowed_to_enter שהגדרנו למעלה, לבדוק האם למשתמש מותר להכנס או לא, ולהדפיס הודעה מתאימה. יופי!\n", "
" ] @@ -326,17 +319,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -344,17 +337,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תרגול:\n", - " נסו לערוך את הקוד שלמעלה, כך שישאל אם זהו יום ההולדת של המשתמש רק אם הוא בן 17.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " נסו לערוך את הקוד שלמעלה, כך שישאל אם זהו יום ההולדת של המשתמש רק אם הוא בן 17.
\n", - "
\n", " בדקו שהקוד עדיין עובד כמצופה.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "\n", + "\n", - " טעות נפוצה היא לשכוח את הנקודתיים אחרי ה־
\n", - "if
.
\n", - " אתם בטח אומרים לעצמכם שלא תעשו את זה, אבל אתם תעשו את זה, סמכו עליי.
\n", - " פייתון זורקת הודעות שגיאה מעצבנות ולא אינדיקטיביות כשזה קורה. נסו להיזכר באזהרה הזו 😊
\n", - "\n", + "" ] }, @@ -362,22 +355,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגול" + "## תרגול" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### כניסה לבנק, שלב 1" + "### כניסה לבנק, שלב 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "\n", + "\n", + "\n", + "\n", "\n", + " טעות נפוצה היא לשכוח את הנקודתיים אחרי ה־
\n", + "if
.
\n", + " אתם בטח אומרים לעצמכם שלא תעשו את זה, אבל אתם תעשו את זה, סמכו עליי.
\n", + " פייתון זורקת הודעות שגיאה מעצבנות ולא אינדיקטיביות כשזה קורה. נסו להיזכר באזהרה הזו 😊
\n", + "\n", - " שם המשתמש שלי לבנק הוא wrong, והסיסמה שלי היא ads sports.
\n", + "\n", + " שם המשתמש שלי לבנק הוא wrong, והסיסמה שלי היא ads sports.
" ] @@ -386,15 +379,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### אם גם טעיתי" + "### אם גם טעיתי" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " קבלו מהמשתמש שם משתמש וסיסמה, והדפיסו לו הודעה יפה אם הצליח להתחבר.\n", "\n", - "תקנו את הקוד הבא כך שירוץ בהצלחה.
\n", + "\n", + "תקנו את הקוד הבא כך שירוץ בהצלחה.
" ] diff --git a/week2/2_Conditions_part2.ipynb b/week2/2_Conditions_part2.ipynb index 9fcaa61..49ee14a 100644 --- a/week2/2_Conditions_part2.ipynb +++ b/week2/2_Conditions_part2.ipynb @@ -4,30 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#
\n", "כתבו לעצמכם את התיקונים שביצעתם כדי להימנע מטעויות דומות אצלכם בעתיד!\n", "תנאים – חלק 2
" + "#תנאים – חלק 2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##תנאים – תזכורת
" + "##תנאים – תזכורת
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ניזכר במחברת הקודמת, שבה למדנו על תנאים.
\n", - "למדנו שבעזרת מילת המפתחif
אנחנו יכולים לבקש מהקוד שלנו לבצע סדרת פעולות, רק אם תנאי כלשהו מתקיים.
\n", + "\n", + "ניזכר במחברת הקודמת, שבה למדנו על תנאים.
" ] @@ -36,7 +36,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "למדנו שבעזרת מילת המפתחif
אנחנו יכולים לבקש מהקוד שלנו לבצע סדרת פעולות, רק אם תנאי כלשהו מתקיים.
\n", "במילים אחרות: אנחנו יכולים לבקש מקטע קוד לרוץ, רק אם ביטוי בוליאני מסוים שווה ל־True
.\n", "\n", + "
\n", "נראה דוגמה:\n", "
" ] @@ -57,8 +57,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בקוד שלמעלה, ביקשנו מהמשתמש להזין את מספר הנעליים שיש לו, ואם המספר היה אי־זוגי הדפסנו לו שמשהו מוזר מתרחש.
\n", + "\n", + "בקוד שלמעלה, ביקשנו מהמשתמש להזין את מספר הנעליים שיש לו, ואם המספר היה אי־זוגי הדפסנו לו שמשהו מוזר מתרחש.
" ] @@ -67,22 +67,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אבל מה קורה אם נרצה להדפיס למשתמש הודעת אישור כשאנחנו מגלים שהכול בסדר?\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -90,14 +90,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מה אם לא?\n", - " כיצד הייתם משפרים את התוכנית שלמעלה כך שתדפיס למשתמש הודעת אישור שהכול בסדר?
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כיצד הייתם משפרים את התוכנית שלמעלה כך שתדפיס למשתמש הודעת אישור שהכול בסדר?
\n", - "
\n", " השתמשו בכלים שרכשתם במחברת הקודמת. נסו לחשוב על לפחות 2 דרכים דומות.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "
על מילת המפתח else" + "## מה אם לא?
על מילת המפתח else" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "דרך אחת לפתור את התרגיל שהופיע למעלה, היא זו:
" + "דרך אחת לפתור את התרגיל שהופיע למעלה, היא זו:
" ] }, { @@ -118,9 +118,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כדי להדפיס למשתמש הודעה מתאימה בכל מצב, הוספנו תנאי הפוך מהתנאי הראשון, שידפיס למשתמש הודעה מתאימה.
\n", - "אחד הדברים המעניינים בתוכנית שלמעלה, הוא שיש לנו שני תנאים שמנוגדים זה לזה במשמעות שלהם. אחד בודק זוגיות, והשני בודק אי־זוגיות.
\n", + "\n", + "כדי להדפיס למשתמש הודעה מתאימה בכל מצב, הוספנו תנאי הפוך מהתנאי הראשון, שידפיס למשתמש הודעה מתאימה.
" ] @@ -129,8 +129,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אחד הדברים המעניינים בתוכנית שלמעלה, הוא שיש לנו שני תנאים שמנוגדים זה לזה במשמעות שלהם. אחד בודק זוגיות, והשני בודק אי־זוגיות.
\n", "למעשה, אם היינו רוצים לנסח את הקוד במילים, היינו יכולים להגיד:אם מספר הנעליים הוא אי־זוגי, הדפס שיש בעיה. אחרת, הדפס שהכול בסדר.\n", "\n", - " פייתון מקנה לנו כלי נוח לבטא את ה\"אחרת\" הזה, כלי שמקל על הקריאוּת של הקוד – מילת המפתח
else
.
\n", + "\n", + " פייתון מקנה לנו כלי נוח לבטא את ה\"אחרת\" הזה, כלי שמקל על הקריאוּת של הקוד – מילת המפתח
" ] @@ -153,9 +153,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "else
.
\n", " נראה איך אפשר לנסח את הקוד שלמעלה בעזרתelse
:\n", "\n", - "שימו לב לצורת ההזחה: ה־
else
אינו מוזח, אך התוכן שבתוכו כן.
\n", - "נזכור גם ש־else
קשור ל־if
שלפניו, ומדבר על המקרה המשלים לתנאי שנמצא באותוif
.
\n", + "\n", + "שימו לב לצורת ההזחה: ה־
" ] @@ -164,17 +164,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###else
אינו מוזח, אך התוכן שבתוכו כן.
\n", + "נזכור גם ש־else
קשור ל־if
שלפניו, ומדבר על המקרה המשלים לתנאי שנמצא באותוif
.
\n", "דרך נוספת לחשוב עלelse
היא שקטע הקוד בתוך ה־else
יתבצע אם תוצאתו של הביטוי הבוליאני שמופיע כתנאי של ה־if
היאFalse
.\n", "דוגמאות לתנאים עם\n", - "\n", - "else
\n", - "בדוגמאות הבאות, התנאי מופיע כך, והפעולות שיקרו בעקבותיו מופיעות כך.\n", + "###
דוגמאות לתנאים עם\n", + "else
\n", + "בדוגמאות הבאות, התנאי מופיע כך, והפעולות שיקרו בעקבותיו מופיעות כך.\n", "
\n", - "\n", - "\n", - "
- אם השעה היא לפני 20:00, שמור על תאורה גבוהה במסעדה. אחרת, עמעם את התאורה.
\n", - "- אם הגיל של המשתמש הוא לפחות 18, אפשר לו להיכנס לבר. אחרת, הצע לו אטרקציות אחרות לבקר בהן וגם אל תכניס אותו.
\n", - "- אם המשתמש בכספומט הזין סכום שלילי, או יותר מהסכום הזמין בחשבון שלו, הצג לו הודעת שגיאה. אחרת, הפחת לו את הסכום מהחשבון, הוצא לו שטרות בסכום שהזין.
\n", - "- אם הדוד כבוי וגם השעה היא לפני 8:00 וגם השעה היא אחרי 7:00, הדלק את הדוד. אחרת, אם הדוד דלוק – כבה את הדוד.
\n", + "\n", + "
" ] }, @@ -182,7 +180,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- אם השעה היא לפני 20:00, שמור על תאורה גבוהה במסעדה. אחרת, עמעם את התאורה.
\n", + "- אם הגיל של המשתמש הוא לפחות 18, אפשר לו להיכנס לבר. אחרת, הצע לו אטרקציות אחרות לבקר בהן וגם אל תכניס אותו.
\n", + "- אם המשתמש בכספומט הזין סכום שלילי, או יותר מהסכום הזמין בחשבון שלו, הצג לו הודעת שגיאה. אחרת, הפחת לו את הסכום מהחשבון, הוצא לו שטרות בסכום שהזין.
\n", + "- אם הדוד כבוי וגם השעה היא לפני 8:00 וגם השעה היא אחרי 7:00, הדלק את הדוד. אחרת, אם הדוד דלוק – כבה את הדוד.
\n", "זרימת התוכנית: ציור לדוגמה" + "###זרימת התוכנית: ציור לדוגמה" ] }, { @@ -190,8 +188,8 @@ "metadata": {}, "source": [ "" ] }, @@ -199,14 +197,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מימוש לדוגמה" + "### מימוש לדוגמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "התוכנית המוצגת פה מעט מורכבת יותר מהשרטוט המופיע למעלה, כדי לתת לה נופך מציאותי יותר.\n", "
" ] @@ -244,21 +242,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מה המצב?
טיפול במצבים מרובים" + "## מה המצב?
טיפול במצבים מרובים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "בארצות הברית מדורגת מכירת אלבומים כך:\n", "
\n", - "\n", - "
- אלבום מוזיקה נחשב \"אלבום כסף\" אם נמכרו ממנו לפחות 100,000 עותקים.
\n", - "- אלבום מוזיקה נחשב \"אלבום זהב\" אם נמכרו ממנו לפחות 500,000 עותקים.
\n", - "- אלבום מוזיקה נחשב \"אלבום פלטינה\" אם נמכרו ממנו לפחות 1,000,000 עותקים.
\n", - "- אלבום מוזיקה נחשב \"אלבום יהלום\" אם נמכרו ממנו לפחות 10,000,000 עותקים.
\n", + "\n", + "
" ] }, @@ -266,23 +264,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- אלבום מוזיקה נחשב \"אלבום כסף\" אם נמכרו ממנו לפחות 100,000 עותקים.
\n", + "- אלבום מוזיקה נחשב \"אלבום זהב\" אם נמכרו ממנו לפחות 500,000 עותקים.
\n", + "- אלבום מוזיקה נחשב \"אלבום פלטינה\" אם נמכרו ממנו לפחות 1,000,000 עותקים.
\n", + "- אלבום מוזיקה נחשב \"אלבום יהלום\" אם נמכרו ממנו לפחות 10,000,000 עותקים.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - " קלטו את כמות העותקים שנמכרו עבור אלבום המטאל המצליח \"רוצח או נזלת\", והדפיסו את דירוג האלבום.
\n", - "
\n", - " לדוגמה, אם המשתמש הכניס שמספר המכירות היה 520,196, הדפיסו \"אלבום זהב\".
\n", - " אם האלבום לא נמכר מספיק כדי לזכות בדירוג, הדפיסו \"האלבום אינו רב־מכר\".
\n", - "\n", - "" ] }, @@ -290,15 +288,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### פתרון ושיפורים" + "### פתרון ושיפורים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " חשוב!
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " קלטו את כמות העותקים שנמכרו עבור אלבום המטאל המצליח \"רוצח או נזלת\", והדפיסו את דירוג האלבום.
\n", + "
\n", + " לדוגמה, אם המשתמש הכניס שמספר המכירות היה 520,196, הדפיסו \"אלבום זהב\".
\n", + " אם האלבום לא נמכר מספיק כדי לזכות בדירוג, הדפיסו \"האלבום אינו רב־מכר\".
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "בתרגיל שנתבקשתם לפתור, נוצר מצב שבו יש צורך בתנאים מרובים שמשלימים זה את זה.
\n", + "\n", + "בתרגיל שנתבקשתם לפתור, נוצר מצב שבו יש צורך בתנאים מרובים שמשלימים זה את זה.
" ] @@ -338,9 +336,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נציג לפניכם שני פתרונות אפשריים:\n", "\n", - "ודאי שמתם לב שהקוד נראה מעט מסורבל בגלל כמות ההזחות, והוא יוסיף ויסתרבל ככל שנוסיף יותר מקרים אפשריים.
\n", - "ננסה לפתור את זה בעזרת הגדרת טווחים מדויקים עבור כל דירוג.
\n", + "\n", + "ודאי שמתם לב שהקוד נראה מעט מסורבל בגלל כמות ההזחות, והוא יוסיף ויסתרבל ככל שנוסיף יותר מקרים אפשריים.
" ] @@ -374,8 +372,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ננסה לפתור את זה בעזרת הגדרת טווחים מדויקים עבור כל דירוג.
\n", "הקוד המשופץ ייראה כך:\n", "\n", - "הקוד נראה טוב יותר במידה ניכרת, אבל בכל
if
אנחנו בודקים שהתנאי שלפניו לא התקיים, וזה מסורבל מאוד.
\n", + "\n", + "הקוד נראה טוב יותר במידה ניכרת, אבל בכל
" ] }, @@ -383,22 +381,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "if
אנחנו בודקים שהתנאי שלפניו לא התקיים, וזה מסורבל מאוד.
\n", "אנחנו עושים את זה כדי למנוע הדפסה כפולה: אומנם כל אלבום זהב נמכר מספיק פעמים כדי להיות מוכתר כאלבום כסף, אבל לא נרצה להדפיס למשתמש את שתי ההודעות.\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -406,16 +404,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " מה היה קורה אם לא היו תנאים אחרי האופרטור הלוגי
and
?
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " מה היה קורה אם לא היו תנאים אחרי האופרטור הלוגי
\n", - "and
?
\n", " מחקו אותם, הכניסו לתוכנה כקלט 10000000 ובדקו מה התוצאה.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "אם אחרת – elif" + "###אם אחרת – elif" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כדי לפתור את הבעיה שהוצגה למעלה, פייתון מעניקה לנו כלי נוסף שנקרא
elif
.
\n", - "מדובר בסך הכול בקיצור שלelse... if (תנאי)
, או בעברית: אם התנאי הקודם לא התקיים, בדוק אם...
\n", + "\n", + "כדי לפתור את הבעיה שהוצגה למעלה, פייתון מעניקה לנו כלי נוסף שנקרא
" ] @@ -449,17 +447,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###elif
.
\n", + "מדובר בסך הכול בקיצור שלelse... if (תנאי)
, או בעברית: אם התנאי הקודם לא התקיים, בדוק אם...
\n", "ראו, לדוגמה, איך נשפר את הקוד הקודם לקוד קריא יותר במידה רבה:\n", "מה קורה כאן?\n", - "\n", - " הטריק הוא שבשורה שבה כתוב
elif
, פייתון תנסה לבדוק את התנאי רק אם התנאים שלפניו לא התקיימו.
\n", - " במילים אחרות – ערכיהם של הביטויים הבוליאניים בכל התנאים שלפניו היוFalse
.
\n", + "###מה קורה כאן?\n", + "\n", + " הטריק הוא שבשורה שבה כתוב
\n", - "\n", - "elif
, פייתון תנסה לבדוק את התנאי רק אם התנאים שלפניו לא התקיימו.
\n", + " במילים אחרות – ערכיהם של הביטויים הבוליאניים בכל התנאים שלפניו היוFalse
.
\n", " בכל שורה שבה ישif
אוelif
, פייתון בודקת האם הביטוי הבוליאני שבאותה שורה מתקיים, ואז:\n", "\n", - "
- אם כן, היא מבצעת את הפעולות המוזחות מתחת לתנאי ומפסיקה לבדוק את התנאים הבאים.
\n", - "- אם לא, היא עוברת לבדוק את התנאי ב־
\n", - "elif
־ים הבאים (אם ישנםelif
־ים).- אם אף אחד מהתנאים לא מתקיים, יתבצע קטע הקוד ששייך ל־
\n", + "else
(אם ישelse
).\n", + "
" ] }, @@ -467,16 +464,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- אם כן, היא מבצעת את הפעולות המוזחות מתחת לתנאי ומפסיקה לבדוק את התנאים הבאים.
\n", + "- אם לא, היא עוברת לבדוק את התנאי ב־
\n", + "elif
־ים הבאים (אם ישנםelif
־ים).- אם אף אחד מהתנאים לא מתקיים, יתבצע קטע הקוד ששייך ל־
\n", "else
(אם ישelse
).\n", - "\n", - " \n", - "\n", - "\n", - "\n", + "\n", - " ניתן לכתוב
\n", - "if
בליelse
ובליelif
־ים אחריו.
\n", - "if
תמיד יהיה ראשון, ואם יש צורך להוסיף מקרים,else
תמיד יהיה אחרון, וביניהם יהיוelif
־ים.
\n", - "\n", + "" ] }, @@ -484,25 +481,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", + "\n", + "\n", + "\n", + "\n", "\n", + " ניתן לכתוב
\n", + "if
בליelse
ובליelif
־ים אחריו.
\n", + "if
תמיד יהיה ראשון, ואם יש צורך להוסיף מקרים,else
תמיד יהיה אחרון, וביניהם יהיוelif
־ים.
\n", + "תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###כניסה לבנק, שלב 2
" + "###כניסה לבנק, שלב 2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "שם המשתמש שלי לבנק הוא wrong, והסיסמה שלי היא ads sports.
\n", + "\n", + "שם המשתמש שלי לבנק הוא wrong, והסיסמה שלי היא ads sports.
" ] @@ -511,24 +508,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "שם המשתמש של מנהל הבנק היא admin, והסיסמה שלו היא is trator.\n", - "
\n", - "קבלו מהמשתמש שם משתמש וסיסמה, והדפיסו לו הודעה שמספרת לו לאיזה משתמש הוא הצליח להתחבר.
\n", + "
\n", + "קבלו מהמשתמש שם משתמש וסיסמה, והדפיסו לו הודעה שמספרת לו לאיזה משתמש הוא הצליח להתחבר.
\n", "אם לא הצליח להתחבר, הדפיסו לו הודעת שגיאה מתאימה.\n", "חשבון למתחילים, שלב 1
" + "###חשבון למתחילים, שלב 1
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "דני רוצה ללמוד חשבון, ולצורך כך הוא צריך מחשבון פשוט שיעזור לו.
\n", - "כתבו תוכנה שמקבלת 2 מספרים ופעולה חשבונית (+, -, *, / או **), ויודעת להחזיר את התשובה הנכונה לתרגיל.
\n", + "\n", + "דני רוצה ללמוד חשבון, ולצורך כך הוא צריך מחשבון פשוט שיעזור לו.
\n", - "
\n", + "כתבו תוכנה שמקבלת 2 מספרים ופעולה חשבונית (+, -, *, / או **), ויודעת להחזיר את התשובה הנכונה לתרגיל.
\n", "\n", + "
\n", "לדוגמה:\n", "
\n", - "\n", - "
- עבור מספר ראשון 5, מספר שני 2 ופעולה / התוכנית תדפיס 2.5, כיוון ש־5/2 == 2.5.
\n", - "- עבור מספר ראשון 9, מספר שני 2 ופעולה ** התוכנית תדפיס 81, כיוון ש־92 == 81.
\n", - "- עבור מספר ראשון 3, מספר שני 7 ופעולה - התוכנית תדפיס -4, כיוון ש־3-7 == -4.
\n", + "\n", + "
" ] }, @@ -536,52 +533,51 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- עבור מספר ראשון 5, מספר שני 2 ופעולה / התוכנית תדפיס 2.5, כיוון ש־5/2 == 2.5.
\n", + "- עבור מספר ראשון 9, מספר שני 2 ופעולה ** התוכנית תדפיס 81, כיוון ש־92 == 81.
\n", + "- עבור מספר ראשון 3, מספר שני 7 ופעולה - התוכנית תדפיס -4, כיוון ש־3-7 == -4.
\n", "מחשבון מס הכנסה
" + "###מחשבון מס הכנסה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " המיסוי על הכנסה בישראל גבוה מאוד ושיעורו נקבע לפי מדרגות כדלקמן:
\n", + "\n", + " המיסוי על הכנסה בישראל גבוה מאוד ושיעורו נקבע לפי מדרגות כדלקמן:
\n", - "
\n", "\n", - "
- מי שמרוויח עד 6,310 ש\"ח, משלם מס בשיעור 10% על הסכום הזה.
\n", - "- מי שמרוויח עד 9,050 ש\"ח, משלם מס בשיעור 14% על הסכום הזה.
\n", - "- מי שמרוויח עד 14,530 ש\"ח, משלם מס בשיעור 20% על הסכום הזה.
\n", - "- מי שמרוויח עד 20,200 ש\"ח, משלם מס בשיעור 31% על הסכום הזה.
\n", - "- מי שמרוויח עד 42,030 ש\"ח, משלם מס בשיעור 35% על הסכום הזה.
\n", - "- מי שמרוויח עד 54,130 ש\"ח, משלם מס בשיעור 47% על הסכום הזה.
\n", - "- מי שמרוויח מעל הסכום האחרון, משלם מס בשיעור 50% על הסכום הזה.
\n", + "\n", + "
\n", - "- מי שמרוויח עד 6,310 ש\"ח, משלם מס בשיעור 10% על הסכום הזה.
\n", + "- מי שמרוויח עד 9,050 ש\"ח, משלם מס בשיעור 14% על הסכום הזה.
\n", + "- מי שמרוויח עד 14,530 ש\"ח, משלם מס בשיעור 20% על הסכום הזה.
\n", + "- מי שמרוויח עד 20,200 ש\"ח, משלם מס בשיעור 31% על הסכום הזה.
\n", + "- מי שמרוויח עד 42,030 ש\"ח, משלם מס בשיעור 35% על הסכום הזה.
\n", + "- מי שמרוויח עד 54,130 ש\"ח, משלם מס בשיעור 47% על הסכום הזה.
\n", + "- מי שמרוויח מעל הסכום האחרון, משלם מס בשיעור 50% על הסכום הזה.
\n", "\n", - " הסכום תמיד משולם על ההפרש בין המדרגות.
\n", - " לדוגמה, אם הרווחתי בחודש מסוים 10,000 ש\"ח, תשלום המיסים שלי יחושב כך:
\n", - " על 6,310 השקלים הראשונים אשלם 631 ש\"ח, שהם 10% מאותה מדרגה.
\n", - " על הסכום העודף עד 9,050 שקלים, שהוא 2,740 שקלים (9,050 - 6,310) אשלם 383.6 שקלים, שהם 14% מ־2,740 שקלים.
\n", - " על הסכום העודף בסך 950 שקלים (10,000 - 9,050) אשלם 190 ש\"ח, שהם 20% מ־950 שקלים.
\n", + "\n", + " הסכום תמיד משולם על ההפרש בין המדרגות.
\n", - "\n", - "
\n", + " לדוגמה, אם הרווחתי בחודש מסוים 10,000 ש\"ח, תשלום המיסים שלי יחושב כך:
\n", + " על 6,310 השקלים הראשונים אשלם 631 ש\"ח, שהם 10% מאותה מדרגה.
\n", + " על הסכום העודף עד 9,050 שקלים, שהוא 2,740 שקלים (9,050 - 6,310) אשלם 383.6 שקלים, שהם 14% מ־2,740 שקלים.
\n", + " על הסכום העודף בסך 950 שקלים (10,000 - 9,050) אשלם 190 ש\"ח, שהם 20% מ־950 שקלים.
\n", " בסך הכול, אשלם למס הכנסה באותו חודש 631 + 383.6 + 190 ש\"ח, שהם 1,204.6 שקלים.\n", "\n", + "
\n", " כתבו קוד למחשבון שמקבל את השכר החודשי שלכם ומדפיס את סכום המס שתשלמו.\n", - "
" + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### ירוץ אם נתקן, אחרת..." + "### ירוץ אם נתקן, אחרת..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בקוד הבא נפלו שגיאות רבות.
\n", + "\n", + " בקוד הבא נפלו שגיאות רבות.
" ] diff --git a/week2/3_Functions.ipynb b/week2/3_Functions.ipynb index eb6f642..94a9359 100644 --- a/week2/3_Functions.ipynb +++ b/week2/3_Functions.ipynb @@ -4,41 +4,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#
\n", " תקנו אותו והריצו אותו כך שיעבוד ושידפיס הודעה אחת בלבד עבור כל מצב.\n", "פונקציות
" + "#פונקציות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פונקציה היא קטע קוד קצר ותחום שנועד לפתור בעיה ספציפית.
\n", - "כל פונקציה היא מעין רכיב בתוכנה שלנו שנושא שם מסוים. אפשר להסתכל על פונקציה כקטע קוד שמממש משימה מוגדרת היטב.
\n", - "לדוגמה, פונקציה יכולה להיות \"המר טמפרטורה ממעלות פרנהייט לצלזיוס\".
\n", - "במובן הזה, פונקציות הן כמו תוכניות קטנות – יש להן קלט, הן עושות תהליך מסוים ומחזירות תוצאה מסוימת.
\n", + "\n", + "פונקציה היא קטע קוד קצר ותחום שנועד לפתור בעיה ספציפית.
\n", - "
\n", + "כל פונקציה היא מעין רכיב בתוכנה שלנו שנושא שם מסוים. אפשר להסתכל על פונקציה כקטע קוד שמממש משימה מוגדרת היטב.
\n", + "לדוגמה, פונקציה יכולה להיות \"המר טמפרטורה ממעלות פרנהייט לצלזיוס\".
\n", + "במובן הזה, פונקציות הן כמו תוכניות קטנות – יש להן קלט, הן עושות תהליך מסוים ומחזירות תוצאה מסוימת.
\n", "אם ניקח את הפונקציה המדוברת מלמעלה, אפשר לתאר אותה כתוכנית קטנה כך:\n", "\n", - "
- קלט – טמפרטורה מסוימת
\n", - "- תהליך – המרת הטמפרטורה למעלות צלזיוס
\n", - "- פלט – החזרת התוצאה
\n", + "\n", + "
\n", - "- קלט – טמפרטורה מסוימת
\n", + "- תהליך – המרת הטמפרטורה למעלות צלזיוס
\n", + "- פלט – החזרת התוצאה
\n", "\n", - "פונקציות הן למעשה אבני הבניין של תוכנה – כל פונקציה שואפת למלא תפקיד מוגדר בתוכנה, ובעזרת הרבה אבני בניין שכאלו אפשר לבנות תוכנה מורכבת.
\n", + "\n", + "פונקציות הן למעשה אבני הבניין של תוכנה – כל פונקציה שואפת למלא תפקיד מוגדר בתוכנה, ובעזרת הרבה אבני בניין שכאלו אפשר לבנות תוכנה מורכבת.
" ] @@ -47,9 +47,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "התוכנות שבהן אתם משתמשים ביום־יום מורכבות בדרך כלל מכמות רבה מאוד של פונקציות. \n", "\n", - "עד סוף השיעור נדע איך יוצרים פונקציה כזו ואיך משתמשים בה.
\n", - "נדמיין פונקציה כמכונה שמקבלת ערכים, ויודעת לתת לנו פלט מסוים לפי אותם ערכים.
\n", + "\n", + "עד סוף השיעור נדע איך יוצרים פונקציה כזו ואיך משתמשים בה.
" ] @@ -59,9 +59,9 @@ "metadata": {}, "source": [ "" @@ -71,19 +71,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "נדמיין פונקציה כמכונה שמקבלת ערכים, ויודעת לתת לנו פלט מסוים לפי אותם ערכים.
\n", "אחרי שכתבנו פונקציה ובדקנו שהיא עובדת, נוכל להשתמש בה בלי לנסות לפענח בכל פעם מחדש את הלוגיקה שנמצאת בתוכה.\n", "דוגמאות
" + "##דוגמאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אחת הפונקציות שכמעט כולם מכירים היא העלאה בריבוע.
\n", - "הקלט של הפונקציה הוא מספר כלשהו, התהליך שקורה בפונקציה הוא הכפלת המספר בעצמו, והפלט הוא תוצאת המכפלה.
\n", - "לדוגמה, הקלט של פונקציה בשם \"העלאה בריבוע\" יכול להיות 5, והפלט שלה יהיה 25.
\n", + "\n", + "אחת הפונקציות שכמעט כולם מכירים היא העלאה בריבוע.
" ] }, @@ -91,19 +91,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "הקלט של הפונקציה הוא מספר כלשהו, התהליך שקורה בפונקציה הוא הכפלת המספר בעצמו, והפלט הוא תוצאת המכפלה.
\n", + "לדוגמה, הקלט של פונקציה בשם \"העלאה בריבוע\" יכול להיות 5, והפלט שלה יהיה 25.
\n", "דוגמאות נוספות לקלט הן -3, שעבורו הפלט יהיה 9,\n", - "או 0.5, שעבורו הפלט יהיה 0.25.
\n", + "או 0.5, שעבורו הפלט יהיה 0.25.
\n", "רעיונות נוספים לפונקציות
" + "###רעיונות נוספים לפונקציות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- בהינתן שני מספרים, בדוק מי הגדול ביניהם והחזר אותו.
\n", - "- בהינתן מספר כלשהו, החזר את סכום כל המספרים הזוגיים מ־0 ועד אליו.
\n", - "- בהינתן שני מספרים ופעולת חשבון, החזר את תוצאת התרגיל.
\n", - "- בהינתן שם משתנה, בדוק מה הסוג שלו (נשמע מוכר?)
\n", - "- בדוק מה הטמפרטורה הצפויה הממוצעת ב־n הימים הקרובים והחזר את התוצאה.
\n", + "\n", + "
" ] }, @@ -111,14 +111,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##- בהינתן שני מספרים, בדוק מי הגדול ביניהם והחזר אותו.
\n", + "- בהינתן מספר כלשהו, החזר את סכום כל המספרים הזוגיים מ־0 ועד אליו.
\n", + "- בהינתן שני מספרים ופעולת חשבון, החזר את תוצאת התרגיל.
\n", + "- בהינתן שם משתנה, בדוק מה הסוג שלו (נשמע מוכר?)
\n", + "- בדוק מה הטמפרטורה הצפויה הממוצעת ב־n הימים הקרובים והחזר את התוצאה.
\n", "כתיבת פונקציה
" + "##כתיבת פונקציה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " דרך קלה לקבל הערכה גסה של כמה קלוריות יש במוצר מזון, היא זו:\n", "
" ] @@ -127,11 +127,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- מצאו את כמות הפחמימות במוצר והכפילו ב־4.
\n", - "- מצאו את כמות השומן במוצר והכפילו ב־9.
\n", - "- מצאו את כמות החלבון במוצר והכפילו ב־4.
\n", - "- כמות הקלוריות במוצר היא חיבור הערכים שקיבלתם בשלבים 1–3.
\n", + "\n", + "
" ] }, @@ -139,23 +139,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מצאו את כמות הפחמימות במוצר והכפילו ב־4.
\n", + "- מצאו את כמות השומן במוצר והכפילו ב־9.
\n", + "- מצאו את כמות החלבון במוצר והכפילו ב־4.
\n", + "- כמות הקלוריות במוצר היא חיבור הערכים שקיבלתם בשלבים 1–3.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -163,7 +163,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו תוכנית (ללא פונקציות) המקבלת מהמשתמש את ערכי הפחמימות, השומן והחלבון במוצר.
\n", - " הדפיסו למשתמש את כמות הקלוריות במוצר.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו תוכנית (ללא פונקציות) המקבלת מהמשתמש את ערכי הפחמימות, השומן והחלבון במוצר.
\n", - "
\n", + " הדפיסו למשתמש את כמות הקלוריות במוצר.
\n", " פתרו את התרגיל לפני שתמשיכו הלאה.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", "והנה הפתרון לשאלה מלמעלה (אזהרת ספוילר!)
" ] }, @@ -185,15 +185,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###הגדרת הפונקציה
" + "###הגדרת הפונקציה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ההתחלה תהיה קפיצת ראש למים העמוקים, אבל אל חשש! אני אסביר בקרוב מה קורה כאן. בינתיים אני בונה קצת מתח.
\n", + "\n", + "ההתחלה תהיה קפיצת ראש למים העמוקים, אבל אל חשש! אני אסביר בקרוב מה קורה כאן. בינתיים אני בונה קצת מתח.
" ] @@ -217,9 +217,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "דבר ראשון נזרוק את הפתרון של התרגיל בתוך פונקציה.\n", "\n", - "בתא שממש פה מעל, השתמשנו במילת המפתח
def
ובעזרתה הגדרנו פונקציה שנקראת calculate_calories.
\n", - "לפני שניכנס לפרטים על אודות ההגדרה ומה היא עושה, הריצו את התא ונסו לשים אצבע על תופעה משונה בתא הזה...
\n", + "\n", + "בתא שממש פה מעל, השתמשנו במילת המפתח
" ] @@ -228,16 +228,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###def
ובעזרתה הגדרנו פונקציה שנקראת calculate_calories.
\n", + "לפני שניכנס לפרטים על אודות ההגדרה ומה היא עושה, הריצו את התא ונסו לשים אצבע על תופעה משונה בתא הזה...
\n", "ובכן, התופעה המשונה היא שבניגוד לפתרון התרגיל בלי הפונקציה שכתבנו למעלה, התא שבו הפונקציה כתובה לא עושה כלום!\n", "קריאה לפונקציה
" + "###קריאה לפונקציה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ובכן, זה מאחר שפונקציות לא פועלות מייד אחרי שמגדירים אותן.
\n", - "בניגוד למסרונים בתקופת בחירות, לפונקציות צריך ממש לקרוא אקטיבית כדי שיבואו.
\n", + "\n", + "ובכן, זה מאחר שפונקציות לא פועלות מייד אחרי שמגדירים אותן.
" ] @@ -255,8 +255,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "בניגוד למסרונים בתקופת בחירות, לפונקציות צריך ממש לקרוא אקטיבית כדי שיבואו.
\n", "נעשה את זה, לפחות בינתיים, על ידי כתיבת השם של הפונקציה ואז סוגריים עגולים ריקים:\n", "\n", - "מה שעשינו בתא שמעל נקרא קריאה לפונקציה, וזו למעשה הדרך לגרום לתוכן של הפונקציה לרוץ.
\n", + "\n", + "מה שעשינו בתא שמעל נקרא קריאה לפונקציה, וזו למעשה הדרך לגרום לתוכן של הפונקציה לרוץ.
" ] @@ -265,14 +265,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "זה ממש כמו להפעיל מעין תוכנה קטנה בתוך התוכנה שלנו.\n", "\n", - "מזל טוב! יש לנו פונקציה עובדת.
\n", + "\n", + "מזל טוב! יש לנו פונקציה עובדת.
\n", - "
\n", "זה אפילו היה די קל:\n", "\n", - "
- הגדרנו פונקציה בעזרת הקוד
\n", - "def function_name():
, כש־function_name הוא בעצם השם של הפונקציה.- מייד אחרי השורה הזו, כתבנו את גוף הפונקציה – מה היא עושה בפועל. בחלק הזה שמרנו על הזחה.
\n", - "- קראנו לפונקציה בציון השם שלה, ואז סוגריים. כך הפעלנו את הפונקציה, וגרמנו לכך שגוף הפונקציה ירוץ.
\n", + "\n", + "
" ] }, @@ -280,16 +280,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- הגדרנו פונקציה בעזרת הקוד
\n", + "def function_name():
, כש־function_name הוא בעצם השם של הפונקציה.- מייד אחרי השורה הזו, כתבנו את גוף הפונקציה – מה היא עושה בפועל. בחלק הזה שמרנו על הזחה.
\n", + "- קראנו לפונקציה בציון השם שלה, ואז סוגריים. כך הפעלנו את הפונקציה, וגרמנו לכך שגוף הפונקציה ירוץ.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -297,15 +297,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " קריאה לפונקציה חייבת להופיע אחרי הגדרתה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " קריאה לפונקציה חייבת להופיע אחרי הגדרתה.
\n", - "
\n", " אם קודם נקרא לפונקציה ורק אז נגדיר אותה, פייתון עדיין לא תכיר את הפונקציה ותזרוק לנו שגיאה.\n", "טרמינולוגיה
" + "###טרמינולוגיה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כדי לזקק את הרעיון, ננסה להגדיר פונקציה פשוטה יחסית, ונקרא לה מייד כדי להפעיל אותה.
\n", + "\n", + "כדי לזקק את הרעיון, ננסה להגדיר פונקציה פשוטה יחסית, ונקרא לה מייד כדי להפעיל אותה.
" ] @@ -327,16 +327,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "שימו לב למינוחים החשובים: כותרת הפונקציה, גוף הפונקציה, שם הפונקציה והקריאה לפונקציה.\n", "פרמטרים
" + "###פרמטרים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "נהוג להגיד שכל פונקציה צריכה להיות אחראית לדבר אחד בלבד.
\n", - "במילים אחרות – כמה שפחות עבודה בתוך כל פונקציה, וכמה שיותר התמקדות במה שהיא באמת צריכה לעשות, כך ייטב.
\n", + "\n", + "נהוג להגיד שכל פונקציה צריכה להיות אחראית לדבר אחד בלבד.
" ] @@ -362,14 +362,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "במילים אחרות – כמה שפחות עבודה בתוך כל פונקציה, וכמה שיותר התמקדות במה שהיא באמת צריכה לעשות, כך ייטב.
\n", "אחד הדברים הראשונים שנוח לנו להוציא מהפונקציה שלנו זה הקלט מהמשתמש, שביצענו בתוך הפונקציה:\n", "\n", - "הקוד הזה אומנם יעבוד, אבל הוא כתוב בצורה גרועה מאוד.
\n", - "הוא מפר את העיקרון שהתחלנו איתו – פונקציה אמורה להיות יחידה עצמאית, קטנה וארוזה.
\n", + "\n", + "הקוד הזה אומנם יעבוד, אבל הוא כתוב בצורה גרועה מאוד.
\n", - "
\n", + "הוא מפר את העיקרון שהתחלנו איתו – פונקציה אמורה להיות יחידה עצמאית, קטנה וארוזה.
\n", "היא אמורה להיות תלויה כמה שפחות בסביבה החיצונית.\n", "\n", - "בתוך הפונקציה אנחנו מתייחסים למשתנים fat, protein ו־carbs, שאינם חלק מהפונקציה.
\n", - "ייתכן שבעתיד מישהו יעתיק את הפונקציה calculate_calories לתוכנית שלו, והמשתנים הללו לא יהיו מוגדרים בגוף התוכנית.
\n", + "\n", + "בתוך הפונקציה אנחנו מתייחסים למשתנים fat, protein ו־carbs, שאינם חלק מהפונקציה.
" ] @@ -378,8 +378,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ייתכן שבעתיד מישהו יעתיק את הפונקציה calculate_calories לתוכנית שלו, והמשתנים הללו לא יהיו מוגדרים בגוף התוכנית.
\n", "במקרה כזה, לפונקציה לא יהיה מאיפה לקחת את הערכים והיא תקרוס.\n", "\n", - "הדרך להתמודד עם הבעיה הזו היא לחייב את הפונקציה לקבל באופן מסודר את הנתונים האלו מבחוץ.
\n", + "\n", + "הדרך להתמודד עם הבעיה הזו היא לחייב את הפונקציה לקבל באופן מסודר את הנתונים האלו מבחוץ.
" ] @@ -399,13 +399,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נראה דוגמה:\n", "\n", - "שימו לב לכותרת הפונקציה.
\n", - "הכנסנו לשם את שמות 3 המשתנים הדרושים להרצת הפונקציה.
\n", - "אם תרצו, תוכלו להסתכל על זה כ\"הקלט שנדרש עבור הפונקציה\", או במקרה שלנו: \"הנתונים שדרושים כדי לחשב את כמות הקלוריות במוצר\".
\n", + "\n", + "שימו לב לכותרת הפונקציה.
\n", - "
\n", + "הכנסנו לשם את שמות 3 המשתנים הדרושים להרצת הפונקציה.
\n", + "אם תרצו, תוכלו להסתכל על זה כ\"הקלט שנדרש עבור הפונקציה\", או במקרה שלנו: \"הנתונים שדרושים כדי לחשב את כמות הקלוריות במוצר\".
\n", "החלק הזה שהוספנו לפונקציה נקרא הפרמטרים של הפונקציה: כל אחד מהנתונים carbs, fat ו־protein הוא פרמטר.\n", "\n", + "
\n", "השם התיאורטי והמפונפן שמתכנתים משתמשים בו עבור השילוב של שם הפונקציה עם שמות הפרמטרים שלה נקרא חתימת הפונקציה.\n", "
" ] @@ -414,9 +414,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "איך תראה הקריאה לפונקציה עכשיו?
\n", - "אותו דבר, רק שבתוך הסוגריים נכתוב את הערכים שעבורם נרצה לחשב את כמות הקלוריות, לפי הסדר של הפרמטרים.
\n", + "\n", + "איך תראה הקריאה לפונקציה עכשיו?
" ] @@ -434,8 +434,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אותו דבר, רק שבתוך הסוגריים נכתוב את הערכים שעבורם נרצה לחשב את כמות הקלוריות, לפי הסדר של הפרמטרים.
\n", "הערכים שנעביר בתוך הקריאה לפונקציה נקראים ארגומנטים.\n", "\n", - "אם כך, בארוחה שבה 50 גרם פחמימות, 90 גרם שומן ו־20 גרם חלבון, יש כ־1,090 קלוריות.
\n", + "\n", + "אם כך, בארוחה שבה 50 גרם פחמימות, 90 גרם שומן ו־20 גרם חלבון, יש כ־1,090 קלוריות.
" ] }, @@ -443,7 +443,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", + "
\n", "נסכם את מה שעשינו עד עכשיו ונרענן את הטרמינולוגיה שלנו:\n", "
" ] @@ -472,16 +472,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -489,17 +489,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " מותר שבתוך פונקציה יוגדר משתנה ששמו זהה למשתנה שנמצא מחוץ לפונקציה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " מותר שבתוך פונקציה יוגדר משתנה ששמו זהה למשתנה שנמצא מחוץ לפונקציה.
\n", - "
\n", " מתכנתים רבים מעדיפים להימנע מכך כדי למנוע באגים.\n", "ערך החזרה
" + "###ערך החזרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "הפונקציה שלנו מתחילה להיראות נהדר, אבל מתכנתים מנוסים עדיין יעקמו את האף.
\n", - "כמו שאמרנו, פונקציה אמורה לעשות כמה שפחות, ולכן נעדיף שהיא גם לא תדפיס בעצמה את הערך שחישבה.
\n", - "היינו מעדיפים לקבל מהפונקציה רק את מספר הקלוריות שחישבנו, בלי טקסט מיותר.
\n", + "\n", + "הפונקציה שלנו מתחילה להיראות נהדר, אבל מתכנתים מנוסים עדיין יעקמו את האף.
" ] }, @@ -507,14 +507,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כמו שאמרנו, פונקציה אמורה לעשות כמה שפחות, ולכן נעדיף שהיא גם לא תדפיס בעצמה את הערך שחישבה.
\n", + "היינו מעדיפים לקבל מהפונקציה רק את מספר הקלוריות שחישבנו, בלי טקסט מיותר.
\n", "\n", - "יש לצורת עבודה כזו יתרונות משמעותיים.
\n", + "\n", + "יש לצורת עבודה כזו יתרונות משמעותיים.
\n", - "
\n", "אם הפונקציה תחזיר ערך מספרי, נוכל לעשות בו שימוש בפונקציות אחרות כדי לבצע פעולות המשך על התוצאה, כמו נניח: \n", "\n", - "
- לחשב כמה זמן אנחנו צריכים ללכת כדי לשרוף את כמות הקלוריות שצרכנו.
\n", - "- לחשב כמה סופגניות היינו יכולים לאכול במקום הארוחה שחישבנו את כמות הקלוריות בה.
\n", - "- לחשב אם נמכרו השנה מספיק המבורגרים של מקדונלדס כדי להשיג אנרגיה המשתווה בעוצמתה לפצצה שנחתה על הירושימה.
\n", + "\n", + "
" ] }, @@ -522,8 +522,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- לחשב כמה זמן אנחנו צריכים ללכת כדי לשרוף את כמות הקלוריות שצרכנו.
\n", + "- לחשב כמה סופגניות היינו יכולים לאכול במקום הארוחה שחישבנו את כמות הקלוריות בה.
\n", + "- לחשב אם נמכרו השנה מספיק המבורגרים של מקדונלדס כדי להשיג אנרגיה המשתווה בעוצמתה לפצצה שנחתה על הירושימה.
\n", "\n", - "אוקיי, על פניו יש דרך פשוטה למדי לטפל בזה.
\n", + "\n", + "אוקיי, על פניו יש דרך פשוטה למדי לטפל בזה.
" ] @@ -545,10 +545,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "בואו ננסה להפעיל את הפונקציה, ואז ניגש לערך calories שנמצא בתוכה!\n", "\n", - "מממ... זה לא עבד כמצופה.
\n", - "הסיבה שלא הצלחנו לקבל את התוכן של המשתנה calories מתוך הפונקציה, היא בגלל העיקרון שפונקציה היא קופסה סגורה.
\n", - "לכן, משתנים שמוגדרים בתוך הפונקציה זמינים אך ורק בתוכה, ונעלמים כשהיא מסיימת לרוץ.
\n", + "\n", + "מממ... זה לא עבד כמצופה.
" ] }, @@ -556,8 +556,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "הסיבה שלא הצלחנו לקבל את התוכן של המשתנה calories מתוך הפונקציה, היא בגלל העיקרון שפונקציה היא קופסה סגורה.
\n", + "לכן, משתנים שמוגדרים בתוך הפונקציה זמינים אך ורק בתוכה, ונעלמים כשהיא מסיימת לרוץ.
\n", "\n", - "אז איך בכל זאת אפשר לקבל את תוצאת החישוב שלנו מתוך פונקציה?
\n", + "\n", + "אז איך בכל זאת אפשר לקבל את תוצאת החישוב שלנו מתוך פונקציה?
" ] @@ -577,9 +577,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "הביטו על הפונקציה הבאה:\n", "\n", - "עוד לפני שאתייחס למילת המפתח החדשה
return
, שימו לב כמה נעים לקרוא את הפונקציה הזו.
\n", - "הפונקציה מתמקדת אך ורק במה שהיא אמורה לעשות, ואפשר להבין בקלות מה המטרה שלה ומה היא מבצעת.
\n", + "\n", + "עוד לפני שאתייחס למילת המפתח החדשה
" ] @@ -588,7 +588,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "return
, שימו לב כמה נעים לקרוא את הפונקציה הזו.
\n", + "הפונקציה מתמקדת אך ורק במה שהיא אמורה לעשות, ואפשר להבין בקלות מה המטרה שלה ומה היא מבצעת.
\n", "גם מתכנת שכלל לא מכיר את המטרה שלנו ואת התרגיל שממנו התחלנו, יכול במבט חטוף להבין מה ניסינו לעשות.\n", "\n", + "
\n", "ננסה לקרוא לפונקציה החדשה שהגדרנו, ונראה מה יקרה:\n", "
" ] @@ -606,9 +606,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "מעניין! הפונקציה ממש החזירה לנו ערך.
\n", - "זה אומר שהצלחנו לקבל מתוך הפונקציה נתון ממשי שאפשר לעבוד איתו.
\n", + "\n", + "מעניין! הפונקציה ממש החזירה לנו ערך.
" ] @@ -627,10 +627,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "זה אומר שהצלחנו לקבל מתוך הפונקציה נתון ממשי שאפשר לעבוד איתו.
\n", "בואו נשחק עם זה:\n", "\n", - "אם זה עוזר לתפיסת הנושא עבורכם, תוכלו לדמיין מה קורה מאחורי הקלעים:
\n", - "פייתון רואה קריאה לפונקציה. היא מעבירה את הארגומנטים ששלחתם לתוך הפרמטרים שמופיעים בכותרת הפונקציה.
\n", - "כשהפונקציה מחזירה ערך, החלק בקוד שקרא לפונקציה ממש מתחלף בערך שחזר מהפונקציה.
\n", + "\n", + "אם זה עוזר לתפיסת הנושא עבורכם, תוכלו לדמיין מה קורה מאחורי הקלעים:
" ] @@ -649,7 +649,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "פייתון רואה קריאה לפונקציה. היא מעבירה את הארגומנטים ששלחתם לתוך הפרמטרים שמופיעים בכותרת הפונקציה.
\n", + "כשהפונקציה מחזירה ערך, החלק בקוד שקרא לפונקציה ממש מתחלף בערך שחזר מהפונקציה.
\n", "כך ששלב הביניים, לפני ההדפסה למסך, נראה מבחינת פייתון כך (השוו עם המשבצת הקודמת):\n", "\n", + "
\n", "נוכל להשתמש ברעיון הזה כדי לכתוב את הקוד בצורה קריאה יותר – נשמור את הערך שהפונקציה החזירה לנו בצד, ונשתמש בו:\n", "
" ] @@ -669,7 +669,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "זה הזמן לראות את התוכנית שלנו מוכנה, עם כל הטרמינולוגיה עליה:\n", "
" ] @@ -699,16 +699,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###עקרונות נוספים
" + "###עקרונות נוספים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "העיקרון האחרון שניגע בו הוא העיקרון של החזרה מיידית.
\n", - "ברגע שפונקציה מגיעה לשורה שבה כתובreturn
, היא תחזיר ערך ותסיים את ריצתה באותה שורה.
\n", + "\n", + "העיקרון האחרון שניגע בו הוא העיקרון של החזרה מיידית.
" ] @@ -731,8 +731,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ברגע שפונקציה מגיעה לשורה שבה כתובreturn
, היא תחזיר ערך ותסיים את ריצתה באותה שורה.
\n", "בואו נראה דוגמה:\n", "\n", - "במקרה הזה, הערך היחיד שחזר הוא 6.
\n", + "\n", + "במקרה הזה, הערך היחיד שחזר הוא 6.
" ] @@ -741,16 +741,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "הסיבה לכך היא שאחרי השורהreturn number + 1
, הפונקציה החזירה ערך והפסיקה לרוץ.\n", "דוגמה נוספת
" + "###דוגמה נוספת
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפניכם דוגמה של פונקציה שמחשבת את הערך המוחלט של מספר.
\n", - "לצורך הדוגמה הזו, הערך המוחלט של מספר מוגדר כמרחק שלו מהמספר אפס.
\n", + "\n", + "לפניכם דוגמה של פונקציה שמחשבת את הערך המוחלט של מספר.
" ] @@ -773,17 +773,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "לצורך הדוגמה הזו, הערך המוחלט של מספר מוגדר כמרחק שלו מהמספר אפס.
\n", "למשל, הערך המוחלט של 6 הוא 6, והערך המוחלט של -4 הוא 4.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -791,16 +791,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " תרגול:\n", - " כתבו פונקציה שמקבלת שני מספרים ומחזירה את הגדול מביניהם.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " כתבו פונקציה שמקבלת שני מספרים ומחזירה את הגדול מביניהם.
\n", - "
\n", " רוצים אתגר? פתרו את התרגיל ב־4 שורות.\n", "מזהים?
" + "###מזהים?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ייתכן שלא שמתם לב, אבל אתם כבר מכירים פונקציות מועילות ואפילו יצא לכם להשתמש בהן!
\n", - "לדוגמה, הפונקציה
\n", + "\n", + "ייתכן שלא שמתם לב, אבל אתם כבר מכירים פונקציות מועילות ואפילו יצא לכם להשתמש בהן!
" ] @@ -809,9 +809,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "לדוגמה, הפונקציה
\n", "או הפונקציהtype
שמטרתה להחזיר את סוג המשתנה שהיא מקבלת כארגומנט.\n", "\n", - "עכשיו, כשאתם כבר מבינים איך עובדות פונקציות, הגיע הזמן להכיר פונקציה חדשה:
len
.
\n", - "הפונקציה הזו מקבלת מחרוזת – ומחזירה את האורך שלה.
\n", + "\n", + "עכשיו, כשאתם כבר מבינים איך עובדות פונקציות, הגיע הזמן להכיר פונקציה חדשה:
" ] @@ -839,23 +839,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##len
.
\n", + "הפונקציה הזו מקבלת מחרוזת – ומחזירה את האורך שלה.
\n", "בואו ננסה:\n", "מטרות" + "##
או: למה לי להשתמש בפונקציות בכללמטרות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###
או: למה לי להשתמש בפונקציות בכללקְרִיאוּת
" + "###קְרִיאוּת
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פונקציות מחלקות את הקוד שלנו לקטעים קטנים ובעלי שם, שיש מאחוריהם רעיון אחד שקל לקרוא ולתפוס.
\n", - "חלוקה לקטעים קטנים מאפשרת לנו לעקוב ביעילות אחרי מבנה התוכנית.
\n", + "\n", + "פונקציות מחלקות את הקוד שלנו לקטעים קטנים ובעלי שם, שיש מאחוריהם רעיון אחד שקל לקרוא ולתפוס.
" ] @@ -864,16 +864,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "חלוקה לקטעים קטנים מאפשרת לנו לעקוב ביעילות אחרי מבנה התוכנית.
\n", "כשנרצה לערוך חלק מסוים בתוכנית בשלב כלשהו – נדע בקלות ובמהירות איזה קטע בקוד צריך לשנות.\n", "מניעת חזרה
" + "###מניעת חזרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פונקציות עוזרות לנו למנוע מצבים שבהם היינו צריכים לכתוב קוד כמה פעמים.
\n", - "זה מועיל מכיוון שזה מאפשר לנו להשתמש מאוד מהר בקוד שכבר כתבנו בעבר.
\n", + "\n", + "פונקציות עוזרות לנו למנוע מצבים שבהם היינו צריכים לכתוב קוד כמה פעמים.
" ] @@ -882,14 +882,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "זה מועיל מכיוון שזה מאפשר לנו להשתמש מאוד מהר בקוד שכבר כתבנו בעבר.
\n", "סיבה נוספת שיש להזכיר לחיוב, היא שתחזוקת הקוד קלה במידה ניכרת כשמבצעים שינוי במקום אחד מוגדר, במקום במקומות רבים ברחבי הקוד.\n", "מונחים
" + "##מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "
- כותרת הפונקציה
- השורה הראשונה בהגדרת הפונקציה. מתחילה ב־
\n", "def
, וכוללת את שם הפונקציה ואת שמות הפרמטרים שלה.- שם הפונקציה
- שם שמתאר היטב את פעולתה של הפונקציה. אמור להתחיל בפעולה, כמו get_account_number.
\n", "- פרמטרים
- החלק שבתוך הסוגריים בכותרת הפונקציה. רשימה מופרדת בפסיקים של שמות המשתנים שימולאו בערכים מבחוץ, כדי שהפונקציה תוכל לבצע חישובים בעזרתם.
\n", @@ -905,19 +905,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##לסיכום
" + "##לסיכום
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פונקציה היא מעין יחידת תוכנה בסיסית וקטנה.
\n", - "היא עוזרת לנו לחלק את התוכנה שלנו לתתי־משימות, ועושה אותה לקריאה יותר ולקלה יותר לתחזוקה.
\n", - "את הפונקציה אנחנו מגדירים בעזרת כותרת הפונקציה, שמכילה את מילת המפתח def, ואז את שם הפונקציה ואת הפרמטרים שהיא אמורה לקבל.
\n", - "מייד לאחר כותרת הפונקציה נגדיר בהזחה את גוף הפונקציה – שכולל את החישובים או את הפעולות שהפונקציה צריכה לבצע,
\n", - "ובסוף נבצע החזרה לערך ההחזרה שיופיע אחרי מילת המפתחreturn
.
\n", + "\n", + "פונקציה היא מעין יחידת תוכנה בסיסית וקטנה.
" ] @@ -926,9 +926,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "היא עוזרת לנו לחלק את התוכנה שלנו לתתי־משימות, ועושה אותה לקריאה יותר ולקלה יותר לתחזוקה.
\n", + "את הפונקציה אנחנו מגדירים בעזרת כותרת הפונקציה, שמכילה את מילת המפתח def, ואז את שם הפונקציה ואת הפרמטרים שהיא אמורה לקבל.
\n", + "מייד לאחר כותרת הפונקציה נגדיר בהזחה את גוף הפונקציה – שכולל את החישובים או את הפעולות שהפונקציה צריכה לבצע,
\n", + "ובסוף נבצע החזרה לערך ההחזרה שיופיע אחרי מילת המפתחreturn
.
\n", "כדי להשתמש בפונקציה נקרא לפונקציה בהמשך הקוד על ידי כתיבת השם שלה, ובתוך סוגריים נפרט את הארגומנטים, שהם הערכים שנרצה להעביר לפונקציה.\n", "\n", - "חשוב לזכור!
\n", - "המשתנים בתוך הפונקציה אינם נגישים מבחוץ, כיוון שהיא נחשבת יחידה סגורה.
\n", + "\n", + "חשוב לזכור!
" ] @@ -937,24 +937,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "המשתנים בתוך הפונקציה אינם נגישים מבחוץ, כיוון שהיא נחשבת יחידה סגורה.
\n", "כמו כן, ברגע שהפונקציה מריצה שורה שבה כתובreturn
, היא מחזירה ערך וריצתה נפסקת.\n", "תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###תרגיל לדוגמה: מרתון
" + "###תרגיל לדוגמה: מרתון
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "דני מתאמן למרתון הקרוב. הוא מתחיל להתכונן על אש נמוכה, ורץ אתמול 5 קילומטרים.
\n", - "כתבו פונקציה שמקבלת כמה שעות לקח לדני לגמוע את 5 הקילומטרים הללו, ומחשבת מה קצב הריצה הממוצע של דני, בקמ\"ש.
\n", - "כתבו פונקציה נוספת שבודקת אם דני יכול להשלים מרתון בתוך 3 שעות.
\n", + "\n", + "דני מתאמן למרתון הקרוב. הוא מתחיל להתכונן על אש נמוכה, ורץ אתמול 5 קילומטרים.
" ] @@ -963,9 +963,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כתבו פונקציה שמקבלת כמה שעות לקח לדני לגמוע את 5 הקילומטרים הללו, ומחשבת מה קצב הריצה הממוצע של דני, בקמ\"ש.
\n", + "כתבו פונקציה נוספת שבודקת אם דני יכול להשלים מרתון בתוך 3 שעות.
\n", "אורכו של מסלול מרתון הוא 42.195 קילומטר.\n", "\n", - "ניתן לחשב באיזו מהירות (בקמ\"ש) דני רץ אם ניקח את כמות הקילומטרים שעבר, ונחלק אותה בכמות השעות שרץ.
\n", - "ניתן לחשב כמה זמן יקח לדני לרוץ מסלול מסוים, אם ניקח את המרחק בקילומטרים שרץ ונחלק אותו במהירות של דני (בקמ\"ש).
\n", + "\n", + "ניתן לחשב באיזו מהירות (בקמ\"ש) דני רץ אם ניקח את כמות הקילומטרים שעבר, ונחלק אותה בכמות השעות שרץ.
" ] @@ -987,7 +987,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ניתן לחשב כמה זמן יקח לדני לרוץ מסלול מסוים, אם ניקח את המרחק בקילומטרים שרץ ונחלק אותו במהירות של דני (בקמ\"ש).
\n", "ניתן לחשב כמה קילומטרים דני ירוץ בזמן נתון, אם ניקח את המהירות שלו בקמ\"ש ונכפיל אותה בזמן שלקח לו לרוץ את המרחק הזה.\n", "\n", + "
\n", "הפתרון מופיע בתחתית המחברת.\n", "
" ] @@ -996,14 +996,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###האריך במילים
" + "###האריך במילים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כתבו פונקציה שמקבלת 3 מחרוזות כארגומנטים ומחזירה את המחרוזת הארוכה יותר מביניהן.\n", "
" ] @@ -1012,29 +1012,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###פיזבאז
" + "###פיזבאז
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "זוהי גרסה של תרגיל פופולרי בראיונות עבודה.\n", "
\n", - "\n", - "כתבו פונקציה שמקבלת מספר.
\n", - "אם המספר מתחלק ב־3 ללא שארית, הדפיסו Fizz.
\n", - "אם המספר מתחלק ב־5 ללא שארית, הדפיסו Buzz.
\n", - "אם המספר מתחלק גם ב־3 וגם ב־5 ללא שארית, הדפיסו FizzBuzz.
\n", + "\n", + "כתבו פונקציה שמקבלת מספר.
\n", - "\n", - "
\n", + "אם המספר מתחלק ב־3 ללא שארית, הדפיסו Fizz.
\n", + "אם המספר מתחלק ב־5 ללא שארית, הדפיסו Buzz.
\n", + "אם המספר מתחלק גם ב־3 וגם ב־5 ללא שארית, הדפיסו FizzBuzz.
\n", "אם המספר לא מתחלק ב־3 ולא מתחלק ב־5, הדפיסו את המספר עצמו.\n", "\n", + "
\n", " לדוגמה,\n", - " עבור המספר 9 הדפיסו Fizz,
" ] @@ -1043,16 +1042,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", - " עבור המספר 10 הדפיסו Buzz,
\n", - " עבור המספר 15 הדפיסו FizzBuzz,
\n", + " עבור המספר 9 הדפיסו Fizz,
\n", + " עבור המספר 10 הדפיסו Buzz,
\n", + " עבור המספר 15 הדפיסו FizzBuzz,
\n", " ועבור המספר 7 הדפיסו 7.\n", "מספר הפוך
" + "###מספר הפוך
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כתבו פונקציה שמקבלת מספר דו־ספרתי שספרת האחדות שלו שונה מ־0.
\n", - "הפונקציה תחזיר את המספר הפוך.
\n", + "\n", + "כתבו פונקציה שמקבלת מספר דו־ספרתי שספרת האחדות שלו שונה מ־0.
" ] @@ -1061,23 +1060,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "הפונקציה תחזיר את המספר הפוך.
\n", "לדוגמה: עבור 53 הפונקציה תחזיר 35. עבור 19 הפונקציה תחזיר 91. עבור 91 הפונקציה תחזיר 19.\n", "מפענח הצפנים
" + "###מפענח הצפנים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1085,17 +1084,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זהו תרגיל ברמת קושי גבוהה, שמערב נושאים רבים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " זהו תרגיל ברמת קושי גבוהה, שמערב נושאים רבים.
\n", - "
\n", " הרגישו בנוח להיעזר במתרגלים שלכם.\n", "\n", - "הצופן לכספת הביתית שלכם הוא 4812. בנו משחק בול־פגיעה שמאפשר למשתמש לנסות לנחש את הצופן.
\n", - "למשתמש יש 3 ניסיונות לנחש נכונה את הצופן שלכם לפני שמופעלת אזעקה.
\n", - "כחלק ממנגנון ההגנה מאיבוד הסיסמה של הכספת, היא מציגה כמה ספרות נכונות המשתמש הזין אחרי כל ניחוש.
\n", - "אפשרו למשתמש להזין קוד 3 פעמים, וכתבו לו בכל ניסיון כמה מתוך הספרות שהזין באמת קיימות בקוד הנכון, לאו דווקא בסדר שהקיש.
\n", - "אם לא הצליח אחרי 3 ניסיונות, הדפיסו שהאזעקה הופעלה וסיימו את התוכנית.
\n", + "\n", + "הצופן לכספת הביתית שלכם הוא 4812. בנו משחק בול־פגיעה שמאפשר למשתמש לנסות לנחש את הצופן.
\n", - "
\n", + "למשתמש יש 3 ניסיונות לנחש נכונה את הצופן שלכם לפני שמופעלת אזעקה.
\n", + "כחלק ממנגנון ההגנה מאיבוד הסיסמה של הכספת, היא מציגה כמה ספרות נכונות המשתמש הזין אחרי כל ניחוש.
\n", + "אפשרו למשתמש להזין קוד 3 פעמים, וכתבו לו בכל ניסיון כמה מתוך הספרות שהזין באמת קיימות בקוד הנכון, לאו דווקא בסדר שהקיש.
\n", + "אם לא הצליח אחרי 3 ניסיונות, הדפיסו שהאזעקה הופעלה וסיימו את התוכנית.
\n", "\n", - "לדוגמה, אם המשתמש הקיש בניסיון הראשון 0634, הדפיסו לו שרק אחת הספרות שניחש נכונה.
\n", - "אם המשתמש הקיש בסיבוב השני 1234, הדפיסו לו ש־3 ספרות תואמות את הקוד המקורי.
\n", - "אם המשתמש הקיש בסיבוב השלישי 1284, הדפיסו לו ש־4 ספרות תואמות את הקוד המקורי, ואז הדפיסו לו שהופעלה האזעקה.
\n", + "\n", + "לדוגמה, אם המשתמש הקיש בניסיון הראשון 0634, הדפיסו לו שרק אחת הספרות שניחש נכונה.
" ] @@ -1104,17 +1103,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "אם המשתמש הקיש בסיבוב השני 1234, הדפיסו לו ש־3 ספרות תואמות את הקוד המקורי.
\n", + "אם המשתמש הקיש בסיבוב השלישי 1284, הדפיסו לו ש־4 ספרות תואמות את הקוד המקורי, ואז הדפיסו לו שהופעלה האזעקה.
\n", "אם המשתמש הקיש באחד הסיבובים 4812, הדפיסו שהכספת נפתחה בהצלחה וסיימו את התוכנית מייד.\n", "סכום מספרים
" + "###סכום מספרים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "קבלו מספר וחשבו את העצרת שלו – מכפלת כל המספרים עד אותו מספר.
\n", - "לדוגמה, 5 עצרת שווה ל־1 כפול 2 כפול 3 כפול 4 כפול 5, והתוצאה היא 120.
\n", - "זהירות! זה תרגיל בונוס, והוא קשה מאוד. מאוד. מאוד מאוד. אנחנו לא אומרים סתם. הוא לא חובה ומיועד לאנשים שרוצים לאתגר את עצמם. מאוד.
\n", + "\n", + "קבלו מספר וחשבו את העצרת שלו – מכפלת כל המספרים עד אותו מספר.
" ] }, @@ -1122,7 +1121,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "לדוגמה, 5 עצרת שווה ל־1 כפול 2 כפול 3 כפול 4 כפול 5, והתוצאה היא 120.
\n", + "זהירות! זה תרגיל בונוס, והוא קשה מאוד. מאוד. מאוד מאוד. אנחנו לא אומרים סתם. הוא לא חובה ומיועד לאנשים שרוצים לאתגר את עצמם. מאוד.
\n", "פתרון התרגול לדוגמה: מרתון
" + "###פתרון התרגול לדוגמה: מרתון
" ] }, { @@ -1155,7 +1154,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "בואו ננקה, נסדר ונהפוך דברים ליותר כלליים:\n", "
" ] diff --git a/week2/4_Lists.ipynb b/week2/4_Lists.ipynb index 04ef3ca..3ed0171 100644 --- a/week2/4_Lists.ipynb +++ b/week2/4_Lists.ipynb @@ -4,29 +4,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#רשימות
" + "#רשימות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "רשימה, כשמה כן היא, מייצגת אוסף מסודר של ערכים. רשימות יהיו סוג הנתונים הראשון שנכיר בפייתון, שמטרתו היא לקבץ ערכים.
\n", + "\n", + "רשימה, כשמה כן היא, מייצגת אוסף מסודר של ערכים. רשימות יהיו סוג הנתונים הראשון שנכיר בפייתון, שמטרתו היא לקבץ ערכים.
" ] @@ -35,8 +35,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "הרעיון מוכר לנו מהיום־יום: רשימת פריטים לקנייה בסופר שמסודרת לפי הא–ב, או רשימת ההופעות בקיץ הקרוב המסודרת לפי תאריך.\n", "\n", - "נסו לדמיין רשימה כמסדרון ארוך, שבו עומדים בתור אחד אחרי השני איברים מסוגים שאנחנו מכירים בפייתון.
\n", + "\n", + "נסו לדמיין רשימה כמסדרון ארוך, שבו עומדים בתור אחד אחרי השני איברים מסוגים שאנחנו מכירים בפייתון.
" ] @@ -46,37 +46,35 @@ "metadata": {}, "source": [ "
\n", "אם נשתמש בדימוי הלייזרים שנתנו למשתנים בשבוע הקודם, אפשר להגיד שמדובר בלייזר שמצביע לשורת לייזרים, שבה כל לייזר מצביע על ערך כלשהו.\n", "\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "\n", - " \n", - "\"David Ben-Gurion\" \n", - "\"Moshe Sharett\" \n", - "\"David Ben-Gurion\" \n", - "\"Levi Eshkol\" \n", - "\"Yigal Alon\" \n", - "\"Golda Meir\" \n", - "\n", - " \n", - " \n", + "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "\n", + " \n", + "\"David Ben-Gurion\" \n", + "\"Moshe Sharett\" \n", + "\"David Ben-Gurion\" \n", + "\"Levi Eshkol\" \n", + "\"Yigal Alon\" \n", + "\"Golda Meir\" \n", + "\n", + " \n", + "\n", "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "
\n", - "\n", - "\n", + "
\n", + "\n", " דוגמה לרשימה: 6 ראשי הממשלה הראשונים בישראל לפי סדר כהונתם, משמאל לימין\n", "
" ] @@ -85,38 +83,38 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##דוגמאות
" + "##דוגמאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- רשימת שמות ראשי הממשלה במדינת ישראל לפי סדר כהונתם.
\n", - "- רשימת הגילים של התלמידים בכיתה, מהמבוגר לצעיר.
\n", - "- רשימת שמות של התקליטים שיש לי בארון, מסודרת מהתקליט השמאלי לימני.
\n", - "- רשימה שבה כל איבר מייצג אם לראש הממשלה שנמצא בתא התואם ברשימה הקודמת היו משקפיים.
\n", - "- האיברים 42, 8675309, 73, -40 ו־186282 בסדר הזה.
\n", - "- רשימה של תחזית מזג האוויר ב־7 הימים הקרובים. כל איבר ברשימה הוא בפני עצמו רשימה, שמכילה שני איברים: הראשון הוא מה תהיה הטמפרטורה הממוצעת, והשני הוא מה תהיה הלחות הממוצעת.
\n", - "" + "
\n", + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- רשימת שמות ראשי הממשלה במדינת ישראל לפי סדר כהונתם.
\n", + "- רשימת הגילים של התלמידים בכיתה, מהמבוגר לצעיר.
\n", + "- רשימת שמות של התקליטים שיש לי בארון, מסודרת מהתקליט השמאלי לימני.
\n", + "- רשימה שבה כל איבר מייצג אם לראש הממשלה שנמצא בתא התואם ברשימה הקודמת היו משקפיים.
\n", + "- האיברים 42, 8675309, 73, -40 ו־186282 בסדר הזה.
\n", + "- רשימה של תחזית מזג האוויר ב־7 הימים הקרובים. כל איבר ברשימה הוא בפני עצמו רשימה, שמכילה שני איברים: הראשון הוא מה תהיה הטמפרטורה הממוצעת, והשני הוא מה תהיה הלחות הממוצעת.
\n", + "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -124,15 +122,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תרגול:\n", - " הרשימות שהוצגו למעלה הן רשימות הומוגניות, כאלו שכל האיברים שבהן הם מאותו סוג.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " הרשימות שהוצגו למעלה הן רשימות הומוגניות, כאלו שכל האיברים שבהן הם מאותו סוג.
\n", - "
\n", " כתבו עבור כל אחת מהרשימות שהוצגו בדוגמה מה סוג הנתונים שיישמר בהן.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -140,14 +138,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", - " תרגול:\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", " נסו לתת דוגמה לעוד 3 רשימות שבהן נתקלתם לאחרונה.
\n", - "רשימות בקוד
" + "##רשימות בקוד
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "רשימות הן אחד מסוגי הנתונים הכיפיים ביותר בפייתון, וזאת בזכות הגמישות האדירה שיש לנו בתכנות עם רשימות.\n", "
" ] @@ -156,14 +154,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הגדרת רשימה" + "### הגדרת רשימה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נגדיר בעזרת פייתון את הרשימה שפגשנו למעלה – 6 ראשי הממשלה הראשונים מאז קום המדינה:\n", "
" ] @@ -181,13 +179,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "מה התרחש בקוד?
\n", - "התחלנו את הגדרת הרשימה באמצעות התו[
.
\n", - "מייד אחרי התו הזה הכנסנו איברים לרשימה לפי הסדר הרצוי, כאשר כל איבר מופרד ממשנהו בפסיק (,
).
\n", - "במקרה שלנו, כל איבר הוא מחרוזת המייצגת ראש ממשלה. הכנסנו את ראשי הממשלה לרשימה לפי סדר כהונתם.
\n", - "שימו לב שהרשימה מכילה איבר מסוים פעמיים – מכאן שרשימה היא מבנה נתונים שתומך בחזרות.
\n", - "לסיום, נסגור את הגדרת הרשימה באמצעות התו]
.
\n", + "\n", + "מה התרחש בקוד?
" ] }, @@ -213,7 +211,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "התחלנו את הגדרת הרשימה באמצעות התו[
.
\n", + "מייד אחרי התו הזה הכנסנו איברים לרשימה לפי הסדר הרצוי, כאשר כל איבר מופרד ממשנהו בפסיק (,
).
\n", + "במקרה שלנו, כל איבר הוא מחרוזת המייצגת ראש ממשלה. הכנסנו את ראשי הממשלה לרשימה לפי סדר כהונתם.
\n", + "שימו לב שהרשימה מכילה איבר מסוים פעמיים – מכאן שרשימה היא מבנה נתונים שתומך בחזרות.
\n", + "לסיום, נסגור את הגדרת הרשימה באמצעות התו]
.
\n", "\n", + "
\n", "נוכל להגדיר רשימה של המספרים הטבעיים עד 7:\n", "
" ] @@ -231,9 +229,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "רשימה הומוגנית היא רשימה שבה האיברים שנמצאים בכל אחד מהתאים הם מאותו סוג. רשימות \"בעולם האמיתי\" הן בדרך כלל הומוגניות.
\n", - "רשימה הטרוגנית היא רשימה שבה איברים בתאים שונים יכולים להיות מסוגים שונים.
\n", + "\n", + "רשימה הומוגנית היא רשימה שבה האיברים שנמצאים בכל אחד מהתאים הם מאותו סוג. רשימות \"בעולם האמיתי\" הן בדרך כלל הומוגניות.
" ] @@ -242,7 +240,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "רשימה הטרוגנית היא רשימה שבה איברים בתאים שונים יכולים להיות מסוגים שונים.
\n", "ההבדל הוא סמנטי בלבד, ופייתון לא מבדילה בין רשימה הטרוגנית לרשימה הומוגנית.\n", "\n", + "
\n", "לשם הדוגמה, נגדיר רשימה הטרוגנית:\n", "
" ] @@ -260,7 +258,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נוכל אפילו להגדיר רשימה ריקה, שבה אין איברים כלל:
" ] }, @@ -277,17 +275,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###גישה לאיברי הרשימה
" + "###גישה לאיברי הרשימה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לכל תא ברשימה יש מספר, שמאפשר לנו להתייחס לאיבר שנמצא באותו תא.
\n", - "הדבר דומה ללייזר שעליו יש מדבקת שם (\"שמות ראשי ממשלה\"), והוא מצביע על שורת לייזרים שעל התווית שלהם מופיע מספר המתאר את מיקומם בשורה.
\n", - "התא השמאלי ביותר ברשימה ממוספר כ־0, התא שנמצא אחריו (מימינו) מקבל את המספר 1, וכך הלאה עד לסוף הרשימה.
\n", + "\n", + "לכל תא ברשימה יש מספר, שמאפשר לנו להתייחס לאיבר שנמצא באותו תא.
" ] @@ -296,7 +294,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "הדבר דומה ללייזר שעליו יש מדבקת שם (\"שמות ראשי ממשלה\"), והוא מצביע על שורת לייזרים שעל התווית שלהם מופיע מספר המתאר את מיקומם בשורה.
\n", + "התא השמאלי ביותר ברשימה ממוספר כ־0, התא שנמצא אחריו (מימינו) מקבל את המספר 1, וכך הלאה עד לסוף הרשימה.
\n", "המספור של כל תא נקרא המיקום שלו ברשימה, או האינדקס שלו.\n", "\n", + "
\n", "נגדיר את רשימת שמות התקליטים שיש לי בבית:\n", "
" ] @@ -315,8 +313,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בהנחה שאנחנו מתים על Guardians of the Galaxy, נוכל לנסות להשיג מהרשימה את Awesome Mix Vol. 1.
\n", + "\n", + "בהנחה שאנחנו מתים על Guardians of the Galaxy, נוכל לנסות להשיג מהרשימה את Awesome Mix Vol. 1.
" ] @@ -334,18 +332,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "כדי לעשות זאת, נציין את שם הרשימה שממנה אנחנו רוצים לקבל את האיבר, ומייד לאחר מכן את מיקומו ברשימה בסוגריים מרובעים.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -354,10 +352,10 @@ "metadata": {}, "source": [ "" ] }, @@ -365,10 +363,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " התא הראשון ממוספר 0, ולא 1.
\n", - " יש לכך סיבות טובות, אבל פעמים רבות תרגישו שהמספור הזה לא טבעי ועלול ליצור באגים, שהם קטעי קוד שמתנהגים אחרת משציפה המתכנת.
\n", - " כפועל יוצא, המיקום ברשימה של התא האחרון לא יהיה כאורך הרשימה, אלא כאורך הרשימה פחות אחד.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " התא הראשון ממוספר 0, ולא 1.
\n", - "
\n", + " יש לכך סיבות טובות, אבל פעמים רבות תרגישו שהמספור הזה לא טבעי ועלול ליצור באגים, שהם קטעי קוד שמתנהגים אחרת משציפה המתכנת.
\n", + " כפועל יוצא, המיקום ברשימה של התא האחרון לא יהיה כאורך הרשימה, אלא כאורך הרשימה פחות אחד.
\n", " משמע: ברשימה שבה 3 איברים, מספרו של התא האחרון יהיה 2.\n", "\n", - "כפי שניתן לראות בתמונה, פייתון מנסה לעזור לנו ומאפשרת לנו לגשת לאיברים גם מהסוף.
\n", - "חוץ מהמספור הרגיל שראינו קודם, אפשר לגשת לאיברים מימין לשמאל באמצעות מספור שלילי.
\n", - "האיבר האחרון יקבל את המספר -1, זה שלפניו (משמאלו) יקבל -2 וכן הלאה. \n", + "\n", + "כפי שניתן לראות בתמונה, פייתון מנסה לעזור לנו ומאפשרת לנו לגשת לאיברים גם מהסוף.
" ] }, @@ -387,7 +385,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "חוץ מהמספור הרגיל שראינו קודם, אפשר לגשת לאיברים מימין לשמאל באמצעות מספור שלילי.
\n", + "האיבר האחרון יקבל את המספר -1, זה שלפניו (משמאלו) יקבל -2 וכן הלאה. \n", "\n", + "
\n", "אם נרצה לגשת שוב לאותו דיסק, אבל הפעם מהסוף, נוכל לכתוב זאת כך:\n", "
" ] @@ -405,8 +403,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כדאי לזכור שהתוכן של כל אחד מהתאים הוא ערך לכל דבר.
\n", + "\n", + "כדאי לזכור שהתוכן של כל אחד מהתאים הוא ערך לכל דבר.
" ] @@ -433,7 +431,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "יש לו סוג, ואפשר לבצע עליו פעולות כמו שלמדנו עד עכשיו:\n", "\n", + "
\n", "לסיום, נראה שבדיוק כמו במחרוזות, נוכל לבדוק את אורך הרשימה על ידי שימוש בפונקציה
" ] @@ -452,17 +450,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "len
.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -470,15 +468,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " אם ננסה לגשת לתא שאינו קיים, נקבל
IndexError
.
\n", - " זה בדרך כלל קורה כשאנחנו שוכחים להתחיל לספור מ־0.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " אם ננסה לגשת לתא שאינו קיים, נקבל
\n", - "IndexError
.
\n", + " זה בדרך כלל קורה כשאנחנו שוכחים להתחיל לספור מ־0.
\n", " אם השגיאה הזו מופיעה כשאתם מתעסקים עם רשימות, חשבו איפה בקוד פניתם לתא שאינו קיים.\n", "השמה ברשימות
" + "###השמה ברשימות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפעמים נרצה לשנות את הערך של האיברים ברשימה.
\n", + "\n", + "לפעמים נרצה לשנות את הערך של האיברים ברשימה.
" ] @@ -498,14 +496,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "נפנה ללייזר מסוים בשורת הלייזרים שלנו, ונבקש ממנו להצביע לערך חדש:\n", "אופרטורים חשבוניים על רשימות
" + "###אופרטורים חשבוניים על רשימות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אופרטורים שהכרנו כשלמדנו על מחרוזות, יעבדו נהדר גם על רשימות.\n", "
" ] @@ -514,7 +512,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כפי ש־
" ] @@ -541,7 +539,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "+
משרשר בין מחרוזות, הוא יודע לשרשר גם בין רשימות:\n", "\n", + "
\n", "וכפי ש־
" ] @@ -559,7 +557,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "*
משרשר מחרוזת לעצמה כמות מסוימת של פעמים, כך הוא יפעל גם עם רשימות:\n", "\n", + "
\n", "אפשר גם לשלב:\n", "
" ] @@ -577,9 +575,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "שימו לב שכל אופרטור שתשימו ליד הרשימה מתייחס לרשימה בלבד, ולא לאיברים שבתוכה.
\n", - "משמע+ 5
לא יוסיף לכם 5 לכל אחד מהאיברים, אלא ייכשל כיוון שפייתון לא יודעת לחבר רשימה למספר שלם.
\n", + "\n", + "שימו לב שכל אופרטור שתשימו ליד הרשימה מתייחס לרשימה בלבד, ולא לאיברים שבתוכה.
" ] }, @@ -596,8 +594,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "משמע+ 5
לא יוסיף לכם 5 לכל אחד מהאיברים, אלא ייכשל כיוון שפייתון לא יודעת לחבר רשימה למספר שלם.
\n", "\n", - "שימו לב גם שהפעלת אופרטור על רשימה לא גורמת לשינוי הרשימה, אלא רק מחזירה ערך.
\n", + "\n", + "שימו לב גם שהפעלת אופרטור על רשימה לא גורמת לשינוי הרשימה, אלא רק מחזירה ערך.
" ] @@ -637,14 +635,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "כדי לשנות ממש את הרשימה, נצטרך להשתמש בהשמה:\n", "אופרטורים השוואתיים על רשימות
" + "###אופרטורים השוואתיים על רשימות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נגדיר את רשימת האנשים שנכחו בכיתה ביום ראשון, שני, שלישי ורביעי:\n", "
" ] @@ -665,8 +663,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "רשימות תומכות בכל אופרטורי ההשוואה שלמדנו עד כה.
\n", + "\n", + "רשימות תומכות בכל אופרטורי ההשוואה שלמדנו עד כה.
" ] @@ -686,7 +684,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נתחיל בקל ביותר. בואו נבדוק באיזה יום הרכב התלמידים בכיתה היה זהה להרכב התלמידים שהיה בה ביום ראשון:\n", "\n", + "
\n", "האם משה נכח בכיתה ביום שלישי? \n", "
" ] @@ -706,7 +704,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נוכיח שמאסטר ספלינטר הבריז באותו יום: \n", "
" ] @@ -724,7 +722,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "ולסיום, בואו נבדוק איזו גרסה חדשה יותר: \n", "
" ] @@ -744,8 +742,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כדי לבצע השוואה בין רשימות, פייתון מנסה להשוות את האיבר הראשון מהרשימה הראשונה לאיבר הראשון מהרשימה השנייה.
\n", + "\n", + "כדי לבצע השוואה בין רשימות, פייתון מנסה להשוות את האיבר הראשון מהרשימה הראשונה לאיבר הראשון מהרשימה השנייה.
" ] @@ -754,16 +752,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "אם יש \"תיקו\", היא תעבור לאיבר השני בכל רשימה, כך עד סוף הרשימה.\n", "רשימה של רשימות
" + "###רשימה של רשימות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " לעיתים דברים בחיים האמיתיים הם מורכבים מדי מכדי לייצג אותם ברשימה סטנדרטית.
\n", - " הרבה פעמים נשים לב שיוקל לנו אם ניצור רשימה שבה כל תא הוא רשימה בפני עצמו.
הרעיון הזה ייצור לנו רשימה של רשימות.
\n", + "\n", + " לעיתים דברים בחיים האמיתיים הם מורכבים מדי מכדי לייצג אותם ברשימה סטנדרטית.
" ] @@ -784,7 +782,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הרבה פעמים נשים לב שיוקל לנו אם ניצור רשימה שבה כל תא הוא רשימה בפני עצמו.
הרעיון הזה ייצור לנו רשימה של רשימות.
\n", " ניקח לדוגמה את הרשימות שהגדרנו למעלה, שמתארות מי נכח בכל יום בכיתה:\n", "\n", + "
\n", " אנחנו רואים לפנינו רשימה של ימים, שקל להכניס לרשימה אחת גדולה: \n", "
" ] @@ -804,114 +802,112 @@ "metadata": {}, "source": [ "\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "\n", - " \n", + " \n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "\n", + " \n", - "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "\n", - " \n", - "\"Moshe\" \n", - "\"Dukasit\" \n", - "\"Michelangelo\" \n", - "\n", - " \n", - " \n", + "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "\n", + " \n", + "\"Moshe\" \n", + "\"Dukasit\" \n", + "\"Michelangelo\" \n", + "\n", + " \n", + "\n", "-3 \n", + "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "\n", - " \n", - "\"Moshe\" \n", - "\"Dukasit\" \n", - "\"Splinter\" \n", - "\n", - " \n", - " \n", + "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "\n", + " \n", + "\"Moshe\" \n", + "\"Dukasit\" \n", + "\"Splinter\" \n", + "\n", + " \n", + "\n", "-3 \n", + "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "\n", - " \n", - "\"Moshe\" \n", - "\"Dukasit\" \n", - "\"Michelangelo\" \n", - "\n", - " \n", - " \n", + "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "\n", + " \n", + "\"Moshe\" \n", + "\"Dukasit\" \n", + "\"Michelangelo\" \n", + "\n", + " \n", + "\n", "-3 \n", + "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "\n", - " \n", - "\"Moshe\" \n", - "\"Dukasit\" \n", - "\"Michelangelo\" \n", - "\"Splinter\" \n", - "\n", - " \n", - " \n", + "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "\n", + " \n", + "\"Moshe\" \n", + "\"Dukasit\" \n", + "\"Michelangelo\" \n", + "\"Splinter\" \n", + "\n", + " \n", + "\n", "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", - " \n", - " \n", + "\n", + "\n", + "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "
\n", - "\n", - "\n", + "
\n", + "\n", " דוגמה לרשימה של רשימות: נוכחות התלמידים בימי ראשון עד רביעי\n", "
" ] @@ -920,7 +916,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " השורה שכתבנו למעלה זהה לחלוטין לשורה הבאה, שבה אנחנו מגדירים רשימה אחת שכוללת את רשימות התלמידים שנכחו בכיתה בכל יום. \n", "
" ] @@ -938,7 +934,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נוכל לקבל את רשימת התלמידים שנכחו ביום ראשון בצורה הבאה:\n", "
" ] @@ -956,7 +952,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "ואת התלמיד האחרון שנכח ביום ראשון בצורה הבאה:\n", "
" ] @@ -977,18 +973,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אם קשה לכם לדמיין את זה, עשו זאת בשלבים.
\n", + "\n", + " אם קשה לכם לדמיין את זה, עשו זאת בשלבים.
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בדקו מה יש ב־pupils
, אחרי זה מה מחזירpupils[0]
, ואז נסו לקחת ממנו את האיבר האחרון,pupils[0][-1]
.\n", - "\n", - "כדי להבין טוב יותר איך רשימה של רשימות מתנהגת, חשוב להבין את התוצאות של הביטויים הבוליאניים הבאים.
\n", + "\n", + "כדי להבין טוב יותר איך רשימה של רשימות מתנהגת, חשוב להבין את התוצאות של הביטויים הבוליאניים הבאים.
" ] @@ -1013,13 +1009,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "זה קצת מבלבל, אבל אני סומך עליכם שתחזיקו מעמד:\n", "\n", - "
- הביטוי הבוליאני בשורה 1 מחזיר False, כיוון שכל אחד מהאיברים ברשימה pupils הוא רשימה, ואף אחד מהם אינו המחרוזת \"Moshe\".
\n", - "- הביטוי הבוליאני בשורה 2 מחזיר True, כיוון שהאיבר הראשון ב־pupils הוא רשימה שמכילה את המחרוזת \"Moshe\".
\n", - "- הביטוי הבוליאני בשורה 3 מחזיר False, כיוון שאין בתוך pupils רשימה שאלו בדיוק הערכים שלה. יש אומנם רשימה שמכילה את האיברים האלו, אבל השאלה הייתה האם הרשימה הגדולה (pupils) מכילה איבר ששווה בדיוק ל־
\n", - "['Moshe', 'Splinter']
.- הביטוי הבוליאני בשורה 4 מחזיר False, כיוון שברשימה האחרונה בתוך pupils אין איבר שהוא הרשימה
\n", - "[\"Moshe\", \"Splinter\"]
.- הביטוי הבוליאני בשורה 5 מחזיר True, כיוון שיש רשימה ישירות בתוך pupils שאלו הם ערכיה.
\n", - "- הביטוי הבוליאני בשורה 6 מחזיר False, כיוון שברשימה הראשונה בתוך pupils אין איבר שהוא הרשימה הזו.
\n", + "\n", + "
" ] }, @@ -1027,8 +1023,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- הביטוי הבוליאני בשורה 1 מחזיר False, כיוון שכל אחד מהאיברים ברשימה pupils הוא רשימה, ואף אחד מהם אינו המחרוזת \"Moshe\".
\n", + "- הביטוי הבוליאני בשורה 2 מחזיר True, כיוון שהאיבר הראשון ב־pupils הוא רשימה שמכילה את המחרוזת \"Moshe\".
\n", + "- הביטוי הבוליאני בשורה 3 מחזיר False, כיוון שאין בתוך pupils רשימה שאלו בדיוק הערכים שלה. יש אומנם רשימה שמכילה את האיברים האלו, אבל השאלה הייתה האם הרשימה הגדולה (pupils) מכילה איבר ששווה בדיוק ל־
\n", + "['Moshe', 'Splinter']
.- הביטוי הבוליאני בשורה 4 מחזיר False, כיוון שברשימה האחרונה בתוך pupils אין איבר שהוא הרשימה
\n", + "[\"Moshe\", \"Splinter\"]
.- הביטוי הבוליאני בשורה 5 מחזיר True, כיוון שיש רשימה ישירות בתוך pupils שאלו הם ערכיה.
\n", + "- הביטוי הבוליאני בשורה 6 מחזיר False, כיוון שברשימה הראשונה בתוך pupils אין איבר שהוא הרשימה הזו.
\n", "\n", - "זכרו שעבור פייתון אין שום דבר מיוחד ברשימה של רשימות. היא בסך הכול רשימה רגילה, שכל אחד מאיבריה הוא רשימה.
\n", + "\n", + "זכרו שעבור פייתון אין שום דבר מיוחד ברשימה של רשימות. היא בסך הכול רשימה רגילה, שכל אחד מאיבריה הוא רשימה.
" ] @@ -1037,26 +1033,26 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", "מבחינתה אין הבדל בין רשימה כזו לכל רשימה אחרת.\n", "המונח Iterable
" + "##המונח Iterable
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "באתרי אינטרנט ובתיעוד של פייתון אנחנו נפגש פעמים רבות עם המילה Iterable.
\n", - "בקורס נשתמש במונח הזה פעמים רבות כדי להבין טוב יותר איך פייתון מתנהגת.
\n", - "נגדיר ערך כ־iterable אם ניתן לפרק אותו לכלל האיברים שלו.
\n", + "\n", + "באתרי אינטרנט ובתיעוד של פייתון אנחנו נפגש פעמים רבות עם המילה Iterable.
\n", - "
\n", + "בקורס נשתמש במונח הזה פעמים רבות כדי להבין טוב יותר איך פייתון מתנהגת.
\n", + "נגדיר ערך כ־iterable אם ניתן לפרק אותו לכלל האיברים שלו.
\n", "\n", - "עד כה אנחנו מכירים 2 סוגי משתנים שעונים להגדרה iterables: רשימות ומחרוזות.
\n", - "ניתן לפרק רשימה לכל האיברים שמרכיבים אותה, וניתן לפרק מחרוזת לכל התווים שמרכיבים אותה.
\n", + "\n", + "עד כה אנחנו מכירים 2 סוגי משתנים שעונים להגדרה iterables: רשימות ומחרוזות.
\n", - "
\n", + "ניתן לפרק רשימה לכל האיברים שמרכיבים אותה, וניתן לפרק מחרוזת לכל התווים שמרכיבים אותה.
\n", "\n", - "יש הרבה במשותף לכל הדברים שניתן להגיד עליהם שהם iterables:
\n", - "על חלק גדול מה־iterables אפשר להפעיל פעולות שמתייחסות לכלל האיברים שבהם, כמוlen
שמראה את מספר האיברים בערך.
\n", - "על חלק גדול מה־iterables יהיה אפשר גם להשתמש בסוגריים מרובעים כדי לגשת לאיבר מסוים שנמצא בהם.
\n", + "\n", + "יש הרבה במשותף לכל הדברים שניתן להגיד עליהם שהם iterables:
" ] @@ -1065,14 +1061,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "על חלק גדול מה־iterables אפשר להפעיל פעולות שמתייחסות לכלל האיברים שבהם, כמוlen
שמראה את מספר האיברים בערך.
\n", + "על חלק גדול מה־iterables יהיה אפשר גם להשתמש בסוגריים מרובעים כדי לגשת לאיבר מסוים שנמצא בהם.
\n", "בעתיד נלמד על עוד דברים שמשותפים לרוב (או לכל) ה־iterables.\n", "מונחים
" + "##מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "
- רשימה
- סוג משתנה שמטרתו לקבץ ערכים אחרים בסדר מסוים.
\n", "- תא
- מקום ברשימה שמכיל איבר כלשהו.
\n", "- מיקום
- מיקום של תא מסוים הוא המרחק שלו מהתא הראשון ברשימה, שמיקומו הוא 0. זהו מספר שמטרתו לאפשר גישה לתא מסוים ברשימה.
\n", @@ -1088,45 +1084,45 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##לסיכום
" + "##לסיכום
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- מספר האיברים ברשימה יכול להיות 0 (רשימה ריקה) או יותר.
\n", - "- לאיברים ברשימה יש סדר.
\n", - "- כל איבר ברשימה ממוספר החל מהאיבר הראשון שממוספר 0, ועד האיבר האחרון שמספרו הוא אורך הרשימה פחות אחד.
\n", - "- ניתן לגשת לאיבר גם לפי המיקום שלו וגם לפי המרחק שלו מסוף הרשימה, באמצעות התייחסות למיקום השלילי שלו.
\n", - "- איברים ברשימה יכולים לחזור על עצמם.
\n", - "- רשימה יכולה לכלול איברים מסוג אחד בלבד (רשימה הומוגנית) או מכמה סוגים שונים (רשימה הטרוגנית).
\n", - "- אורך הרשימה יכול להשתנות במהלך ריצת התוכנית.
\n", - "" + "
\n", + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##- מספר האיברים ברשימה יכול להיות 0 (רשימה ריקה) או יותר.
\n", + "- לאיברים ברשימה יש סדר.
\n", + "- כל איבר ברשימה ממוספר החל מהאיבר הראשון שממוספר 0, ועד האיבר האחרון שמספרו הוא אורך הרשימה פחות אחד.
\n", + "- ניתן לגשת לאיבר גם לפי המיקום שלו וגם לפי המרחק שלו מסוף הרשימה, באמצעות התייחסות למיקום השלילי שלו.
\n", + "- איברים ברשימה יכולים לחזור על עצמם.
\n", + "- רשימה יכולה לכלול איברים מסוג אחד בלבד (רשימה הומוגנית) או מכמה סוגים שונים (רשימה הטרוגנית).
\n", + "- אורך הרשימה יכול להשתנות במהלך ריצת התוכנית.
\n", + "תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###סדר בבית המשפט!
" + "###סדר בבית המשפט!
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כתבו קוד שיסדר את רשימת נשיאי בית המשפט לפי סדר אלפבתי.
\n", - "זה אכן אמור להיות מסורבל מאוד. בעתיד נלמד לכתוב קוד מוצלח יותר לבעיה הזו.
\n", + "\n", + "כתבו קוד שיסדר את רשימת נשיאי בית המשפט לפי סדר אלפבתי.
" ] @@ -1144,7 +1140,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "זה אכן אמור להיות מסורבל מאוד. בעתיד נלמד לכתוב קוד מוצלח יותר לבעיה הזו.
\n", "השתמשו באינדקסים, ושמרו ערכים בצד במשתנים.\n", "\n", + "
\n", "בונוס: כתבו קטע קוד שבודק שהרשימה (שמכילה 5 איברים) אכן מסודרת.\n", "
" ] @@ -1153,15 +1149,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###מה זה משובחה בכלל?
" + "###מה זה משובחה בכלל?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " לפניכם רשימה של שמות טעמי גלידה שנמצאים בדוכן הגלידה השכונתי.
\n", + "\n", + " לפניכם רשימה של שמות טעמי גלידה שנמצאים בדוכן הגלידה השכונתי.
\n" ] @@ -1179,15 +1175,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", " קבלו מהמשתמש קיפיק את הטעם האהוב עליו, והדפיסו למשתמש האם הטעם שלו נמכר בדוכן.\n", "מה רש\"י?
" + "###מה רש\"י?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " לפניכם כמה ביטויים.
\n", + "\n", + " לפניכם כמה ביטויים.
" ] diff --git a/week2/5_String_Methods.ipynb b/week2/5_String_Methods.ipynb index 3bfa6c8..7453616 100644 --- a/week2/5_String_Methods.ipynb +++ b/week2/5_String_Methods.ipynb @@ -4,30 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#
\n", " רשמו לעצמכם מה תהיה תוצאת כל ביטוי, ורק אז הריצו אותו.\n", "מחרוזות – חלק 2
" + "#מחרוזות – חלק 2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##הברחת מחרוזות
" + "##הברחת מחרוזות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפעמים נרצה שהמחרוזת שלנו תעשה \"דברים מיוחדים\" – כמו לרדת שורה באמצע המחרוזת או לעשות ריווח גדול באמצעות ↹ TAB (לצורך טבלאות, לדוגמה).
\n", - "המחשב מתייחס להזחה ולשורה חדשה כתווים של ממש, ועבור כל \"תו מיוחד\" שכזה יצרו רצף של תווים שמייצג אותו.
\n", + "\n", + "לפעמים נרצה שהמחרוזת שלנו תעשה \"דברים מיוחדים\" – כמו לרדת שורה באמצע המחרוזת או לעשות ריווח גדול באמצעות ↹ TAB (לצורך טבלאות, לדוגמה).
" ] @@ -36,8 +36,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "המחשב מתייחס להזחה ולשורה חדשה כתווים של ממש, ועבור כל \"תו מיוחד\" שכזה יצרו רצף של תווים שמייצג אותו.
\n", "לדוגמה, כשנדע מהו רצף התווים שמייצג שורה חדשה, נוכל לכתוב אותו כחלק מהמחרוזת, וכאשר נדפיס אותה נראה ירידת שורה במקום רצף התווים.\n", "\n", - "נלמד את שני התווים המיוחדים שדיברנו עליהם –
\\n
הוא תו שמסמן ירידת שורה, ו־\\t
מסמן ריווח גדול.
\n", + "\n", + "נלמד את שני התווים המיוחדים שדיברנו עליהם –
" ] @@ -55,7 +55,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\\n
הוא תו שמסמן ירידת שורה, ו־\\t
מסמן ריווח גדול.
\n", "איך נכניס אותם בקוד? פשוט נשלב אותם כחלק מהמחרוזת במקומות שבהם בא לנו שיופיעו:\n", "\n", + "
\n", "רצפי התווים האלו משתמשים בסימן \\ (\"Backslash\", לוכסן שמאלי) כדי לסמן תו מיוחד, והם נפוצים גם בשפות אחרות שאינן פייתון.
" ] }, @@ -63,8 +63,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "נשתמש ב־
\\'
במחרוזת שבה הסימן שמתחיל ומסיים את המחרוזת הוא'
. שימוש דומה נעשה עבור\\\"
:
\n", + "\n", + "נשתמש ב־
" ] }, @@ -90,8 +90,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\\'
במחרוזת שבה הסימן שמתחיל ומסיים את המחרוזת הוא'
. שימוש דומה נעשה עבור\\\"
:
\n", "\n", - "לפעמים גם נרצה פשוט לרשום את התו \\. לצורך כך, נשתמש פעמיים בתו הזה.
\n", + "\n", + "לפעמים גם נרצה פשוט לרשום את התו \\. לצורך כך, נשתמש פעמיים בתו הזה.
" ] @@ -118,7 +118,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "השוו את שתי המחרוזות הבאות, לדוגמה:\n", "\n", + "
\n", "נוכל גם להבריח את המחרוזת כולה באמצעות התו
" ] @@ -136,16 +136,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "r
לפני המחרוזת, במקרה שאנחנו לא רוצים להשתמש בתווים מיוחדים:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -153,16 +153,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " פייתון, בניגוד לבני אדם, מסתכלת על תווים מיוחדים כמו
\\n
ו־\\t
כתו אחד.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " פייתון, בניגוד לבני אדם, מסתכלת על תווים מיוחדים כמו
\n", - "\\n
ו־\\t
כתו אחד.
\n", " נסו לבדוק מה ה־len
שלהם כדי להיווכח בעצמכם.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -170,17 +170,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " פייתון לא מתמודדת טוב עם התו \\ בסוף המחרוזת.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " פייתון לא מתמודדת טוב עם התו \\ בסוף המחרוזת.
\n", - "
\n", " אם הגעתם למצב שבו זה קורה, פשוט הבריחו את ה־\\ עם \\ נוסף.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -199,17 +199,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", - " תרגול:\n", - " במשבצת שמתחתיי מצוטט חלק מהנאום המפורסם של מרטין לותר קינג, \"I Have A Dream\".
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " במשבצת שמתחתיי מצוטט חלק מהנאום המפורסם של מרטין לותר קינג, \"I Have A Dream\".
\n", - "
\n", " הדפיסו אותו בעזרת משפטמחרוזת קשוחה
" + "##מחרוזת קשוחה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפעמים אנחנו פשוט רוצים שפייתון תתמודד עם גוש מלל שהדבקנו.
\n", - "לפייתון יש פתרון נהדר: היא עובדת גם אם המלל מפוצל לכמה שורות (היא תכניס תווי\\n
ותפצל לשורות בעצמה), וגם במקרים בהם יש תווים כמו'
או\"
.
\n", - "פתרון זה נקרא \"מחרוזת קשוחה\" (אוקיי, למען האמת, אף אחד לא קורא לה ככה חוץ ממני), וכדי להשתמש בה יש להקליד 3 פעמים את התו\"
או את התו'
משני צידי המחרוזת.
\n", + "\n", + "לפעמים אנחנו פשוט רוצים שפייתון תתמודד עם גוש מלל שהדבקנו.
" ] }, @@ -217,7 +217,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "לפייתון יש פתרון נהדר: היא עובדת גם אם המלל מפוצל לכמה שורות (היא תכניס תווי\\n
ותפצל לשורות בעצמה), וגם במקרים בהם יש תווים כמו'
או\"
.
\n", + "פתרון זה נקרא \"מחרוזת קשוחה\" (אוקיי, למען האמת, אף אחד לא קורא לה ככה חוץ ממני), וכדי להשתמש בה יש להקליד 3 פעמים את התו\"
או את התו'
משני צידי המחרוזת.
\n", "\n", + "
\n", "נראה דוגמה:
" ] }, @@ -254,17 +254,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -272,16 +272,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", - " תרגול:\n", - " בשנת 1963 נשא ג'ון קנדי את נאומו \"אני ברלינאי\". הטקסט המלא שלו מופיע כאן.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " בשנת 1963 נשא ג'ון קנדי את נאומו \"אני ברלינאי\". הטקסט המלא שלו מופיע כאן.
\n", - "
\n", " השתמשו בפקודתמחרוזות מעוצבות
" + "##מחרוזות מעוצבות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "עד כה שרשרנו מחרוזות בזהירות בעזרת סימן השרשור
+
.
\n", - "דרך נוספת לעשות זאת היא בעזרת fstring, או בשמן המלא, formatted strings.
\n", + "\n", + "עד כה שרשרנו מחרוזות בזהירות בעזרת סימן השרשור
" ] @@ -300,7 +300,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "+
.
\n", + "דרך נוספת לעשות זאת היא בעזרת fstring, או בשמן המלא, formatted strings.
\n", "נראה דוגמה:\n", "\n", + "
\n", "שרשור כמו שאנחנו מכירים עד כה:\n", "
" ] @@ -318,7 +318,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "שימוש ב־fstrings:\n", "
" ] @@ -336,7 +336,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כדאי לשים לב לנקודות הבאות:\n", "
" ] @@ -345,11 +345,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
\n", + "\n", + "- כדי להשתמש ב־fstrings, הוספנו את התו f לפני המחרוזת.
\n", - "- כדי לציין שם של משתנה שאנחנו רוצים להדפיס, השתמשנו בסוגריים מסולסלים סביב שם המשתנה.
\n", - "- בשימוש ב־fstrings, לא היינו צריכים לבצע המרה לפני שהשתמשנו במשתנה מסוג שלם.
\n", - "- מן הסתם, ניתן להשתמש ב־fstrings גם למטרות נוספות מלבד הדפסה.
\n", + "\n", + "
" ] }, @@ -357,25 +357,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##- כדי להשתמש ב־fstrings, הוספנו את התו f לפני המחרוזת.
\n", + "- כדי לציין שם של משתנה שאנחנו רוצים להדפיס, השתמשנו בסוגריים מסולסלים סביב שם המשתנה.
\n", + "- בשימוש ב־fstrings, לא היינו צריכים לבצע המרה לפני שהשתמשנו במשתנה מסוג שלם.
\n", + "- מן הסתם, ניתן להשתמש ב־fstrings גם למטרות נוספות מלבד הדפסה.
\n", "פעולות על מחרוזות
" + "##פעולות על מחרוזות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###הגדרה
" + "###הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "עד כה למדנו פונקציות שעובדות על סוגים שונים של נתונים. אנחנו קוראים להן בשמן, ואז מעבירים להן את הנתון שעליו רוצים לפעול.
\n", - "type
, לדוגמה, יודעת לעבוד על כל נתון שנעביר לה ולהחזיר לנו את הסוג שלו.
\n", - "רעיון דומה בתכנות נקרא \"פעולה\", או method (מתודה).
\n", - "בניגוד לפונקציות, שם הפעולה משויך לסוג הנתון שעליו אנחנו הולכים להפעיל את הפעולה.
\n", + "\n", + "עד כה למדנו פונקציות שעובדות על סוגים שונים של נתונים. אנחנו קוראים להן בשמן, ואז מעבירים להן את הנתון שעליו רוצים לפעול.
" ] }, @@ -383,9 +383,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "type
, לדוגמה, יודעת לעבוד על כל נתון שנעביר לה ולהחזיר לנו את הסוג שלו.
\n", + "רעיון דומה בתכנות נקרא \"פעולה\", או method (מתודה).
\n", + "בניגוד לפונקציות, שם הפעולה משויך לסוג הנתון שעליו אנחנו הולכים להפעיל את הפעולה.
\n", "\n", - "בעתיד נלמד לעומק יותר על ההבדלים בין פונקציה לפעולה, והם יישמעו לנו מופשטים פחות. עד אז אתם פטורים מלדעת את הטריוויה הזו.
\n", - "דבר שכדאי לדעת הוא שהפעולות שנראה עכשיו עובדות רק על מחרוזות, ולא על טיפוסים אחרים.
\n", + "\n", + "בעתיד נלמד לעומק יותר על ההבדלים בין פונקציה לפעולה, והם יישמעו לנו מופשטים פחות. עד אז אתם פטורים מלדעת את הטריוויה הזו.
" ] }, @@ -393,8 +393,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "דבר שכדאי לדעת הוא שהפעולות שנראה עכשיו עובדות רק על מחרוזות, ולא על טיפוסים אחרים.
\n", "\n", - " בשורות הבאות, נשחק עם דוגמאות של פעולות ונראה מה הן עושות בתאים שיבואו לאחר מכן.
\n", + "\n", + " בשורות הבאות, נשחק עם דוגמאות של פעולות ונראה מה הן עושות בתאים שיבואו לאחר מכן.
" ] @@ -403,15 +403,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", " אם נבחין בתא שיש צורך להסביר מה קרה בו – יצורף הסבר מעל התא.\n", "לנקות רעשים מסביב
" + "###לנקות רעשים מסביב
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " פעמים רבות, בין אם בקבלת קלט מהמשתמש ובין אם במחרוזות שקיבלנו ממקור חיצוני כלשהו, נתקל בתווים מיותרים שמקיפים את המחרוזת שלנו.
\n", + "\n", + " פעמים רבות, בין אם בקבלת קלט מהמשתמש ובין אם במחרוזות שקיבלנו ממקור חיצוני כלשהו, נתקל בתווים מיותרים שמקיפים את המחרוזת שלנו.
" ] @@ -420,7 +420,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הפעולה strip עוזרת לנו להסיר אותם.\n", "\n", + "
\n", " בצורתה הפשוטה, כשלא מעבירים לה ארגומנטים, היא תסיר את כל הרווחים, האנטרים והטאבים שנמצאים סביב המחרוזת:\n", "
" ] @@ -441,7 +441,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " כאשר מעבירים לה מחרוזת כארגומנט, היא תבצע את האלגוריתם הבא:\n", "
" ] @@ -450,17 +450,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- עבור על כל תו מתחילת המחרוזת:\n", + "
\n", + "
- עבור על כל תו מתחילת המחרוזת:\n", "
\n", - "\n", - "
\n", - "- כל עוד התו נמצא בארגומנט – מחק אותו והמשך
\n", - "- עבור על כל תו מסוף המחרוזת:\n", + "
- כל עוד התו נמצא בארגומנט – מחק אותו והמשך
\n", + "- עבור על כל תו מסוף המחרוזת:\n", "
\n", + "\n", - "
\n", - "- כל עוד התו נמצא בארגומנט – מחק אותו והמשך
\n", - "- כל עוד התו נמצא בארגומנט – מחק אותו והמשך
\n", + "\n", + "\n", "" ] }, @@ -478,7 +478,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###מְצִיאוֹת וּמְצִיאוֹת
" + "###מְצִיאוֹת וּמְצִיאוֹת
" ] }, { @@ -494,8 +494,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " נמצא את המקומות שבהם נמצאות המילים המוזרות.
\n", + "\n", + " נמצא את המקומות שבהם נמצאות המילים המוזרות.
" ] @@ -531,8 +531,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הפעולות find ו־index יחזירו לנו את המיקום (האינדקס) של תת־מחרוזת בתוך מחרוזת אחרת:\n", "\n", - "אז רגע, למה צריך 2 מתודות אם הן עושות אותו דבר?
\n", + "\n", + "אז רגע, למה צריך 2 מתודות אם הן עושות אותו דבר?
" ] @@ -559,15 +559,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " אם המחרוזת לא נמצאה, find תחזיר לנו -1, בעוד ש־index תחזיר לנו שגיאה. \n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -575,16 +575,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " הפעולות הללו יחזירו רק את התוצאה הראשונה.\n", "
\n", - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -592,19 +592,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אינטואיטיבית, נראה שנכון תמיד להשתמש בפעולה find, אך אליה וקוץ בה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " אינטואיטיבית, נראה שנכון תמיד להשתמש בפעולה find, אך אליה וקוץ בה.
\n", - "
\n", " כשאנחנו בטוחים שאמורה לחזור תוצאה, עדיף להשתמש ב־index כדי לדעת מאיפה מגיעה השגיאה בתוכנית שלנו ולטפל בה במהירות.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -612,7 +612,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " תרגול:\n", - " קבלו מהמשתמש שתי מחרוזות.
\n", - " אם המחרוזת השנייה נמצאת לפני אמצע המחרוזת הראשונה, הדפיסו \"Yes!\"
\n", - " אם המחרוזת השנייה לא נמצאת לפני אמצע המחרוזת הראשונה, הדפיסו \"No!\"
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " קבלו מהמשתמש שתי מחרוזות.
\n", - "
\n", + " אם המחרוזת השנייה נמצאת לפני אמצע המחרוזת הראשונה, הדפיסו \"Yes!\"
\n", + " אם המחרוזת השנייה לא נמצאת לפני אמצע המחרוזת הראשונה, הדפיסו \"No!\"
\n", " בונוס לגיבורים ולגיבורות: נסו להשתמש בשתי הפעולות, index ו־find.\n", "משחקים עם גודלי אותיות
" + "###משחקים עם גודלי אותיות
" ] }, { @@ -673,8 +673,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "חשוב לזכור שהפעולות לא משנות את המשתנה.
\n", + "\n", + "חשוב לזכור שהפעולות לא משנות את המשתנה.
" ] @@ -692,15 +692,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "אם רוצים לשנות אותו, יש להשתמש בהשמה.\n", "סופרים סתם
" + "###סופרים סתם
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אם נרצה לבדוק כמה פעמים תת־מחרוזת נמצאת בתוך המחרוזת שלנו, נשתמש בפעולה count.
\n", + "\n", + "אם נרצה לבדוק כמה פעמים תת־מחרוזת נמצאת בתוך המחרוזת שלנו, נשתמש בפעולה count.
" ] @@ -722,8 +722,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "ננסה להבין כמה פעמים מילים מעניינות הופיעו בנאום גטיסברג המפורסם:\n", "\n", - "ראשית, נעשה טריק מוכר. נשתמש בפעולה lower כדי להעיף את האותיות הגדולות.
\n", + "\n", + "ראשית, נעשה טריק מוכר. נשתמש בפעולה lower כדי להעיף את האותיות הגדולות.
" ] @@ -741,7 +741,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "בצורה הזו, count תספור לנו גם את המילים שנכתבו באותיות רישיות:\n", "\n", + "
\n", "עכשיו נבדוק כמה פעמים השתמש לינקולן בכל אחת מהמילים: we, nation ו־dedicated.
" ] }, @@ -776,15 +776,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###החלפה
" + "###החלפה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פעולה מאוד נפוצה היא replace, שעוזרת לנו להחליף את כל המופעים של תת־מחרוזת אחת באחרת.
\n", + "\n", + "פעולה מאוד נפוצה היא replace, שעוזרת לנו להחליף את כל המופעים של תת־מחרוזת אחת באחרת.
" ] @@ -815,7 +815,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "לדוגמה, ניקח את הברידג' השני בשיר הנפלא של הביטלס, Hey Jude, ונחליף את כל המופעים של Jude ב־Dude: \n", "\n", + "
\n", "שימו לב לתווים המוזרים באמצע. אלו ירידות השורה שעליהן למדנו בשיעור. אל דאגה – הן לא יופיעו כשנדפיס את המחרוזת.\n", "
" ] @@ -833,7 +833,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "רק נזכיר שהפעולה לא משנה את המחרוזת עצמה, וכדי לשנות אותה נצטרך לבצע השמה.\n", "
" ] @@ -866,15 +866,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###הפרד ומשול
" + "###הפרד ומשול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לעיתים קרובות נרצה להפריד את הטקסט שלנו לחלקים.
\n", + "\n", + "לעיתים קרובות נרצה להפריד את הטקסט שלנו לחלקים.
" ] @@ -901,8 +901,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "הפעולה split מאפשרת לנו לעשות את זה, ולקבל רשימה של האיברים המופרדים:\n", "\n", - "בסוגריים כתבנו מה אנחנו רוצים שיהיה התו, או סדרת התווים, שתהיה אחראית להפרדה בין האיברים.
\n", + "\n", + "בסוגריים כתבנו מה אנחנו רוצים שיהיה התו, או סדרת התווים, שתהיה אחראית להפרדה בין האיברים.
" ] @@ -929,8 +929,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "שימו לב שקיבלנו רשימה לכל דבר:\n", "\n", - "דרך נוספת להשתמש ב־split היא לא להעביר לה כלום ברשימת הארגומנטים.
\n", + "\n", + "דרך נוספת להשתמש ב־split היא לא להעביר לה כלום ברשימת הארגומנטים.
" ] @@ -961,8 +961,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "במקרה כזה, split תפצל לנו את המחרוזת לפי רווחים, שורות חדשות וטאבים.\n", "\n", - "הפעולה הזו שימושית בטירוף ונראה אותה עוד הרבה.
\n", + "\n", + "הפעולה הזו שימושית בטירוף ונראה אותה עוד הרבה.
" ] @@ -971,16 +971,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "היא מאפשרת לנו לקבל מידע רב על כמות גדולה של מלל.\n", "חבר ומשול
" + "###חבר ומשול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפעמים אנחנו רוצים לעשות את הפעולה ההפוכה מפיצול – איחוד!
\n", - "הפעולה join מקבלת כארגומנט רשימה, ופועלת על המחרוזת שתחבר בין איבר לאיבר.
\n", + "\n", + "לפעמים אנחנו רוצים לעשות את הפעולה ההפוכה מפיצול – איחוד!
" ] @@ -1000,7 +1000,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "הפעולה join מקבלת כארגומנט רשימה, ופועלת על המחרוזת שתחבר בין איבר לאיבר.
\n", "נראה דוגמה: \n", "\n", + "
\n", "ואם אנחנו כבר שם, קצת כבוד לספר הישראלי, הכבש השישה־עשר:\n", "
" ] @@ -1021,14 +1021,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###אני, בוליאני
" + "###אני, בוליאני
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אחד הטריקים השימושיים הוא לבדוק אם המחרוזת שלנו מתחילה או מסתיימת בתת־מחרוזת אחרת.\n", "
" ] @@ -1087,18 +1087,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1106,15 +1106,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תרגול:\n", - " קבלו מהמשתמש נתיב לקובץ מסוים שנמצא על המחשב שלו, ובדקו האם הסיומת שלו היא .docx
\n", - " הדפיסו לו הודעה מתאימה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " קבלו מהמשתמש נתיב לקובץ מסוים שנמצא על המחשב שלו, ובדקו האם הסיומת שלו היא .docx
\n", - "
\n", + " הדפיסו לו הודעה מתאימה.
\n", " דוגמה לנתיב תקין: C:\\My Documents\\Resume.docx.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1122,7 +1122,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " יש נטייה לשכוח את ה־s אחרי ה־end או את ה־start ב־endswith וב־startswith.\n", "
\n", - "\n", + "
\n", "נוכל גם לבדוק אם המחרוזת שלנו היא מסוג מסוים:\n", "
" ] @@ -1179,22 +1179,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###נאום גטיסברג
" + "###נאום גטיסברג
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "השתמשו בטקסט של נאום גטיסברג ובדקו כמה מילים יש בו.
\n", + "\n", + "השתמשו בטקסט של נאום גטיסברג ובדקו כמה מילים יש בו.
" ] @@ -1216,7 +1216,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "בדקו כמה פעמים הופיעו המילים we, here, great, nation ו־dedicated, וחשבו מה שיעורן באחוזים בטקסט כולו. \n", "\n", + "
\n", "כדי לחשב את שיעורן באחוזים: סִכְמוּ את מספר הפעמים שכל מילה מופיעה בטקסט. הכפילו מספר זה במאה וחלקו בסך המילים בטקסט.\n", "
" ] @@ -1225,16 +1225,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###חצי חיים
" + "###חצי חיים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "קבלו מהמשתמש מילה מסוימת ומשפט.
\n", - "בדקו שתחילת המילה מופיעה לפני החצי של המשפט.
\n", + "\n", + "קבלו מהמשתמש מילה מסוימת ומשפט.
" ] @@ -1243,10 +1243,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "בדקו שתחילת המילה מופיעה לפני החצי של המשפט.
\n", "היעזרו בדוגמאות כדי לבדוק את עצמכם.\n", "\n", - "
- המילה Love במשפט I Love Chocolate תחזיר True, כיוון שהמילה Love מתחילה במקום 2, ואורך חצי המשפט הוא 8.
\n", - "- המילה salad במשפט This is the best salad in town תחזיר False, כיוון שהמילה salad מתחילה במקום 17, ואורך חצי המשפט הוא 15.
\n", - "- המילה Meow במשפט \"All you need is Love\" תחזיר False, כיוון שהמילה Meow לא נמצאת בשירים של הביטלס (וחבל שכך).
\n", + "\n", + "
" ] }, @@ -1254,15 +1254,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- המילה Love במשפט I Love Chocolate תחזיר True, כיוון שהמילה Love מתחילה במקום 2, ואורך חצי המשפט הוא 8.
\n", + "- המילה salad במשפט This is the best salad in town תחזיר False, כיוון שהמילה salad מתחילה במקום 17, ואורך חצי המשפט הוא 15.
\n", + "- המילה Meow במשפט \"All you need is Love\" תחזיר False, כיוון שהמילה Meow לא נמצאת בשירים של הביטלס (וחבל שכך).
\n", "שיחדש
" + "###שיחדש
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בספר המרתק של ג'ורג' אורוול, 1984, הסלוגן של מפלגת השלטון הוא
מלחמה היא שלום, חירות היא עבדות, בורות היא כוח.
\n", + "\n", + "בספר המרתק של ג'ורג' אורוול, 1984, הסלוגן של מפלגת השלטון הוא
" ] @@ -1271,10 +1271,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "מלחמה היא שלום, חירות היא עבדות, בורות היא כוח.
\n", "קבלו טקסט מהמשתמש, והחליפו את המילים לפי המילון הבא:\n", "\n", - "
- war תוחלף ל־peace
\n", - "- freedom תוחלף ל־slavery
\n", - "- ignorance תוחלף ל־strength
\n", + "\n", + "
" ] }, @@ -1282,7 +1282,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- war תוחלף ל־peace
\n", + "- freedom תוחלף ל־slavery
\n", + "- ignorance תוחלף ל־strength
\n", "\n", + "
\n", "לצורך התרגיל, הניחו שהקלט שהזין המשתמש הוא באותיות קטנות בלבד.\n", "
" ] diff --git a/week2/6_Documentation.ipynb b/week2/6_Documentation.ipynb index b1c1cfb..7b9c629 100644 --- a/week2/6_Documentation.ipynb +++ b/week2/6_Documentation.ipynb @@ -4,29 +4,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#תיעוד
" + "#תיעוד
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בעולם התכנות, בניגוד לשיעורי היסטוריה בתיכון, אנחנו שמים דגש על היכולות השונות של המתכנת ופחות על הזיכרון שלו בנוגע לפרטים קטנים.
\n", + "\n", + "בעולם התכנות, בניגוד לשיעורי היסטוריה בתיכון, אנחנו שמים דגש על היכולות השונות של המתכנת ופחות על הזיכרון שלו בנוגע לפרטים קטנים.
" ] @@ -35,10 +35,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אומנם מרשים לראות מתכנת ששולט היטב בכל רזי שפת תכנות מסוימת, אבל בעולם האמיתי כולנו משתמשים באתרים שמטרתם לסייע לנו, בין אם להבין איך לכתוב את הקוד בצורה יעילה ובין אם כדי להיזכר בפונקציה או בפעולה ששכחנו.\n", "\n", - "לרוב שפות התכנות או המערכות המוכרות שבהן תתעסקו, יש מעין \"מדריך למשתמש\" שנקרא תיעוד, או דוקומנטציה.
\n", - "ככל שהמוצר שאתם משתמשים בו בשל יותר ויש לו משתמשים רבים, כך תוכלו למצוא עבורו תיעוד מפורט וברור יותר.
\n", - "תיעוד טוב הוא לעיתים רבות שיקול מכריע בהחלטה אם להשתמש בטכנולוגיה מסוימת או לא.
\n", + "\n", + "לרוב שפות התכנות או המערכות המוכרות שבהן תתעסקו, יש מעין \"מדריך למשתמש\" שנקרא תיעוד, או דוקומנטציה.
" ] @@ -47,16 +47,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "ככל שהמוצר שאתם משתמשים בו בשל יותר ויש לו משתמשים רבים, כך תוכלו למצוא עבורו תיעוד מפורט וברור יותר.
\n", + "תיעוד טוב הוא לעיתים רבות שיקול מכריע בהחלטה אם להשתמש בטכנולוגיה מסוימת או לא.
\n", "לא אחת אפילו מתכנתים מעולים ומנוסים נעזרים בתיעוד ובאמצעים מקבילים במשך עבודתם.\n", "תיעוד בפייתון
" + "##תיעוד בפייתון
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפייתון יש אתר תיעוד מרשים ומלא במידע. רוב המידע המתועד באתר כתוב בצורה טובה ונהירה.
\n", - "באתר ישנה תיבת חיפוש, ואפילו מדריך כניסה עבור מתחילים, שמתבסס על ידע מסוים בתכנות.
\n", + "\n", + "לפייתון יש אתר תיעוד מרשים ומלא במידע. רוב המידע המתועד באתר כתוב בצורה טובה ונהירה.
" ] @@ -65,16 +65,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "באתר ישנה תיבת חיפוש, ואפילו מדריך כניסה עבור מתחילים, שמתבסס על ידע מסוים בתכנות.
\n", "רוב מתכנתי הפייתון משתמשים באתר התיעוד הזה כמדריך עזר, ופונים אליו כשהם צריכים פרטים נוספים בקשר לרעיון שכבר קיים אצלם בראש.\n", "רשימת פעולות
" + "###רשימת פעולות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בשיעור הקודם למדנו שלכל סוג נתונים (כמו str או int) יש פעולות ששייכות לו.
\n", - "עבור מחרוזות, לדוגמה, אנחנו מכירים פעולות כמוstr.count
ו־str.replace
.
\n", + "\n", + "בשיעור הקודם למדנו שלכל סוג נתונים (כמו str או int) יש פעולות ששייכות לו.
" ] @@ -92,8 +92,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "עבור מחרוזות, לדוגמה, אנחנו מכירים פעולות כמוstr.count
ו־str.replace
.
\n", "כדי לקבל את רשימת הפעולות עבור סוג נתונים מסוים נשתמש בפונקציהdir()
:\n", "\n", - "התוצאה היא רשימה של כל הפעולות שאפשר להפעיל על str.
\n", + "\n", + "התוצאה היא רשימה של כל הפעולות שאפשר להפעיל על str.
" ] @@ -102,8 +102,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "בשלב הזה, אמליץ לכם להתעלם מפעולות ברשימה ששמן מתחיל בקו תחתון.\n", "\n", - "טריק נוסף שכנראה נוח יותר, זמין בסביבות פיתוח רבות שיצא לכם לעבוד בהן.
\n", + "\n", + "טריק נוסף שכנראה נוח יותר, זמין בסביבות פיתוח רבות שיצא לכם לעבוד בהן.
" ] @@ -127,15 +127,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### תיעוד על פעולה או על פונקציה" + "### תיעוד על פעולה או על פונקציה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "הטריק הוא ציון סוג הנתון או המשתנה שאתם עובדים עליו, הסימן \"נקודה\" ואז לחיצה על ↹ TAB.\n", "\n", - "במקרה שנרצה לחפש פרטים נוספים על אחת הפונקציות או הפעולות (נניח
len
, אוstr.upper()
), התיעוד של פייתון הוא מקור מידע נהדר לכך.
\n", + "\n", + "במקרה שנרצה לחפש פרטים נוספים על אחת הפונקציות או הפעולות (נניח
" ] @@ -153,8 +153,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "len
, אוstr.upper()
), התיעוד של פייתון הוא מקור מידע נהדר לכך.
\n", "אם אנחנו נמצאים בתוך המחברת, יש טריק נחמד לקבל חלק מהתיעוד הזה בצורה מהירה – פשוט נרשום בתא קוד את שם הפונקציה, ואחריו סימן שאלה:\n", "\n", - "ברגע שנריץ את התא, תקפוץ לנו חלונית עם מידע נוסף על הפונקציה.
\n", + "\n", + "ברגע שנריץ את התא, תקפוץ לנו חלונית עם מידע נוסף על הפונקציה.
" ] @@ -176,15 +176,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אם אנחנו רוצים לקבל מידע על פעולה, נכתוב את סוג הערך שעליו אנחנו רוצים לבצע אותה (נניח, str):\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -192,14 +192,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " קריאה לפונקציה, קרי הוספת התווים
\n", - "()
לפני סימן השאלה, תפעיל את הפונקציה או הפעולה במקום לתת לכם עזרה.\n", "\n", + "
\n", "בתוך חלונית העזרה שתיפתח במחברת נראה שורות המכילות פרטים מעניינים:\n", "
\n", - "\n", - "
- Signature – חתימת הפעולה או הפונקציה, הכוללת את השם שלה ואת הפרמטרים שלה.
\n", - "- Docstring – כמה מילים שמתארות היטב מה הפונקציה עושה, ולעיתים נותנות מידע נוסף על הפרמטרים.
\n", + "\n", + "
\n", - "- Signature – חתימת הפעולה או הפונקציה, הכוללת את השם שלה ואת הפרמטרים שלה.
\n", + "- Docstring – כמה מילים שמתארות היטב מה הפונקציה עושה, ולעיתים נותנות מידע נוסף על הפרמטרים.
\n", "\n", + "
\n", "לעת עתה, נתעלם מהרכיבים self, * או / שיופיעו מדי פעם בשדה Signature.\n", "
" ] @@ -208,22 +208,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##משאבי עזרה נוספים
" + "##משאבי עזרה נוספים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "עולם התכנות הוא אדיר בממדיו, וקיימים משאבים נהדרים שמטרתם לעזור למתכנת.
\n", + "\n", + "עולם התכנות הוא אדיר בממדיו, וקיימים משאבים נהדרים שמטרתם לעזור למתכנת.
\n", - "
\n", "לפניכם כמה מהפופולריים שבהם:\n", "\n", - "
- Google – חפשו היטב את השאלה שלכם ב־Google. מתכנת טוב עושה את זה פעמים רבות ביום. קרוב לוודאי שמישהו בעולם כבר נתקל בעבר בבעיה שלכם.
\n", - "- התיעוד של פייתון – כולל הרבה מידע, ולעיתים דוגמאות מועילות.
\n", - "- Stack Overflow – אחד האתרים הכי מוכרים בעולם הפיתוח, המכיל מערכת שאלות ותשובות עם דירוג בנוגע לכל מה שקשור בתכנות.
\n", - "- GitHub – אתר שבו אנשים מנהלים את הקוד שלהם ומשתפים אותו עם אחרים. יש בו שורת חיפוש, והוא מעולה לצורך מציאת דוגמאות לשימוש בקוד.
\n", + "\n", + "
" ] }, @@ -231,14 +231,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##- Google – חפשו היטב את השאלה שלכם ב־Google. מתכנת טוב עושה את זה פעמים רבות ביום. קרוב לוודאי שמישהו בעולם כבר נתקל בעבר בבעיה שלכם.
\n", + "- התיעוד של פייתון – כולל הרבה מידע, ולעיתים דוגמאות מועילות.
\n", + "- Stack Overflow – אחד האתרים הכי מוכרים בעולם הפיתוח, המכיל מערכת שאלות ותשובות עם דירוג בנוגע לכל מה שקשור בתכנות.
\n", + "- GitHub – אתר שבו אנשים מנהלים את הקוד שלהם ומשתפים אותו עם אחרים. יש בו שורת חיפוש, והוא מעולה לצורך מציאת דוגמאות לשימוש בקוד.
\n", "תרגול
" + "##תרגול
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "בתרגול זה השתמשו במידת הצורך בתיעוד של פייתון כדי לגלות פעולות שלא למדנו עליהן.\n", "
" ] @@ -247,16 +247,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###סידור רשימה
" + "###סידור רשימה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפניכם רשימת המספרים הטבעיים מ־1 עד 10 בסדר מבולבל.
\n", - "האם תוכלו לסדר אותה בשורה אחת של קוד, ולהדפיס אותה בשורה אחת נוספת?
\n", + "\n", + "לפניכם רשימת המספרים הטבעיים מ־1 עד 10 בסדר מבולבל.
" ] @@ -274,31 +274,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "האם תוכלו לסדר אותה בשורה אחת של קוד, ולהדפיס אותה בשורה אחת נוספת?
\n", "הפלט שיודפס על המסך צריך להיות: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].\n", "הספרייה של דיואי
" + "###הספרייה של דיואי
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " שיטת דיואי משמשת לחלוקת ספרים לתחומי תוכן.
\n", - " כך, קטגוריה 000 המכילה ספרות כללית הנוגעת למדעי המחשב, מידע ועבודות כלליות, 500 היא ספרות הנוגעת למדע טהור ו־700 היא ספרות הנוגעת לאומנות.
\n", - " בתוך כל קטגוריה יש תתי־קטגוריות נוספות, כמו 004 שמתעסקת בעיבוד מידע, 005 שמתעסקת בתכנות, או 755 שמתעסקת באומנות בדת.
\n", - " קבלו מהמשתמש שם ספר, ואת הקטגוריה שאליה הוא משתייך.
\n", - " אם משתמש הקליד מספר שאינו בעל 3 ספרות, כמו \"4\", הניחו שהמשתמש התכוון להקליד 004 והשלימו עבורו את המלאכה.
\n", + "\n", + "שיטת דיואי משמשת לחלוקת ספרים לתחומי תוכן.
\n", - "
\n", + " כך, קטגוריה 000 המכילה ספרות כללית הנוגעת למדעי המחשב, מידע ועבודות כלליות, 500 היא ספרות הנוגעת למדע טהור ו־700 היא ספרות הנוגעת לאומנות.
\n", + " בתוך כל קטגוריה יש תתי־קטגוריות נוספות, כמו 004 שמתעסקת בעיבוד מידע, 005 שמתעסקת בתכנות, או 755 שמתעסקת באומנות בדת.
\n", + " קבלו מהמשתמש שם ספר, ואת הקטגוריה שאליה הוא משתייך.
\n", + " אם משתמש הקליד מספר שאינו בעל 3 ספרות, כמו \"4\", הניחו שהמשתמש התכוון להקליד 004 והשלימו עבורו את המלאכה.
\n", " הדפיסו למשתמש את מספר הקטגוריה אחרי התיקון, או \"קטגוריה שגויה\" אם הקלט שהוזן לא היה מספרי.\n", "\n", + "
\n", "לדוגמה:\n", "
\n", - "\n", - "
- אם משתמש הקליד 5, הדפיסו לו 005.
\n", - "- אם משתמש הקליד 007, הדפיסו לו 007.
\n", - "- אם משתמש הקליד 70, הדפיסו לו 070.
\n", - "- אם משתמש הקליד 700, הדפיסו לו 700.
\n", - "- אם משתמש הקליד -1, הדפיסו לו \"Wrong Category\".
\n", - "- אם משתמש הקליד Art, הדפיסו לו \"Wrong Category\".
\n", + "\n", + "
\n" ] }, diff --git a/week2/7_Summary.ipynb b/week2/7_Summary.ipynb index 49e393c..39650f2 100644 --- a/week2/7_Summary.ipynb +++ b/week2/7_Summary.ipynb @@ -4,39 +4,38 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#- אם משתמש הקליד 5, הדפיסו לו 005.
\n", + "- אם משתמש הקליד 007, הדפיסו לו 007.
\n", + "- אם משתמש הקליד 70, הדפיסו לו 070.
\n", + "- אם משתמש הקליד 700, הדפיסו לו 700.
\n", + "- אם משתמש הקליד -1, הדפיסו לו \"Wrong Category\".
\n", + "- אם משתמש הקליד Art, הדפיסו לו \"Wrong Category\".
\n", "תרגילים
" + "#תרגילים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##מערכת בנק
" + "##מערכת בנק
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בתרגיל הזה נכתוב מערכת מעט חכמה יותר לבנק.
\n", - " נבנה אותה בשלבים באמצעות חלוקה לפונקציות.
\n", - "בשלב הראשון נבנה פונקציה למחולל סיסמאות, שמקבלת שם משתמש ומחזירה סיסמה.
\n", - "הסיסמה תורכב כך עבור שם משתמש נתון:
\n", - "\n", - "
- שם המשתמש באותיות קטנות ומייד אחריו שם המשתמש באותיות גדולות.\n", + "
\n", + "בתרגיל הזה נכתוב מערכת מעט חכמה יותר לבנק.
\n", + " נבנה אותה בשלבים באמצעות חלוקה לפונקציות.
\n", + "בשלב הראשון נבנה פונקציה למחולל סיסמאות, שמקבלת שם משתמש ומחזירה סיסמה.
\n", + "הסיסמה תורכב כך עבור שם משתמש נתון:
\n", + "\n", "\n", - "
- שם המשתמש באותיות קטנות ומייד אחריו שם המשתמש באותיות גדולות.\n", "
- הוספת האות \"X\" מימין לשם המשתמש, כמספר התווים בשם המשתמש.
שימו לב כי שם המשתמש יכול לכלול ספרות וסימנים, נוסף על אותיות.
" + "
\n", - " כמו כן, לא נאפשר שם משתמש שהוא מחרוזת ריקה. במקרה זה החזירו מחרוזת ריקה.
\n", - "
לדוגמה, עבור שם המשתמש 'stam' המחולל יחזיר את הסיסמה: 'stamSTAMXXXX'
הריצו את הפונקציה על 4 דוגמאות נוספות לפחות, באורכים שונים, ובדקו שקיבלתם פלט כמצופה.שימו לב כי שם המשתמש יכול לכלול ספרות וסימנים, נוסף על אותיות.
" ] }, { @@ -52,15 +51,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כמו כן, לא נאפשר שם משתמש שהוא מחרוזת ריקה. במקרה זה החזירו מחרוזת ריקה.
\n", + "
לדוגמה, עבור שם המשתמש 'stam' המחולל יחזיר את הסיסמה: 'stamSTAMXXXX'
הריצו את הפונקציה על 4 דוגמאות נוספות לפחות, באורכים שונים, ובדקו שקיבלתם פלט כמצופה.הריצו את הפונקציה כך:
password_generator('stam')
" + "הריצו את הפונקציה כך:
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "password_generator('stam')
כעת נקבל שם משתמש וסיסמה, ונבדוק אם השילוב הוא נכון. בדקו באמצעות מחולל הסיסמאות מהסעיף הקודם אם הסיסמה של המשתמש תואמת את הסיסמה שיוצר המחולל. הדפיסו \"ברוך הבא\" אם הסיסמה נכונה, אחרת הדפיסו \"סיסמה שגויה\".
\n", - "login('stam', 'stamSTAMXXXX')
Welcome stam!login('stam', 'mats')
Wrong Password!" + "כעת נקבל שם משתמש וסיסמה, ונבדוק אם השילוב הוא נכון. בדקו באמצעות מחולל הסיסמאות מהסעיף הקודם אם הסיסמה של המשתמש תואמת את הסיסמה שיוצר המחולל. הדפיסו \"ברוך הבא\" אם הסיסמה נכונה, אחרת הדפיסו \"סיסמה שגויה\".
\n", + "login('stam', 'stamSTAMXXXX')
Welcome stam!login('stam', 'mats')
Wrong Password!" ] }, { @@ -76,9 +75,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "כתבו פונקציה שמחזירה
True
\n", - " אם בוצע חיבור מוצלח, אחרת החזירוFalse
.
\n", - "פונקציה זו דומה מאוד לפונקציה הקודמת שכתבתם, רק שהיא אינה מדפיסה דבר.
במקום ההדפסה יוחזר ערך בוליאני מתאים.
לדוגמה:login('stam', 'stamSTAMXXXX')
Truelogin('stam', 'mats')
False
" + "כתבו פונקציה שמחזירה
True
\n", + " אם בוצע חיבור מוצלח, אחרת החזירוFalse
.
\n", + "פונקציה זו דומה מאוד לפונקציה הקודמת שכתבתם, רק שהיא אינה מדפיסה דבר.
במקום ההדפסה יוחזר ערך בוליאני מתאים.
לדוגמה:login('stam', 'stamSTAMXXXX')
Truelogin('stam', 'mats')
False
" ] }, { @@ -94,8 +93,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כעת ענו על השאלה הקודמת באמצעות הפונקציה שכתבתם בסעיף זה, כלומר כתבו פונקציה שמשתמשת בפונקציה המחזירה ערך בוליאני ומדפיסה בהתאם להוראת מהסעיף הקודם.
\n" + "
רמז: השתמשו בערך ההחזרה של הפונקציה מהסעיף הקודם, בתוך if.\n", + " כעת ענו על השאלה הקודמת באמצעות הפונקציה שכתבתם בסעיף זה, כלומר כתבו פונקציה שמשתמשת בפונקציה המחזירה ערך בוליאני ומדפיסה בהתאם להוראת מהסעיף הקודם.
\n" ] }, { @@ -111,19 +110,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
רמז: השתמשו בערך ההחזרה של הפונקציה מהסעיף הקודם, בתוך if.כעת נרחיב את מערכת הבנק שלנו.
\n", - " נניח כי לכל לקוח יש בחשבון הבנק 500 ש\"ח.
\n", - " באמצעות הפוקנציות הקודמות שכתבנו נממש את התוכנית הבאה:
\n", - "\n", - "
- נבקש מהמשתמש שם משתמש וסיסמה.
\n", - "- נאמת את שם המשתמש והסיסמה בעזרת מחולל הסיסמאות. אם האימות הצליח נדפיס: \n", - " ?Login succeeded. How much you'd like to withdraw
\n", + "כעת נרחיב את מערכת הבנק שלנו.
\n", + " נניח כי לכל לקוח יש בחשבון הבנק 500 ש\"ח.
\n", + " באמצעות הפוקנציות הקודמות שכתבנו נממש את התוכנית הבאה:
\n", + "\n", + "
\n", "" @@ -133,25 +132,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- נבקש מהמשתמש שם משתמש וסיסמה.
\n", + "- נאמת את שם המשתמש והסיסמה בעזרת מחולל הסיסמאות. אם האימות הצליח נדפיס: \n", + " ?Login succeeded. How much you'd like to withdraw
\n", - "
\n", " אחרת נדפיס: .Login failed- כיון שלמשתמש יש 500 ש\"ח בחשבון, עלינו לוודא שסכום המשיכה אינו גבוה מ־500 ש\"ח. אם הסכום אכן גבוה מ־500 ש\"ח נדפיס: \n", + "
- כיון שלמשתמש יש 500 ש\"ח בחשבון, עלינו לוודא שסכום המשיכה אינו גבוה מ־500 ש\"ח. אם הסכום אכן גבוה מ־500 ש\"ח נדפיס: \n", " .Withdrawal denied
\n", - "- כמו כן, עלינו לוודא כי הסכום אינו שלילי או 0. במקרה זה נדפיס: \n", + "
- כמו כן, עלינו לוודא כי הסכום אינו שלילי או 0. במקרה זה נדפיס: \n", " .Invalid amount
\n", - "- אם הסכום חוקי, נדפיס: \n", + "
- אם הסכום חוקי, נדפיס: \n", " .(Please take your money (amount asked). Your balance is: (amount left in balance
\n", "ציירו תחילה על דף תרשים זרימה של הקוד – תרשים מעויינים ללא קוד.\n", - "זה יעזור לכם במימוש.
ציירו תחילה על דף תרשים זרימה של הקוד – תרשים מעויינים ללא קוד.\n", + "זה יעזור לכם במימוש.</p" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###דוגמאות:
" + "###דוגמאות:
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " Insert username: stam
\n", - " Insert password: stamSTAMXXXX
\n", - " Login succeeded. How much you'd like to withdraw? 200
\n", + "\n", + " Insert username: stam
" ] @@ -160,12 +159,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " Insert password: stamSTAMXXXX
\n", + " Login succeeded. How much you'd like to withdraw? 200
\n", " Please take your money (200NIS). Your balance is: 300NIS.\n", "\n", + "
\n", " דוגמה לסיסמה שגויה:\n", "
\n", - "\n", - " Insert username: stam
\n", - " Insert password: mats
\n", + "\n", + " Insert username: stam
" ] @@ -174,14 +173,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " Insert password: mats
\n", " Login failed.\n", "\n", + "
\n", " דוגמה למשיכה לא חוקית:\n", "
\n", - "\n", - "\n", - " Insert username: stam
\n", - " Insert password: stamSTAMXXXX
\n", - " Login succeeded. How much you'd like to withdraw? 600
\n", + "\n", + " Insert username: stam
" ] @@ -190,12 +188,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " Insert password: stamSTAMXXXX
\n", + " Login succeeded. How much you'd like to withdraw? 600
\n", " Withdrawal denied.\n", "דוגמה למשיכה של 0 ש\"ח:
\n", - "\n", - "\n", - " Insert username: stam
\n", - " Insert password: stamSTAMXXXX
\n", - " Login succeeded. How much you'd like to withdraw? 0
\n", + "דוגמה למשיכה של 0 ש\"ח:
\n", + "\n", + " Insert username: stam
" ] @@ -213,9 +210,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " Insert password: stamSTAMXXXX
\n", + " Login succeeded. How much you'd like to withdraw? 0
\n", " Invalid amount.\n", "\n", - " לאחרונה עלתה דרישה לשכלל את הבנק שלנו, כך שרק מספר מצומצם של לקוחות יוכלו לגשת לבנק.
\n", - " הגדירו רשימה של שמות של לקוחות שעבורם יתאפשר החיבור.
\n", + "\n", + " לאחרונה עלתה דרישה לשכלל את הבנק שלנו, כך שרק מספר מצומצם של לקוחות יוכלו לגשת לבנק.
" ] @@ -233,19 +230,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + " הגדירו רשימה של שמות של לקוחות שעבורם יתאפשר החיבור.
\n", " עבור לקוחות שאינם ברשימה יכתוב הבנק You are not a customer of the bank.\n", "מתודות של מחרוזות
" + "##מתודות של מחרוזות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "ניזכר בכמה פעולות של מחרוזות:
\n", + "
לכל אחד מהתרגילים הבאים הריצו את הדוגמה וכתבו בעצמכם 3 דוגמאות נוספות. הסבירו לעצמכם מה עושה כל מתודה למחרוזת שהיא מקבלת.
\n", - "אם תרצו להיזכר מה עושה מתודה מסוימת תוכלו להריץ אותה כך:ניזכר בכמה פעולות של מחרוזות:
\n", "
לכל אחד מהתרגילים הבאים הריצו את הדוגמה וכתבו בעצמכם 3 דוגמאות נוספות. הסבירו לעצמכם מה עושה כל מתודה למחרוזת שהיא מקבלת.
\n", + "אם תרצו להיזכר מה עושה מתודה מסוימת תוכלו להריץ אותה כך:str.method-name?
\n", - "לדוגמה:
\n", - "str.split?
\n", - "הריצו את התא הבא לקבלת מידע על המתודה split:
\n" + "לדוגמה:
\n", + "str.split?
\n", + "הריצו את התא הבא לקבלת מידע על המתודה split:
\n" ] }, { @@ -594,47 +591,46 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##שעון עולמי
" + "##שעון עולמי
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "בשאלה זו נכתוב גרסה של שעון עולמי התומך ב־4 אזורי זמן:
\n", - "\n", - "\n", - "
- תל אביב – TLV
\n", - "- לונדון – LDN
\n", - "- ניו יורק – NYC
\n", - "- טוקיו – TYO
\n", + "בשאלה זו נכתוב גרסה של שעון עולמי התומך ב־4 אזורי זמן:
\n", + "\n", + "
\n", - "\n", - "- תל אביב – TLV
\n", + "- לונדון – LDN
\n", + "- ניו יורק – NYC
\n", + "- טוקיו – TYO
\n", "\n", - "אם נקבל תל אביב, נחזיר את השעה בתוספת 3 שעות.
\n", - "אם נקבל ניו יורק נחזיר את השעה פחות 4.
\n", - "אם נקבל טוקיו נחזיר את השעה ועוד 9.
\n", + "\n", + "אם נקבל תל אביב, נחזיר את השעה בתוספת 3 שעות.
\n" + "\n", + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אם נקבל ניו יורק נחזיר את השעה פחות 4.
\n", + "אם נקבל טוקיו נחזיר את השעה ועוד 9.
\n", "בכל מקרה אחר נחזיר את השעה כמו שקיבלנו אותה.\n", - "השעון שלנו בתרגיל זה הוא שעון 24 שעות בפורמט HH:MM.
\n", - "תחילה, כתבו פונקציה המקבלת את השעה בפורמט HH:MM, ומקבלת את מספר השעות שיש להוסיף או להוריד מהשעה הנתונה, ומחזירה את השעה המעודכנת.
\n", - "time_shift(\"08:44\", 1)
\n", - "\"09:44\"
\n", - "time_shift(\"07:31\", -2)
\n", + "השעון שלנו בתרגיל זה הוא שעון 24 שעות בפורמט HH:MM.
\n", + "תחילה, כתבו פונקציה המקבלת את השעה בפורמט HH:MM, ומקבלת את מספר השעות שיש להוסיף או להוריד מהשעה הנתונה, ומחזירה את השעה המעודכנת.
\n", + "time_shift(\"08:44\", 1)
\n", + "\"09:44\"
\n", + "time_shift(\"07:31\", -2)
\n", "\"05:31\"\n", - "כמו כן עליכם לוודא שמוכנסת שעה חוקית, ולהדפיס שגיאה אם לא:
\n", - "time_shift(\"32:12\", 4)
\n", + "כמו כן עליכם לוודא שמוכנסת שעה חוקית, ולהדפיס שגיאה אם לא:
\n", + "time_shift(\"32:12\", 4)
\n", "\"Invalid time inserted\"\n", - "נוסף לכך, עליכם לתמוך במעברים בין יממות. כלומר עליכם לבצע נכון פעולות מסוג זה:
\n", - "time_shift(\"23:30\", 2)
\n", - "\"01:30\"
\n", - "time_shift(\"04:13\", -5)
\n", + "נוסף לכך, עליכם לתמוך במעברים בין יממות. כלומר עליכם לבצע נכון פעולות מסוג זה:
\n", + "time_shift(\"23:30\", 2)
\n", + "\"01:30\"
\n", + "time_shift(\"04:13\", -5)
\n", "\"23:13\"" ] }, @@ -651,36 +647,35 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##רמזים
" + "##רמזים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "פונקציות שימושיות:\n", - "
split – מתודה של string.
\n", - " האופרטור % (מודולו) – חשבו עם איזה מספר צריך לעשות מודולו.
\n", - " zfill – השתמשו בה במקרה שהשעה חד־ספרתית (לדוגמה 1:05 תהפוך ל־01:05) \n", - " \n", - "רמזים נוספים:
" + "
\n", - " מומלץ להמיר את השעה מ־string ל־int ואז לבצע את פעולות החשבון, ולבסוף להמיר חזרה ל־string\n", - " \n", - "פונקציות שימושיות:\n", + "
split – מתודה של string.
\n", + " האופרטור % (מודולו) – חשבו עם איזה מספר צריך לעשות מודולו.
\n", + "zfill – השתמשו בה במקרה שהשעה חד־ספרתית (לדוגמה 1:05 תהפוך ל־01:05) \n", + "רמזים נוספים:
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "מומלץ להמיר את השעה מ־string ל־int ואז לבצע את פעולות החשבון, ולבסוף להמיר חזרה ל־string\n", + "\n", + "כעת כתבו פונקציה המקבלת שני פרמטרים – שעה ואזור זמן ובאמצעות הפונקציה מהתרגיל הקודם מחזירה את השעה באזור הזמן המבוקש.\n", - "
\n", + "כעת כתבו פונקציה המקבלת שני פרמטרים – שעה ואזור זמן ובאמצעות הפונקציה מהתרגיל הקודם מחזירה את השעה באזור הזמן המבוקש.\n", + "
\n", - "
\n", " לדוגמה:\n", "\n", - "
convert_to_timezone(\"10:34\", \"TLV\")
\n", - "
\n", - " \"13:34\"\n", + "\n", + "
" ] }, @@ -697,26 +692,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## אורכי רשימות" + "## אורכי רשימות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "convert_to_timezone(\"10:34\", \"TLV\")
\n", + "
\n", + "\"13:34\"\n", "\n", + "
\n", " כתבו תוכנית שמקבלת 2 רשימות שונות, ומדפיסה:\n", "
\n", - "\n", - "\n", - "
- \"Same length\" אם הן באותו אורך.
\n", - "- \"Not same length\" אם הן באורך שונה.
\n", - "- \"Got empty list\" אם רשימה שקיבלנו היא באורך 0.
\n", + "\n", + "
\n", - "\n", - "- \"Same length\" אם הן באותו אורך.
\n", + "- \"Not same length\" אם הן באורך שונה.
\n", + "- \"Got empty list\" אם רשימה שקיבלנו היא באורך 0.
\n", "\n", - " לדוגמה – אם קיבלנו 2 רשימות ריקות, נדפיס:
\n", - " \n", + "\n", + " לדוגמה – אם קיבלנו 2 רשימות ריקות, נדפיס:
\n", + "\n", " \"Got empty list\"\n", " \"Got empty list\"\n", " \"Same length\"\n", @@ -737,41 +730,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מיקומים" + "## מיקומים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כתבו פונקציה שמקבלת רשימה של רשימות.
\n", - "אם הרשימה החיצונית לא באורך 6, הפונקציה תדפיס Only lists of length 6 are allowed.
\n", + "\n", + "כתבו פונקציה שמקבלת רשימה של רשימות.
\n", - "\n", - "
\n", + "אם הרשימה החיצונית לא באורך 6, הפונקציה תדפיס Only lists of length 6 are allowed.
\n", "הפונקציה תדפיס \"Yes!\" אם אחד מהבאים מתקיים:\n", "\n", - "
- אורך הרשימה במקום ה־0 שווה לאורך הרשימה במקום ה־4
\n", - "- אורך הרשימה במקום ה־3 שווה לאורך הרשימה במקום ה־2 וה־1
\n", - "- אורך הרשימה במקום ה־5 שווה לאורך הרשימה במקום ה־3
\n", + "\n", + "
\n", - " \n", - "- אורך הרשימה במקום ה־0 שווה לאורך הרשימה במקום ה־4
\n", + "- אורך הרשימה במקום ה־3 שווה לאורך הרשימה במקום ה־2 וה־1
\n", + "- אורך הרשימה במקום ה־5 שווה לאורך הרשימה במקום ה־3
\n", "\n", - "הפונקציה תדפיס \"Yes!\" עבור כל תנאי שמתקיים, גם אם קיים יותר מאחד כזה.
\n", - "לדוגמה, עבור:
\n", - "multi = [[0], [1], [2], [3], [4], [5]]
\n", + "\n", + "הפונקציה תדפיס \"Yes!\" עבור כל תנאי שמתקיים, גם אם קיים יותר מאחד כזה.
\n", - "\n", - "
\n", + "לדוגמה, עבור:
\n", + "multi = [[0], [1], [2], [3], [4], [5]]
\n", "כל התנאים מתקיימים, ולכן נדפיס \"Yes!\" 3 פעמים.\n", "\n", + "
\n", "כתבו לפחות 3 דוגמאות שונות שמדגימות:\n", "
\n", - "\n", - "\n", - "
- אפס הדפסות
\n", - "- הדפסה אחת
\n", - "- שתי הדפסות
\n", - "- שלוש הדפסות
\n", + "\n", + "
" ] }, diff --git a/week3/1_While_Loops.ipynb b/week3/1_While_Loops.ipynb index 8bc7883..620fe3a 100644 --- a/week3/1_While_Loops.ipynb +++ b/week3/1_While_Loops.ipynb @@ -4,31 +4,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#- אפס הדפסות
\n", + "- הדפסה אחת
\n", + "- שתי הדפסות
\n", + "- שלוש הדפסות
\n", "לולאות
" + "#לולאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##הקדמה
" + "##הקדמה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זהו בוקר אפלולי וגשום של יום ראשון. השמיים אפורים ואתם במיטה מתחת לפוך המפנק שלכם, מתפללים שאתם עדיין בתוך החלום המתוק ההוא.
\n", - " השעה היא 7:30. השעון המעורר מנגן שוב את השיר שפעם היה האהוב עליכם, והיום מעלה בכם אסוציאציות קשות שמערבות את הטלפון החכם שלכם ופטיש כבד מאוד.
\n", - " הפגישה שלכם תתקיים בשעה 9:00, ואתם יודעים בוודאות שתספיקו להגיע בזמן אם תתעוררו בשעה 8:00 ותמהרו מאוד.
\n", + "\n", + " זהו בוקר אפלולי וגשום של יום ראשון. השמיים אפורים ואתם במיטה מתחת לפוך המפנק שלכם, מתפללים שאתם עדיין בתוך החלום המתוק ההוא.
" ] @@ -37,9 +37,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " השעה היא 7:30. השעון המעורר מנגן שוב את השיר שפעם היה האהוב עליכם, והיום מעלה בכם אסוציאציות קשות שמערבות את הטלפון החכם שלכם ופטיש כבד מאוד.
\n", + " הפגישה שלכם תתקיים בשעה 9:00, ואתם יודעים בוודאות שתספיקו להגיע בזמן אם תתעוררו בשעה 8:00 ותמהרו מאוד.
\n", " היד מושטת לכפתור ה\"נודניק\" שיפעיל שוב את השעון המעורר שלכם בעוד 10 דקות. ועוד פעם. ושוב.\n", "\n", - " אם נתאר את האלגוריתם שלפיו פעלתם, נוכל להגיד כך:
\n", - "כל עוד השעון מצלצל, והשעה היא לפני 8:00, לחץ על כפתור הנודניק בשעון.
\n", + "\n", + " אם נתאר את האלגוריתם שלפיו פעלתם, נוכל להגיד כך:
" ] @@ -49,8 +49,8 @@ "metadata": {}, "source": [ "" @@ -60,18 +60,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כל עוד השעון מצלצל, והשעה היא לפני 8:00, לחץ על כפתור הנודניק בשעון.
\n", " נצייר את דרך הפעולה שלכם:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -79,16 +79,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", - " תרגול:\n", - " נסו לשרטט אלגוריתם להטלת 6 בקובייה.
\n", - " כל עוד לא התקבל 6 בקובייה, הטילו את הקובייה מחדש.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " נסו לשרטט אלגוריתם להטלת 6 בקובייה.
\n", - "
\n", + " כל עוד לא התקבל 6 בקובייה, הטילו את הקובייה מחדש.
\n", " כשקיבלתם 6 בקובייה, פִּצְחוּ בצהלולים בקול גדול.\n", "הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "המבנה ששרטטנו זה עתה נקרא לולאה.
\n", - "נשתמש בלולאה כשנרצה לחזור על פעולה מספר פעמים שלאו דווקא ידוע לנו מראש.
\n", + "\n", + "המבנה ששרטטנו זה עתה נקרא לולאה.
" ] @@ -97,11 +97,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "נשתמש בלולאה כשנרצה לחזור על פעולה מספר פעמים שלאו דווקא ידוע לנו מראש.
\n", "אם ננסה לנתח את הלולאה כרעיון, נגלה שכל לולאה מורכבת מ־4 חלקים מרכזיים:\n", "\n", - "
- אתחול הסביבה – הגדרת ערכים שבהם נשתמש בלולאה.
\n", - "- תנאי הלולאה – ביטוי בוליאני. כל עוד הביטוי הזה שקול ל־
\n", - "True
, גוף הלולאה ימשיך להתבצע.- גוף הלולאה – הפעולות שיקרו בכל פעם שתנאי הלולאה מתקיים.
\n", - "- צעד לקראת סוף הלולאה – הליך שמבטיח שהלולאה תסתיים.
\n", + "\n", + "
" ] }, @@ -109,20 +109,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- אתחול הסביבה – הגדרת ערכים שבהם נשתמש בלולאה.
\n", + "- תנאי הלולאה – ביטוי בוליאני. כל עוד הביטוי הזה שקול ל־
\n", + "True
, גוף הלולאה ימשיך להתבצע.- גוף הלולאה – הפעולות שיקרו בכל פעם שתנאי הלולאה מתקיים.
\n", + "- צעד לקראת סוף הלולאה – הליך שמבטיח שהלולאה תסתיים.
\n", "\n", + "
\n", "במקרה שלנו:\n", "
\n", - "\n", - "
" ] }, @@ -130,21 +130,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- שלב אתחול הסביבה כולל:\n", + "
\n", + "\n", + "
\n", + "- שלב אתחול הסביבה כולל:\n", "
\n", - "\n", - "
\n", - "- הגדרת הצלצול הראשוני ל־7:30.
\n", - "- הגדרת שעת ההשכמה הסופית ל־8:00.
\n", - "- הגדרת ה\"נודניק\" לצלצל בעוד 10 דקות.
\n", - "- תנאי הלולאה יכול להיות השעון המעורר פועל וגם השעה היא לפני שעת ההשכמה הסופית.
\n", - "- גוף הלולאה יכול להיות לחיצה על הנודניק וחזרה לישון.
\n", - "- צעד לקראת סוף הלולאה הוא הזמן שעבר בין צלצול לצלצול, שמקרב אותנו לשעה 8:00.
\n", + "- הגדרת הצלצול הראשוני ל־7:30.
\n", + "- הגדרת שעת ההשכמה הסופית ל־8:00.
\n", + "- הגדרת ה\"נודניק\" לצלצל בעוד 10 דקות.
\n", + "- תנאי הלולאה יכול להיות השעון המעורר פועל וגם השעה היא לפני שעת ההשכמה הסופית.
\n", + "- גוף הלולאה יכול להיות לחיצה על הנודניק וחזרה לישון.
\n", + "- צעד לקראת סוף הלולאה הוא הזמן שעבר בין צלצול לצלצול, שמקרב אותנו לשעה 8:00.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -152,18 +152,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " נסו לחשוב על דוגמה משלכם ללולאה כלשהי. פרקו אותה ל־4 הרעיונות המרכזיים שבהם דנו.\n", "
\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "דוגמאות
" + "##דוגמאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "קל לחשוב על דוגמאות ללולאות מחיי היום־יום.
\n", - "כמעט בכל פעם שאנחנו אומרים \"עד ש־\" או \"כל עוד־\", אנחנו בונים לולאה במציאות.
\n", - "בכל פעם שאנחנו חוזרים על משהו שוב ושוב, אנחנו פועלים לפי לולאה מסוימת שמניעה אותנו.
\n", - "רוב חיי היום־יום שלנו מתנהלים בלולאות, וזו הסיבה שלולאות הן כלי חזק כל כך בתכנות.
\n", + "\n", + "קל לחשוב על דוגמאות ללולאות מחיי היום־יום.
" ] }, @@ -171,7 +171,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כמעט בכל פעם שאנחנו אומרים \"עד ש־\" או \"כל עוד־\", אנחנו בונים לולאה במציאות.
\n", + "בכל פעם שאנחנו חוזרים על משהו שוב ושוב, אנחנו פועלים לפי לולאה מסוימת שמניעה אותנו.
\n", + "רוב חיי היום־יום שלנו מתנהלים בלולאות, וזו הסיבה שלולאות הן כלי חזק כל כך בתכנות.
\n", "\n", + "
\n", "לפניכם כמה דוגמאות ללולאות:\n", "
" ] @@ -180,12 +180,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- בזמן הארוחה, המשך לאכול עד שאתה שבע.
\n", - "- התעורר מהשינה! כל עוד אתה עירני, המשך ללמוד פייתון.
\n", - "- פתח את הספר בעמוד הראשון. כל עוד לא קראת את כל העמודים בספר, קרא את העמוד הנוכחי ואז עבור לעמוד הבא.
\n", - "- כל עוד לא מצאת אישה שנקראת הרמיוני, גש למישהי אקראית בעלת שיער חום מתולתל ועיניים חומות שנמצאת על הרציף ושאל אותה אם היא הרמיוני.
\n", - "- בליל כל הקדושים, התחפש, צא החוצה, וכל עוד לא ביקרת בכל הבתים ברחוב: לך לבית, צלצל בפעמון, אמור \"ממתק או תעלול\", קח ממתק, אמור תודה ולך לבית הבא.
\n", + "\n", + "
" ] }, @@ -193,16 +193,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- בזמן הארוחה, המשך לאכול עד שאתה שבע.
\n", + "- התעורר מהשינה! כל עוד אתה עירני, המשך ללמוד פייתון.
\n", + "- פתח את הספר בעמוד הראשון. כל עוד לא קראת את כל העמודים בספר, קרא את העמוד הנוכחי ואז עבור לעמוד הבא.
\n", + "- כל עוד לא מצאת אישה שנקראת הרמיוני, גש למישהי אקראית בעלת שיער חום מתולתל ועיניים חומות שנמצאת על הרציף ושאל אותה אם היא הרמיוני.
\n", + "- בליל כל הקדושים, התחפש, צא החוצה, וכל עוד לא ביקרת בכל הבתים ברחוב: לך לבית, צלצל בפעמון, אמור \"ממתק או תעלול\", קח ממתק, אמור תודה ולך לבית הבא.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -210,15 +210,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", - " תרגול:\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", " מצאו את 4 הרעיונות המרכזיים שעליהם דיברנו בכל אחת מהדוגמאות.\n", "
\n", - "כתיבת לולאה
" + "##כתיבת לולאה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בסרט המוזיקלי Hans Christian Andersen מ־1952, מופיע השיר Inchworm, ושרים בו כך:\n", + "
\n", + "בסרט המוזיקלי Hans Christian Andersen מ־1952, מופיע השיר Inchworm, ושרים בו כך:\n", "
" ] }, @@ -227,10 +227,10 @@ "metadata": {}, "source": [ "\n", - " Two and two are four" ] }, @@ -238,8 +238,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", - " Four and four are eight
\n", - " Eight and eight are sixteen
\n", - " Sixteen and sixteen are thirty-two
\n", + " Two and two are four
\n", + " Four and four are eight
\n", + " Eight and eight are sixteen
\n", + " Sixteen and sixteen are thirty-two
\n", "\n", - "זה הזמן לכתוב Inchworm משלנו.
\n", + "\n", + "זה הזמן לכתוב Inchworm משלנו.
" ] @@ -249,8 +249,8 @@ "metadata": {}, "source": [ "" @@ -260,19 +260,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נשרטט איך כתיבת לולאה עבור שיר שכזה תיראה:\n", "\n", + "
\n", "במקרה שלנו:\n", "
\n", - "\n", - "
" ] }, @@ -280,7 +280,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- שלב אתחול הסביבה הוא השלב שבו נגדיר משתנה עם הערך הראשון להדפסה: 2.
\n", - "- תנאי הלולאה בודק אם אנחנו בשורה האחרונה של השיר או לפניה.
\n", - "- גוף הלולאה כולל:\n", + "
\n", + "\n", + "
\n", + "- שלב אתחול הסביבה הוא השלב שבו נגדיר משתנה עם הערך הראשון להדפסה: 2.
\n", + "- תנאי הלולאה בודק אם אנחנו בשורה האחרונה של השיר או לפניה.
\n", + "- גוף הלולאה כולל:\n", "
\n", - "\n", - "
\n", - "- הגדרת משתנה שמכיל את סכום שני המספרים.
\n", - "- הדפסת שורה בשיר לפי הערך שחישבנו.
\n", - "- הצעד לקראת סוף הלולאה במקרה שלנו הוא קידום המשתנה שמכיל את המספר הנוכחי.
\n", + "- הגדרת משתנה שמכיל את סכום שני המספרים.
\n", + "- הדפסת שורה בשיר לפי הערך שחישבנו.
\n", + "- הצעד לקראת סוף הלולאה במקרה שלנו הוא קידום המשתנה שמכיל את המספר הנוכחי.
\n", "\n", + "
\n", "טוב, זה הזמן לקצת קוד, לא?\n", "
" ] @@ -302,8 +302,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "הקוד הזה משתמש במילת המפתח
while
כדי ליצור לולאה.
\n", + "\n", + "הקוד הזה משתמש במילת המפתח
" ] @@ -312,7 +312,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "while
כדי ליצור לולאה.
\n", "הלולאה תואמת לחלוטין את תיאור השלבים המילולי שמופיע מעליה.\n", "\n", + "
\n", "ננסה להיזכר איך נראית השורה הראשונה של השיר, וננסה להבין מה הקוד שנכתב למעלה אומר.\n", "
" ] @@ -328,8 +328,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "דבר ראשון, עלינו להכין את הסביבה לפני השימוש בלולאה.
\n", + "\n", + "דבר ראשון, עלינו להכין את הסביבה לפני השימוש בלולאה.
" ] @@ -347,11 +347,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נשתמש במשתנה שישמור עבורנו את הערך המספרי שיעמוד בראש השורה הנוכחית:\n", "\n", - "המספר שפותח את השורה האחרונה בשיר הוא 16, ולכן נרצה שהלולאה תרוץ כל עוד המספר הנוכחי ששמרנו קטן מ־16 או שווה לו.
\n", - "נרשום את מילת המפתחwhile
, ואחריה ביטוי בוליאני שיקבע מתי גוף הלולאה ירוץ. נסיים בנקודתיים.
\n", - "בכל פעם שהביטוי הבוליאני יהיה שווה ל־True
, גוף הלולאה ירוץ.
\n", - "בפעם הראשונה (והיחידה) שהביטוי הבוליאני יהיה שקול ל־False
, גוף הלולאה לא יתבצע והתוכנית תמשיך לבצע את הקוד שנמצא אחרי הלולאה.
\n", + "\n", + "המספר שפותח את השורה האחרונה בשיר הוא 16, ולכן נרצה שהלולאה תרוץ כל עוד המספר הנוכחי ששמרנו קטן מ־16 או שווה לו.
" ] }, @@ -368,12 +368,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "נרשום את מילת המפתחwhile
, ואחריה ביטוי בוליאני שיקבע מתי גוף הלולאה ירוץ. נסיים בנקודתיים.
\n", + "בכל פעם שהביטוי הבוליאני יהיה שווה ל־True
, גוף הלולאה ירוץ.
\n", + "בפעם הראשונה (והיחידה) שהביטוי הבוליאני יהיה שקול ל־False
, גוף הלולאה לא יתבצע והתוכנית תמשיך לבצע את הקוד שנמצא אחרי הלולאה.
\n", "\n", - "אחרי שכתבנו את התנאי, זה הזמן לכתוב מה אנחנו רוצים שיתבצע בכל פעם שהתנאי יתקיים.
\n", + "\n", + "אחרי שכתבנו את התנאי, זה הזמן לכתוב מה אנחנו רוצים שיתבצע בכל פעם שהתנאי יתקיים.
\n", - "
\n", "החלק הזה נקרא \"גוף הלולאה\", וכל הרצה שלו נקראת \"אִיטֶרַצְיָה\", או בעברית, \"חִזְרוּר\".\n", "\n", - "נתחיל בהגדרת המספר שיודפס בסוף השורה, שהוא המספר בתחילת השורה ועוד עצמו.
\n", + "\n", + "נתחיל בהגדרת המספר שיודפס בסוף השורה, שהוא המספר בתחילת השורה ועוד עצמו.
" ] @@ -391,7 +391,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "שימו לב להזחה, שמציינת שחלק הקוד הזה שייך ללולאת ה־while
ושהוא ירוץ בכל פעם שהביטוי הבוליאני שבראשה שקול ל־True
.\n", "\n", + "
\n", "נדפיס את השורה עם הפרטים שיצרנו:\n", "
" ] @@ -409,9 +409,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לסיום, לקראת הדפסת השורה הבאה, נקדם את המשתנה שמכיל את הערך שמודפס בתחילת כל שורה בשיר.
\n", - "הפעולה הזו תכין את המשתנה לשורה הבאה, וגם תקדם את הלולאה לסופה.
\n", + "\n", + "לסיום, לקראת הדפסת השורה הבאה, נקדם את המשתנה שמכיל את הערך שמודפס בתחילת כל שורה בשיר.
" ] @@ -429,20 +429,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "הפעולה הזו תכין את המשתנה לשורה הבאה, וגם תקדם את הלולאה לסופה.
\n", "כיוון שתחילת כל שורה חדשה בשיר זהה לסוף השורה הקודמת, נוכל לרשום בפשטות:\n", "סיכום ביניים
" + "###סיכום ביניים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כפי שראינו, לולאת
while
משתמשת בביטוי בוליאני כדי להחליט אם להריץ קוד מסוים.
\n", - "היא בודקת אם הביטוי הבוליאני שקול ל־True
, ואם כן, היא מריצה את קטע הקוד בגוף הלולאה.
\n", - "כל עוד הביטוי הבוליאני המופיע ליד המילהwhile
שקול ל־True
, גוף הלולאה ימשיך לרוץ.
\n", + "\n", + "כפי שראינו, לולאת
\n", - "while
משתמשת בביטוי בוליאני כדי להחליט אם להריץ קוד מסוים.
\n", + "היא בודקת אם הביטוי הבוליאני שקול ל־True
, ואם כן, היא מריצה את קטע הקוד בגוף הלולאה.
\n", + "כל עוד הביטוי הבוליאני המופיע ליד המילהwhile
שקול ל־True
, גוף הלולאה ימשיך לרוץ.
\n", "כשהביטוי יהפוך להיות שקול ל־False
, הלולאה תפסיק את ריצת הקוד בגוף הלולאה, והקוד שאחריה ימשיך לרוץ.\n", "\n", + "
\n", "הרעיון של
" ] @@ -451,21 +451,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "while
מקביל ל־if
שגופו רץ וחוזר לראש התנאי פעם אחר פעם, עד שהביטוי הבוליאני שבראש התנאי שקול ל־False
.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -473,21 +473,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " כתבו קוד שמקבל מהמשתמש מספר שלם גדול מ־1, ומדפיס את כל המספרים מ־1 ועד המספר שנקלט.\n", "
\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "דוגמאות נוספות
" + "###דוגמאות נוספות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "####תרגילים חשבוניים
" + "####תרגילים חשבוניים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "לפניכם דוגמה של קוד שמחשב את סכום כל המספרים הטבעיים, מ־1 ועד למספר שהזין המשתמש.\n", "
" ] @@ -514,16 +514,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -531,19 +531,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "####\n", - " הגדירו את 4 החלקים המופיעים בלולאה המופיעה בקוד מעלה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " הגדירו את 4 החלקים המופיעים בלולאה המופיעה בקוד מעלה.
\n", - "
\n", " שרטטו כיצד היא עובדת.\n", "מיקומים ברשימה
" + "####מיקומים ברשימה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפניכם קוד שמקבל כקלט את מספר התלמידים בכיתה.
\n", - "לאחר מכן, הוא מקבל כקלט את הציון של כל תלמיד במבחן האחרון.
\n", + "\n", + "לפניכם קוד שמקבל כקלט את מספר התלמידים בכיתה.
\n", - "
\n", + "לאחר מכן, הוא מקבל כקלט את הציון של כל תלמיד במבחן האחרון.
\n", "לבסוף, הקוד מחזיר את הציון הגבוה ביותר בכיתה.\n", "\n", + "
\n", "שימו לב לשימוש שנעשה כאן בלולאות כדי לגשת למיקומי ערכים ברשימה.\n", "
" ] @@ -582,15 +582,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -598,7 +598,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "####\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " חשבו על דרך לממש את הקוד הזה עם לולאה אחת בלבד.\n", "
\n", - "לולאה בתוך לולאה
" + "####לולאה בתוך לולאה
" ] }, { @@ -623,22 +623,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -646,23 +646,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## ניפוי שגיאות" + "## ניפוי שגיאות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " הסבירו לעצמכם כיצד הקוד הזה עובד.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " הסבירו לעצמכם כיצד הקוד הזה עובד.
\n", - "
\n", " במידת הצורך, הזינו את הקוד ב־PythonTutor כדי לראות מה הוא עושה.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "לולאה אין־סופית
" + "###לולאה אין־סופית
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אם אתם חדשים בנושא הלולאות והתנסיתם בפתירת התרגילים, יש סיכוי לא רע שנתקעה לכם המחברת.
\n", - " כשאנחנו מתעסקים עם לולאתwhile
, יש סיכון ממשי שניצור בטעות לולאה שלא תסתיים לעולם.
\n", + "\n", + " אם אתם חדשים בנושא הלולאות והתנסיתם בפתירת התרגילים, יש סיכוי לא רע שנתקעה לכם המחברת.
" ] @@ -671,14 +671,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כשאנחנו מתעסקים עם לולאתwhile
, יש סיכון ממשי שניצור בטעות לולאה שלא תסתיים לעולם.
\n", " המצב שבו לולאה לא מסתיימת נקרא \"לולאה אין־סופית\", והוא נובע מכך שתנאי הלולאה שקול תמיד ל־True
.\n", "\n", - " ישנן שתי טעויות נפוצות שגורמות ללולאות להיות אין־סופיות.
\n", + "\n", + " ישנן שתי טעויות נפוצות שגורמות ללולאות להיות אין־סופיות.
\n", - "\n", - "
\n", " זיהוי הטעות וטיפול בה יאפשרו ללולאה שלכם לעבוד כראוי:\n", "\n", - "
- טעות בתנאי – אין מצב שבו הביטוי הבוליאני בראש הלולאה יהיה שקול ל־
\n", - "False
.- טעות בקידום – לא בוצע צעד שיקדם את הלולאה לכיוון הסוף שלה, ועקב כך הביטוי הבוליאני נשאר שקול ל־
\n", + "True
.\n", + "
" ] }, @@ -686,9 +685,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- טעות בתנאי – אין מצב שבו הביטוי הבוליאני בראש הלולאה יהיה שקול ל־
\n", + "False
.- טעות בקידום – לא בוצע צעד שיקדם את הלולאה לכיוון הסוף שלה, ועקב כך הביטוי הבוליאני נשאר שקול ל־
\n", "True
.\n", - " אם ליד תא במחברת שלכם מופיעה כוכבית ותאים אחרים לא יכולים לרוץ, סימן שאותו תא עדיין רץ.
\n", - " אם הוא רץ זמן רב מדי, יש סיכוי שמדובר בלולאה אין־סופית. אם זה אכן המצב, בחרו בסרגל הכלים של המחברת ב־\"Kernel\" ואז ב־\"Restart\".
\n", + "\n", + " אם ליד תא במחברת שלכם מופיעה כוכבית ותאים אחרים לא יכולים לרוץ, סימן שאותו תא עדיין רץ.
" ] @@ -697,7 +696,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " אם הוא רץ זמן רב מדי, יש סיכוי שמדובר בלולאה אין־סופית. אם זה אכן המצב, בחרו בסרגל הכלים של המחברת ב־\"Kernel\" ואז ב־\"Restart\".
\n", " פעולה זו תעצור את הריצה של המחברת שלכם, ותאפשר לכם לתקן את הקוד הבעייתי ולהריץ אותו מחדש.\n", "\n", + "
\n", " הנה דוגמה ללולאה אין־סופית, בתוכנה שמטרתה לספור מ־1 עד 10:\n", "
" ] @@ -718,15 +717,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -734,16 +733,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " למה הלולאה הזו אין־סופית? תקנו אותה כך שתפעל כראוי.\n", "
\n", - "הלולאה לא רצה
" + "###הלולאה לא רצה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "המקרה ההפוך מלולאה אין־סופית הוא לולאה שפשוט לא רצה.
\n", - "במילים אחרות – לולאה שתנאי הכניסה שלה שקול ל־False
בהרצתה הראשונה.
\n", + "\n", + "המקרה ההפוך מלולאה אין־סופית הוא לולאה שפשוט לא רצה.
" ] @@ -764,17 +763,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "במילים אחרות – לולאה שתנאי הכניסה שלה שקול ל־False
בהרצתה הראשונה.
\n", "במקרה הזה, ראוי לבדוק כיצד אתחלנו את הסביבה, ואם התנאי שכתבנו אכן עובד.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -782,18 +781,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " את הלולאה הזו כתב מתכנת מפוזר במיוחד, ויש בה יותר מבעיה אחת.
\n", - " מצאו את הבעיות, תקנו אותן והריצו את התוכנית.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " את הלולאה הזו כתב מתכנת מפוזר במיוחד, ויש בה יותר מבעיה אחת.
\n", - "
\n", + " מצאו את הבעיות, תקנו אותן והריצו את התוכנית.
\n", " הפלט הרצוי, משמאל לימין, הוא: 8, 4, 2, 1.\n", "סטייה באחד
" + "###סטייה באחד
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זאת טעות נפוצה מאוד, עד כדי כך שיש לה שם ואפילו ערך בוויקיפדיה!
\n", + "\n", + " זאת טעות נפוצה מאוד, עד כדי כך שיש לה שם ואפילו ערך בוויקיפדיה!
\n", - "
\n", " בשגיאה מסוג \"סטייה באחד\" (באנגלית: \"Off By One\") מתכנת שוכח לטפל במקרה האחרון, או מטפל במקרה אחד יותר מדי.\n", "\n", + "
\n", " נראה דוגמה:\n", "
" ] @@ -819,15 +818,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -835,16 +834,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " מה הבעיה פה? כיצד ניתן לפתור אותה?\n", "
\n", - "טיפול בבאגים של לולאות
" + "###טיפול בבאגים של לולאות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לולאות הן כלי עוצמתי שמוסיף עניין רב לקוד.
\n", - "עם זאת, לולאות עלולות להוסיף מקרים מיוחדים שגורמים לבאגים קשים לפענוח.
\n", + "\n", + "לולאות הן כלי עוצמתי שמוסיף עניין רב לקוד.
" ] @@ -853,10 +852,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "עם זאת, לולאות עלולות להוסיף מקרים מיוחדים שגורמים לבאגים קשים לפענוח.
\n", "הדרך הכי טובה למצוא בעיות היא להדפיס את ערכם של המשתנים שנמצאים בלולאה ובאתחולי המשתנים שלפניה.\n", "\n", - "
- הדפסות לפני תחילת הלולאה – בדקו מה הערך של תנאי הלולאה, ומהם הערכים של כל אחד מהביטויים שמרכיבים אותו.
\n", - "- הדפסות בתוך הלולאה – בדקו מה קורה בתוך גוף הלולאה בכל איטרציה. האם הערכים של המשתנים הם אלו שצפיתם? כמה פעמים רץ גוף הלולאה?
\n", - "- הדפסות אחרי הלולאה – מה ערכם של המשתנים בסיום הלולאה? מה הערכים של המשתנים בתנאי הבוליאני? האם הלולאה סיימה את עבודה מוקדם מדי?
\n", + "\n", + "
" ] }, @@ -864,14 +863,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##- הדפסות לפני תחילת הלולאה – בדקו מה הערך של תנאי הלולאה, ומהם הערכים של כל אחד מהביטויים שמרכיבים אותו.
\n", + "- הדפסות בתוך הלולאה – בדקו מה קורה בתוך גוף הלולאה בכל איטרציה. האם הערכים של המשתנים הם אלו שצפיתם? כמה פעמים רץ גוף הלולאה?
\n", + "- הדפסות אחרי הלולאה – מה ערכם של המשתנים בסיום הלולאה? מה הערכים של המשתנים בתנאי הבוליאני? האם הלולאה סיימה את עבודה מוקדם מדי?
\n", "מונחים
" + "##מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "
- אתחול
- לא רק בלולאות – הגדרת משתנים לערכים התחלתיים לפני ביצוע פעולה כלשהי.
\n", "- תנאי הלולאה
- ביטוי בוליאני שכל עוד הוא שקול ל־
\n", "True
, גוף הלולאה ירוץ.- גוף הלולאה
- השורות שירוצו כל עוד תנאי הלולאה מתקדם. גוף הלולאה כולל את הקידום.
\n", @@ -887,29 +886,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##תרגילים
" + "##תרגילים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###It's the final...
" + "###It's the final...
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "נתקעתם במסיבה שבה סופרים את השניות לאחור עד לכניסת השנה החדשה.
\n", - "עזרו למשתתפים המבולבלים שהתחילו לספור מוקדם מדי –
\n", - "קבלו את מספר השניות שנותרו עד חצות, והדפיסו עבורם את הספירה לאחור.
\n", + "\n", + "נתקעתם במסיבה שבה סופרים את השניות לאחור עד לכניסת השנה החדשה.
\n", - "
\n", + "עזרו למשתתפים המבולבלים שהתחילו לספור מוקדם מדי –
\n", + "קבלו את מספר השניות שנותרו עד חצות, והדפיסו עבורם את הספירה לאחור.
\n", "בסוף הספירה, הדפיסו \"Happy new year!\"\n", "\n", - "לדוגמה, עבור 4, הדפיסו:
\n", - " \n", + "\n", + "לדוגמה, עבור 4, הדפיסו:
\n", + "\n", " 4\n", " 3\n", " 2\n", @@ -923,16 +922,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###Play
" + "###Play
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ציירו פירמידה עומדת על הצד, כך שראשה יהיה בצד ימין.
\n", - "במהלך הקוד, קבלו מהמשתמש את אורך השורה שבה מצויר קודקוד הפירמידה.
\n", + "\n", + "ציירו פירמידה עומדת על הצד, כך שראשה יהיה בצד ימין.
" ] @@ -958,27 +957,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "במהלך הקוד, קבלו מהמשתמש את אורך השורה שבה מצויר קודקוד הפירמידה.
\n", "לדוגמה: בפירמידה שלפניכם, המשתמש הכניס 5 כאורך השורה שבה מצויר קודקוד הפירמידה.\n", "מפענח הצפנים 2
" + "###מפענח הצפנים 2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "הצופן לכספת הביתית שלכם הוא 4812. בנו משחק בול־פגיעה שמאפשר למשתמש לנסות לנחש את הצופן.
\n", - "למשתמש יש 3 ניסיונות לנחש נכונה את הקוד הסודי שלכם לפני שמופעלת אזעקה.
\n", - "כחלק ממנגנון ההגנה מאיבוד הסיסמה לכספת, הכספת מציגה כמה ספרות נכונות המשתמש הזין אחרי כל ניחוש.
\n", - "אפשרו למשתמש להזין קוד 3 פעמים, וכתבו לו בכל ניסיון כמה מתוך הספרות שהזין באמת קיימות בקוד הנכון, לאו דווקא בסדר שהקיש.
\n", - "אם לא הצליח אחרי 3 ניסיונות, הדפיסו שהאזעקה הופעלה וסיימו את התוכנית.
\n", + "\n", + "הצופן לכספת הביתית שלכם הוא 4812. בנו משחק בול־פגיעה שמאפשר למשתמש לנסות לנחש את הצופן.
\n", - "
\n", + "למשתמש יש 3 ניסיונות לנחש נכונה את הקוד הסודי שלכם לפני שמופעלת אזעקה.
\n", + "כחלק ממנגנון ההגנה מאיבוד הסיסמה לכספת, הכספת מציגה כמה ספרות נכונות המשתמש הזין אחרי כל ניחוש.
\n", + "אפשרו למשתמש להזין קוד 3 פעמים, וכתבו לו בכל ניסיון כמה מתוך הספרות שהזין באמת קיימות בקוד הנכון, לאו דווקא בסדר שהקיש.
\n", + "אם לא הצליח אחרי 3 ניסיונות, הדפיסו שהאזעקה הופעלה וסיימו את התוכנית.
\n", "\n", - "לדוגמה, אם המשתמש הקיש בניסיון הראשון 0634, הדפיסו לו שרק אחת הספרות שניחש נכונה.
\n", - "אם המשתמש הקיש בניסיון השני 1234, הדפיסו לו ש־3 ספרות תואמות לקוד המקורי.
\n", - "אם המשתמש הקיש בניסיון השלישי 1284, הדפיסו לו ש־4 ספרות תואמות לקוד המקורי, ואז הדפיסו לו שהופעלה האזעקה.
\n", + "\n", + "לדוגמה, אם המשתמש הקיש בניסיון הראשון 0634, הדפיסו לו שרק אחת הספרות שניחש נכונה.
\n", - "
\n", + "אם המשתמש הקיש בניסיון השני 1234, הדפיסו לו ש־3 ספרות תואמות לקוד המקורי.
\n", + "אם המשתמש הקיש בניסיון השלישי 1284, הדפיסו לו ש־4 ספרות תואמות לקוד המקורי, ואז הדפיסו לו שהופעלה האזעקה.
\n", "אם המשתמש הקיש באחד הניסיונות 4812, הדפיסו שהכספת נפתחה בהצלחה וסיימו את התוכנית מייד.\n", "\n", + "
\n", "השתמשו בלולאות.\n", "
" ] @@ -987,23 +986,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###כמו קולץ בישבן
" + "###כמו קולץ בישבן
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "נגדיר כלל: אם מספר הוא זוגי, נחלק אותו ב־2. אם מספר הוא אי־זוגי, נכפיל אותו ב־3 ונוסיף לו 1.
\n", - "לפי השערת קולץ, אם ניקח מספר חיובי שלם ונשתמש עליו פעמים רבות בכלל הזה, תמיד נגיע בסופו של דבר למספר 1.
\n", + "\n", + "נגדיר כלל: אם מספר הוא זוגי, נחלק אותו ב־2. אם מספר הוא אי־זוגי, נכפיל אותו ב־3 ונוסיף לו 1.
\n", - "
\n", + "לפי השערת קולץ, אם ניקח מספר חיובי שלם ונשתמש עליו פעמים רבות בכלל הזה, תמיד נגיע בסופו של דבר למספר 1.
\n", "לדוגמה, אם ניקח את המספר 52, נקבל את שרשרת הפעולות הבאה:\n", "\n", - "
- 52 זוגי, ולכן נחלק ב־2. נקבל 26.
\n", - "- 26 זוגי, ולכן נחלק ב־2. נקבל 13.
\n", - "- 13 הוא אי־זוגי, ולכן נכפיל ב־3 ונוסיף 1. נקבל 40.
\n", - "- וכך הלאה.
\n", + "\n", + "
" ] }, @@ -1018,8 +1017,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- 52 זוגי, ולכן נחלק ב־2. נקבל 26.
\n", + "- 26 זוגי, ולכן נחלק ב־2. נקבל 13.
\n", + "- 13 הוא אי־זוגי, ולכן נכפיל ב־3 ונוסיף 1. נקבל 40.
\n", + "- וכך הלאה.
\n", "\n", - "כתבו פונקציה שמקבלת מספר, ומחזירה את מספר הפעולות שצריך לעשות עליו, לפי השערת קולץ, כדי להגיע ל־1.
\n", + "\n", + "כתבו פונקציה שמקבלת מספר, ומחזירה את מספר הפעולות שצריך לעשות עליו, לפי השערת קולץ, כדי להגיע ל־1.
" ] @@ -1028,15 +1027,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", "לדוגמה: עבור המספר 52 היינו צריכים לבצע 11 פעולות כדי להגיע ל־1, ולכן עבור הקלט 52 הפונקציה תחזיר 11.\n", "ממש קולץ בישבן
" + "###ממש קולץ בישבן
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מצאו עבור איזה מספר בין 1 ל־1,000, צריך לעשות הכי הרבה צעדים, לפי השערת קולץ, כדי להגיע ל־1.
\n", + "\n", + " מצאו עבור איזה מספר בין 1 ל־1,000, צריך לעשות הכי הרבה צעדים, לפי השערת קולץ, כדי להגיע ל־1.
" ] @@ -1056,7 +1055,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "לדוגמה, הנה הצעדים שצריך לעשות עבור כל מספר עד 5:\n", "\n", + "
\n", "מכאן שהמספר בין 1 ל־5 שעליו יש לעשות הכי הרבה צעדים, לפי השערת קולץ, עד שמגיעים ל־1, הוא 3.\n", "
" ] diff --git a/week3/2_Slicing.ipynb b/week3/2_Slicing.ipynb index 52bed86..6f0147e 100644 --- a/week3/2_Slicing.ipynb +++ b/week3/2_Slicing.ipynb @@ -4,28 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#חיתוך / Slicing
" + "#חיתוך / Slicing
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##הקדמה
" + "##הקדמה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " בשבוע שעבר למדנו כיצד לגשת לרשימה או למחרוזת במיקום מסוים:\n", "
" ] @@ -49,8 +49,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זוהי יכולת שימושית מאוד, אך לעיתים עולה הצורך לקחת כמה איברים מתוך המשתנה שהגדרנו, ולבנות מהם רשימה חדשה או מחרוזת חדשה.
\n", + "\n", + " זוהי יכולת שימושית מאוד, אך לעיתים עולה הצורך לקחת כמה איברים מתוך המשתנה שהגדרנו, ולבנות מהם רשימה חדשה או מחרוזת חדשה.
" ] @@ -68,16 +68,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " קחו לדוגמה את המקרה הבא, שבו התגנב למחרוזת שלנו מספר מיותר שהיינו שמחים להעלים:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -85,17 +85,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##\n", - " ממשו דרך המאפשרת להדפיס את המחרוזת ללא המספר.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ממשו דרך המאפשרת להדפיס את המחרוזת ללא המספר.
\n", - "
\n", " חשבו על דרך נוספת לעשות זאת.\n", "הגדרה
" + "##הגדרה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "חיתוך (או Slicing) היא שיטה שמטרתה להשיג חלק מהאיברים של ערך מסוים.
\n", - "במחרוזת, חיתוך יעזור לנו לקבל תת־מחרוזת מתוך המחרוזת השלמה.
\n", - "ברשימה, חיתוך יעזור לנו לקבל תת־רשימה מתוך הרשימה השלמה.
\n", + "\n", + "חיתוך (או Slicing) היא שיטה שמטרתה להשיג חלק מהאיברים של ערך מסוים.
" ] }, @@ -103,21 +103,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "במחרוזת, חיתוך יעזור לנו לקבל תת־מחרוזת מתוך המחרוזת השלמה.
\n", + "ברשימה, חיתוך יעזור לנו לקבל תת־רשימה מתוך הרשימה השלמה.
\n", "חיתוך בפייתון
" + "##חיתוך בפייתון
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###חיתוך לפי טווח
" + "###חיתוך לפי טווח
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נבחן את המחרוזת הבאה:\n", "
" ] @@ -135,8 +135,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "מטרתנו תהיה \"לחלץ\" את החלק הראשון של המחרוזת, זה שנמצא לפני ה־42, באמצעות חיתוך.
\n", + "\n", + "מטרתנו תהיה \"לחלץ\" את החלק הראשון של המחרוזת, זה שנמצא לפני ה־42, באמצעות חיתוך.
" ] @@ -146,41 +146,41 @@ "metadata": {}, "source": [ "
\n", "לשם כך, נביט על המיקום של כל אות:\n", "\n", - "
" ] }, @@ -188,9 +188,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", - "לפי השרטוט, אנחנו רוצים לחתוך ממיקום 0 ועד מיקום 3.
\n", - "נבקש מפייתון את המיקומים בצורה הבאה:
\n", + "\n", + "לפי השרטוט, אנחנו רוצים לחתוך ממיקום 0 ועד מיקום 3.
" ] }, @@ -198,12 +198,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "נבקש מפייתון את המיקומים בצורה הבאה:
\n", "\n", - "
- נפתח סוגריים מרובעים.
\n", - "- מייד אחריהם, נציין את המיקום שממנו נתחיל לקחת איברים.
\n", - "- נשים נקודתיים.
\n", - "- מייד אחריהן, נציין מיקום הגדול באחד מהמקום שבו נסיים. פייתון לא תתחשב באיבר שבמיקום הזה.
\n", - "- נסגור סוגריים מרובעים.
\n", + "\n", + "
" ] }, @@ -222,41 +222,41 @@ "metadata": {}, "source": [ "- נפתח סוגריים מרובעים.
\n", + "- מייד אחריהם, נציין את המיקום שממנו נתחיל לקחת איברים.
\n", + "- נשים נקודתיים.
\n", + "- מייד אחריהן, נציין מיקום הגדול באחד מהמקום שבו נסיים. פייתון לא תתחשב באיבר שבמיקום הזה.
\n", + "- נסגור סוגריים מרובעים.
\n", "\n", - "
" ] }, @@ -264,17 +264,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -282,16 +282,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " קל לזכור שפייתון לא לוקחת את האיבר האחרון:
\n", - " אם ניקח את המיקום של האיבר האחרון, ונחסר ממנו את המיקום של האיבר הראשון – נקבל את מספר האיברים שחזרו.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " קל לזכור שפייתון לא לוקחת את האיבר האחרון:
\n", - "
\n", + " אם ניקח את המיקום של האיבר האחרון, ונחסר ממנו את המיקום של האיבר הראשון – נקבל את מספר האיברים שחזרו.
\n", " במקרה שלנו – 4 פחות 0 יוצא 4, שזה בדיוק מספר האיברים שקיבלנו חזרה.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -299,15 +299,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " רבים נוטים להתבלבל בין חיתוך לבין קריאה לפונקציה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " רבים נוטים להתבלבל בין חיתוך לבין קריאה לפונקציה.
\n", - "
\n", " טעות זו מתאפיינת בבלבול בין סוגריים עגולים לבין סוגריים מרובעים, או בין פסיק לבין נקודתיים.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -315,7 +315,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " חיתוכים לא משנים את המחרוזת המקורית, אלא אם נבצע השמה חזרה לתוך המשתנה.\n", "
\n", - "\n", + "
\n", "אם אנחנו מעוניינים להתחיל את החיתוך מתחילת המחרוזת, נוכל להשמיט את החלק שלפני הנקודתיים:\n", "
" ] @@ -334,7 +334,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נשתמש בטריק דומה כדי לחלץ את החלק השני של המחרוזת – מתא 6 ועד סוף המחרוזת:\n", "
" ] @@ -353,44 +353,44 @@ "metadata": {}, "source": [ "\n", - "
" ] }, @@ -398,7 +398,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", - " \n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", + " \n", + "
\n", "אחרי שחתכנו יפה כל כך את המחרוזת של האבוקדו, הגיע הזמן ליהנות מהפירות:\n", "
" ] @@ -416,15 +416,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -432,16 +432,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " כתבו שורה שמחלצת רק את תת־המחרוזת \"42\" מתוך המחרוזת.\n", "
\n", - "חיתוך בקפיצות
" + "###חיתוך בקפיצות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אגף כוח האדם הנהדר של צה\"ל ביקש מכם לחלץ את האותיות A, c, a מתוך המחרוזת שהוצגה למעלה.
\n", - "אם נבדוק היטב, נגלה שהאותיות מופיעות החל מהתא ה־0, בקפיצות של 3 בכל פעם.
\n", + "\n", + "אגף כוח האדם הנהדר של צה\"ל ביקש מכם לחלץ את האותיות A, c, a מתוך המחרוזת שהוצגה למעלה.
" ] @@ -459,8 +459,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אם נבדוק היטב, נגלה שהאותיות מופיעות החל מהתא ה־0, בקפיצות של 3 בכל פעם.
\n", "למזלנו, בפייתון יש דרך פשוטה להפליא לחתוך תוך כדי קפיצות מאות לאות – להוסיף נקודתיים, ואז את מרחק הקפיצה!\n", "\n", - "למה זה לא הצליח?
\n", + "\n", + "למה זה לא הצליח?
" ] @@ -470,41 +470,41 @@ "metadata": {}, "source": [ "
\n", "נזכר שפייתון לא אוהבת לקחת את המקום האחרון:\n", "\n", - "
" ] }, @@ -512,7 +512,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", + "
\n", " נתקן, ועל הדרך ניזכר שלא באמת צריך את ה־0 שם בהתחלה:\n", "
" ] @@ -531,41 +531,41 @@ "metadata": {}, "source": [ "\n", - "
" ] }, @@ -573,15 +573,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "חיתוך הפוך
" + "###חיתוך הפוך
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כחובבים גדולים של שירה לירית, הפעם המטרה שלנו תהיה להשיג את המחרוזת \"oda\".
\n", + "\n", + " כחובבים גדולים של שירה לירית, הפעם המטרה שלנו תהיה להשיג את המחרוזת \"oda\".
" ] }, @@ -589,9 +589,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", - " נשים לב שמדובר בתאים 6, 7 ו־8 בסדר הפוך.
\n", - " נוכל לנסות להפוך את הסדר של המספרים:
\n", + "\n", + " נשים לב שמדובר בתאים 6, 7 ו־8 בסדר הפוך.
" ] }, @@ -608,8 +608,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " נוכל לנסות להפוך את הסדר של המספרים:
\n", "\n", - " אך מהר מאוד נגלה שישנה בעיה בהתקדמות נגד כיוון החץ –
\n", + "\n", + " אך מהר מאוד נגלה שישנה בעיה בהתקדמות נגד כיוון החץ –
" ] @@ -619,44 +619,44 @@ "metadata": {}, "source": [ "
\n", " אי־אפשר להגיע מתא 8 לתא 5 אם אנחנו מתקדמים ימינה.\n", "\n", - "
" ] }, @@ -664,8 +664,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", - " \n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", + " \n", - " כל מה שנצטרך זה לבקש לקפוץ בצעדים של -1.
\n", + "\n", + " כל מה שנצטרך זה לבקש לקפוץ בצעדים של -1.
" ] @@ -684,41 +684,41 @@ "metadata": {}, "source": [ "
\n", " כשכמות הצעדים (הקפיצות) שלנו היא מספר שלילי, כיוון החץ הופך להיות מימין לשמאל:\n", "\n", - "
" ] }, @@ -726,7 +726,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "8 \n", - "\n", - " \n", - "\"A\" \n", - "\"v\" \n", - "\"o\" \n", - "\"c\" \n", - "\"4\" \n", - "\"2\" \n", - "\"a\" \n", - "\"d\" \n", - "\"o\" \n", - "\n", - " \n", - " \n", + "-9 \n", - "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "8 \n", + "\n", + " \n", + "\"A\" \n", + "\"v\" \n", + "\"o\" \n", + "\"c\" \n", + "\"4\" \n", + "\"2\" \n", + "\"a\" \n", + "\"d\" \n", + "\"o\" \n", + "\n", + " \n", + "\n", "-9 \n", + "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", + "
\n", " במקרה כזה, סוף המחרוזת שאנחנו חותכים נחשבת התחלת המחרוזת (כי החיתוך מתחיל מימין):\n", "
" ] @@ -744,16 +744,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -761,14 +761,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###\n", - " חִתְכוּ מהמחרוזת את תת־המחרוזת \"covA\".
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " חִתְכוּ מהמחרוזת את תת־המחרוזת \"covA\".
\n", - "
\n", " לאחר מכן, הדפיסו את המחרוזת \"oda24covA\" בעזרת חיתוך שלword
.\n", "דוגמאות נוספות
" + "###דוגמאות נוספות
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " חיתוך עובד בצורה זהה על רשימה:\n", "
" ] @@ -841,8 +841,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אפשר לעבוד גם עם מיקומים שליליים.
\n", + "\n", + "אפשר לעבוד גם עם מיקומים שליליים.
" ] @@ -871,14 +871,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", "עבור פייתון זה אותו דבר:\n", "תרגילים
" + "##תרגילים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###איזה עולם
" + "###איזה עולם
" ] }, { @@ -894,15 +894,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "שרשרו את המחרוזות הבאות יחד, לפי הסדר שבו הן מוצגות בתרגיל.
\n", + "\n", + "שרשרו את המחרוזות הבאות יחד, לפי הסדר שבו הן מוצגות בתרגיל.
\n", - "
\n", "לצורך התרגיל, התייחסו ל־H כתו הראשון במחרוזת. כמו כן, התייחסו לרווח כתו לכל דבר.\n", "\n", - "
- המחרוזת שהוגדרה מהתו השביעי והלאה.
\n", - "- המחרוזת שהוגדרה מהתו השישי ועד התו החמישי, כולל, מימין לשמאל.
\n", - "- המחרוזת \"f \" (התו f ואז רווח).
\n", - "- ארבעת התווים הראשונים במחרוזת שהוגדרה.
\n", + "\n", + "
" ] }, @@ -910,16 +910,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###- המחרוזת שהוגדרה מהתו השביעי והלאה.
\n", + "- המחרוזת שהוגדרה מהתו השישי ועד התו החמישי, כולל, מימין לשמאל.
\n", + "- המחרוזת \"f \" (התו f ואז רווח).
\n", + "- ארבעת התווים הראשונים במחרוזת שהוגדרה.
\n", "מסר סודי ביותר
" + "###מסר סודי ביותר
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ארפכשד העביר לכדרלעומר מסר סודי ומוצפן.
\n", - "במחרוזת הבאה, אם תקפצו בכל פעם מעל מספר מסוים של אותיות, תקבלו מסר חשוב הכולל את סיסמתו של ארפכשד.
\n", + "\n", + "ארפכשד העביר לכדרלעומר מסר סודי ומוצפן.
" ] @@ -928,7 +928,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "במחרוזת הבאה, אם תקפצו בכל פעם מעל מספר מסוים של אותיות, תקבלו מסר חשוב הכולל את סיסמתו של ארפכשד.
\n", "מצאו על כמה אותיות צריך לדלג בכל פעם כדי להשיג את המסר הסודי שנשלח לארפכשד.\n", "\n", + "
\n", "רמז: המחרוזת כוללת את המילה
" ] @@ -946,18 +946,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###password.\n", "(\"The very best\"[-3:]*2)[2:6]
" + "###(\"The very best\"[-3:]*2)[2:6]
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפניכם דוגמה של קובץ טקסט שמסודר בצורה שמזכירה טבלה.
\n", - "הקובץ מכיל את עשרים הפוקימונים הראשונים. העמודות מופרדות זו מזו בפסיקים.
\n", - "החזירו רשימה של רשימות, כאשר כל תת־רשימה מייצגת שורה בטבלה, וכל תא ברשימה הזו מייצג את הערך שנמצא בעמודה באותה רשימה.
\n", - "מחקו מהרשימות את עמודת Generation (שהרי כולם מדור ראשון), ואת עמודת Legendary (אף אחד מהם אינו אגדי).
\n", + "\n", + "לפניכם דוגמה של קובץ טקסט שמסודר בצורה שמזכירה טבלה.
" ] @@ -966,7 +966,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "הקובץ מכיל את עשרים הפוקימונים הראשונים. העמודות מופרדות זו מזו בפסיקים.
\n", + "החזירו רשימה של רשימות, כאשר כל תת־רשימה מייצגת שורה בטבלה, וכל תא ברשימה הזו מייצג את הערך שנמצא בעמודה באותה רשימה.
\n", + "מחקו מהרשימות את עמודת Generation (שהרי כולם מדור ראשון), ואת עמודת Legendary (אף אחד מהם אינו אגדי).
\n", "מחקו גם את עמודת Total.\n", "\n", + "
\n", " דוגמה לפלט שאמור להתקבל עבור 3 השורות הראשונות:\n", "
" ] @@ -988,8 +988,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בונוס: המירו לטיפוס מסוג int את המקומות ברשימה שמכילים מספרים.
\n", + "\n", + "בונוס: המירו לטיפוס מסוג int את המקומות ברשימה שמכילים מספרים.
" ] diff --git a/week3/3_Files.ipynb b/week3/3_Files.ipynb index de13ea3..3497684 100644 --- a/week3/3_Files.ipynb +++ b/week3/3_Files.ipynb @@ -4,30 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# קבצים" + "# קבצים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הגדרה" + "## הגדרה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "זהו תרגיל מורכב. הרגישו בנוח לפתוח מחברות משבוע קודם ולהיעזר במדריכים.\n", "\n", - " קובץ הוא מבנה שמאגד בתוכו נתונים השמורים במחשב שלכם.
\n", - " לכל קובץ יש שם וכתובת (נתיב, או באנגלית path), והוא מכיל כמות מסוימת של מידע שמשפיעה על גודלו.
\n", + "\n", + "קובץ הוא מבנה שמאגד בתוכו נתונים השמורים במחשב שלכם.
" ] @@ -36,41 +36,41 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " לכל קובץ יש שם וכתובת (נתיב, או באנגלית path), והוא מכיל כמות מסוימת של מידע שמשפיעה על גודלו.
\n", " תוכן הקובץ הוא מה שמגדיר את סוגו. סוגי קבצים שונים משמשים למטרות שונות, לדוגמה:\n", "\n", - " \n", - "
\n", - " \n", - " \n", - " \n", - "סוג הקובץ \n", - "תכלית הקובץ \n", - "דוגמאות לסיומות \n", - "\n", - " \n", - "טקסט \n", - "מכיל מלל בלבד, ללא עיצוב כלשהו (הדגשות, גדלים וכדומה) \n", - "txt \n", - "\n", - " \n", - "תמונה \n", - "ייצוג של תמונה דיגיטלית למטרת הצגה חזותית שלה \n", - "png, jpg, gif, bmp \n", - "\n", - " \n", - "וידיאו \n", - "ייצוג של סרט או כל וידיאו אחר \n", - "mp4, avi, flv \n", - "\n", - " \n", - "פייתון \n", - "מכיל קוד שהתוכנה של פייתון יודעת לקרוא ולהפעיל \n", - "py, pyc, pyd \n", - "\n", - " \n", - " \n", + "הרצה \n", - "מכיל סדרת הוראות המיועדות לקריאה ולהרצה על־ידי המחשב \n", - "exe, dmg \n", - "\n", + "\n", + "
" ] }, @@ -78,17 +78,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### מהברזל ועד הקובץ\n", - "\n", - "\n", + " \n", + "\n", + "\n", + "סוג הקובץ \n", + "תכלית הקובץ \n", + "דוגמאות לסיומות \n", + "\n", + " \n", + "טקסט \n", + "מכיל מלל בלבד, ללא עיצוב כלשהו (הדגשות, גדלים וכדומה) \n", + "txt \n", + "\n", + " \n", + "תמונה \n", + "ייצוג של תמונה דיגיטלית למטרת הצגה חזותית שלה \n", + "png, jpg, gif, bmp \n", + "\n", + " \n", + "וידיאו \n", + "ייצוג של סרט או כל וידיאו אחר \n", + "mp4, avi, flv \n", + "\n", + " \n", + "פייתון \n", + "מכיל קוד שהתוכנה של פייתון יודעת לקרוא ולהפעיל \n", + "py, pyc, pyd \n", + "\n", + " \n", + "\n", "הרצה \n", + "מכיל סדרת הוראות המיועדות לקריאה ולהרצה על־ידי המחשב \n", + "exe, dmg \n", + "\n", - "קבצים הם דרך נהדרת לקבל הצצה חטופה לעומק ולמורכבות של המכונה המדהימה שנקראת מחשב.
\n", + "### מהברזל ועד הקובץ\n", + "\n", + "קבצים הם דרך נהדרת לקבל הצצה חטופה לעומק ולמורכבות של המכונה המדהימה שנקראת מחשב.
" ] @@ -97,11 +96,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### הכונן הקשיח\n", - "\n", - "
\n", "ננסה לצייר לכם תמונה מלאה – נתחיל מהשכבה הנמוכה ביותר, הכונן הקשיח שלכם, ולבסוף נגיע לקבצים.\n", "\n", - "כונן קשיח הוא אחד מהרכיבים הנמצאים בקופסת המחשב שעליו אתם עובדים כרגע.
\n", - "זהו הרכיב שמאחסן לטווח ארוך את המידע במחשב שלכם – קבצים, תוכנות, מערכת הפעלה והגדרות, כמו העדפות השפה שלכם.
\n", + "#### הכונן הקשיח\n", + "\n", + "כונן קשיח הוא אחד מהרכיבים הנמצאים בקופסת המחשב שעליו אתם עובדים כרגע.
" ] @@ -110,26 +108,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### ביט\n", - "\n", - "
\n", + "זהו הרכיב שמאחסן לטווח ארוך את המידע במחשב שלכם – קבצים, תוכנות, מערכת הפעלה והגדרות, כמו העדפות השפה שלכם.
\n", "היתרון המובהק של כוננים קשיחים הוא שהם יודעים לשמור על המידע שלכם לאורך זמן, גם כאשר הם לא מוזנים בחשמל.\n", "\n", - "כוננים קשיחים מכילים הרבה יחידות קטנטנות שכל אחת מהן נקראת \"ביט\".
\n", - "ביט הוא ערך שיכול להיות 0 או 1, כלומר כבוי או דולק.
\n", - "בכל כונן קשיח פשוט שנמכר כיום יש מקום למאות מיליארדי(!) ביטים כאלו.
\n", + "#### ביט\n", + "\n", + "כוננים קשיחים מכילים הרבה יחידות קטנטנות שכל אחת מהן נקראת \"ביט\".
\n", - "\n", - "
\n", + "ביט הוא ערך שיכול להיות 0 או 1, כלומר כבוי או דולק.
\n", + "בכל כונן קשיח פשוט שנמכר כיום יש מקום למאות מיליארדי(!) ביטים כאלו.
\n", "כך נשמר כל המידע שדיברנו עליו בפסקה הקודמת.\n", "\n", - "אם נסתכל בעיניים אנושיות על רצפי התאים הקטנטנים, הביטים, שנמצאים בכונן הקשיח, קרוב לוודאי שלא נבין מהם כלום.
\n", - "הנה דוגמה לרצף שכזה: 010000100011001100101111010100110011001000110011.
\n", + "\n", + "אם נסתכל בעיניים אנושיות על רצפי התאים הקטנטנים, הביטים, שנמצאים בכונן הקשיח, קרוב לוודאי שלא נבין מהם כלום.
\n", - "\n", - "
\n", + "הנה דוגמה לרצף שכזה: 010000100011001100101111010100110011001000110011.
\n", "איך יוצקים משמעות לתוך דבר כזה? מה רצף המספרים הזה אומר בכלל?\n", "\n", - "נדמיין לרגע שאנחנו הממציאים של המחשב, ושהמטרה שלנו היא לייצג טקסט בצורה קלה לשמירה ולקריאה לאחר מכן.
\n", + "\n", + "נדמיין לרגע שאנחנו הממציאים של המחשב, ושהמטרה שלנו היא לייצג טקסט בצורה קלה לשמירה ולקריאה לאחר מכן.
\n", - "\n", "" ] }, @@ -137,12 +131,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### ייצוג תווים\n", - "\n", - "
\n", "האם תוכלו לחשוב על דרך לעשות זאת רק באמצעות רצפים של 0 ו־1?\n", "\n", - "בעיה דומה של ייצוג טקסט באמצעות אפסים ואחדים בלבד, עלתה אי שם ב־1960.
\n", - "אחסוך לכם הרבה מעשיות בדרך, אבל מפה לשם הוחלט על תקן בשם ASCII, שקובע שכל סידור אפשרי של 8 ביטים שכאלו, שנקרא \"בייט\", ייצג תו.
\n", - "האות A קיבלה את הייצוג 01000001, האות Z, למשל, קיבלה את הייצוג 01011010, הספרה 7 את הייצוג 00110111 והתו רווח את הייצוג 00100000.
\n", + "#### ייצוג תווים\n", + "\n", + "בעיה דומה של ייצוג טקסט באמצעות אפסים ואחדים בלבד, עלתה אי שם ב־1960.
" ] @@ -151,24 +144,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### ייצוג קבצים אחרים\n", - "\n", - "
\n", + "אחסוך לכם הרבה מעשיות בדרך, אבל מפה לשם הוחלט על תקן בשם ASCII, שקובע שכל סידור אפשרי של 8 ביטים שכאלו, שנקרא \"בייט\", ייצג תו.
\n", + "האות A קיבלה את הייצוג 01000001, האות Z, למשל, קיבלה את הייצוג 01011010, הספרה 7 את הייצוג 00110111 והתו רווח את הייצוג 00100000.
\n", "כך אפשר לקרוא מסר ארוך מאוד, ולהמיר כל 8 ביטים רצופים לתו. אם ננסה לקרוא בשיטה הזו 80 ביטים, נקבל 10 תווים קריאים.\n", "\n", - "אבל רגע! מה קורה אם אני רוצה לייצג תמונה של חתול? או סרטון של חתול? או סאונד של... ובכן, חתול?
\n", - "כמו שאנשים חכמים חשבו על דרך לייצג ASCII, חכמים אחרים חשבו, עבור כל סוג של קובץ – מתמונה ועד תוכנה שרצה על המחשב, איך מייצגים אותם באמצעות ביטים.
\n", - "גם בימים אלו, אנשים מוכשרים רבים יושבים וחושבים על דרכים טובות יותר לייצג מידע בעזרת ביטים, ויוצרים עבורנו סוגי קבצים חדשים.
\n", + "#### ייצוג קבצים אחרים\n", + "\n", + "אבל רגע! מה קורה אם אני רוצה לייצג תמונה של חתול? או סרטון של חתול? או סאונד של... ובכן, חתול?
\n", - "\n", - "
\n", + "כמו שאנשים חכמים חשבו על דרך לייצג ASCII, חכמים אחרים חשבו, עבור כל סוג של קובץ – מתמונה ועד תוכנה שרצה על המחשב, איך מייצגים אותם באמצעות ביטים.
\n", + "גם בימים אלו, אנשים מוכשרים רבים יושבים וחושבים על דרכים טובות יותר לייצג מידע בעזרת ביטים, ויוצרים עבורנו סוגי קבצים חדשים.
\n", "\n", - "כשאנחנו רוצים לפתוח תמונה של חתול, למשל, אנחנו מפעילים תוכנה ייעודית שיודעת לקרוא ייצוג של תמונות.
\n", - "מה שקורה באותו רגע מאחורי הקלעים הוא שהתוכנה קוראת רצפים של 0 ו־1 מהדיסק הקשיח, אותם ביטים שדיברנו עליהם.
\n", - "מי שצילם את התמונה השתמש בתוכנה שיודעת להמיר את מה שקרה על מסך המצלמה לביטים שנשמרו על כרטיס הזיכרון שלו.
\n", - "מי שתכנת את התוכנה שמציגה לנו כרגע את החתול ידע להורות לה מה לעשות כדי לתרגם את אותם ביטים לתמונה שמוצגת לכם על המסך.
\n", - "שניהם פעלו לפי תקן מסוים (יש כמה כאלו, אולי אתם מכירים חלק מהם: JPG, PNG, GIF ועוד), שקובע דרך אחידה לייצג תמונה בעזרת ביטים.
\n", + "\n", + "כשאנחנו רוצים לפתוח תמונה של חתול, למשל, אנחנו מפעילים תוכנה ייעודית שיודעת לקרוא ייצוג של תמונות.
\n", - "\n", - "
\n", + "מה שקורה באותו רגע מאחורי הקלעים הוא שהתוכנה קוראת רצפים של 0 ו־1 מהדיסק הקשיח, אותם ביטים שדיברנו עליהם.
\n", + "מי שצילם את התמונה השתמש בתוכנה שיודעת להמיר את מה שקרה על מסך המצלמה לביטים שנשמרו על כרטיס הזיכרון שלו.
\n", + "מי שתכנת את התוכנה שמציגה לנו כרגע את החתול ידע להורות לה מה לעשות כדי לתרגם את אותם ביטים לתמונה שמוצגת לכם על המסך.
\n", + "שניהם פעלו לפי תקן מסוים (יש כמה כאלו, אולי אתם מכירים חלק מהם: JPG, PNG, GIF ועוד), שקובע דרך אחידה לייצג תמונה בעזרת ביטים.
\n", "בסופו של דבר, עבור התוכנה החתול שלכם הוא בסך הכול משבצות קטנטנות בצבעים שונים שמצוירות זו על יד זו.\n", "\n", + "
\n", " ייצוג מסוים של קובץ נקרא \"פורמט\", או בעברית \"תַּסְדִיר\".\n", "
" ] @@ -177,16 +167,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### קבצים טקסטואליים וקבצים בינאריים" + "### קבצים טקסטואליים וקבצים בינאריים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "חלק מהקבצים, כמו מסמכי טקסט או תוכניות פייתון, יכולים להיות קבצים טקסטואליים.
\n", - "ישנם סוגי קבצים טקסטואליים נוספים, כמו CSV שמייצג מידע טבלאי באמצעות טקסט, או HTML שמייצג קוד שבעזרתו המחשב יודע להציג דף אינטרנט.
\n", + "\n", + "חלק מהקבצים, כמו מסמכי טקסט או תוכניות פייתון, יכולים להיות קבצים טקסטואליים.
" ] @@ -196,8 +186,8 @@ "metadata": {}, "source": [ "" ] }, @@ -205,9 +195,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ישנם סוגי קבצים טקסטואליים נוספים, כמו CSV שמייצג מידע טבלאי באמצעות טקסט, או HTML שמייצג קוד שבעזרתו המחשב יודע להציג דף אינטרנט.
\n", "המשותף לקבצים האלו הוא שאם ממירים את הביטים שמהם הם מורכבים לתווים, מתקבלת תוצאה שנוח לבני אדם לקרוא, ולא רק למחשב.\n", "\n", - "ישנם גם סוגי קבצים אחרים שלא נועדו לקריאה על־ידי עין אנושית.
\n", - "קבצים כאלו נקראים \"קבצים בינאריים\", ונלמד לטפל בחלק מהם בשלב מתקדם יותר בקורס.
\n", + "\n", + "ישנם גם סוגי קבצים אחרים שלא נועדו לקריאה על־ידי עין אנושית.
" ] }, @@ -215,7 +205,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "קבצים כאלו נקראים \"קבצים בינאריים\", ונלמד לטפל בחלק מהם בשלב מתקדם יותר בקורס.
\n", "\n", + "
\n", " לפניכם דוגמה לכמה סוגי קבצים בינאריים:\n", "
" ] @@ -224,12 +214,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- MP3 – תסדיר המיועד עבור קובצי שמע.
\n", - "- PNG – תסדיר לייצוג תמונות.
\n", - "- PDF – תסדיר המיועד עבור תצוגה מדויקת של מסמכים.
\n", - "- XLSX – תסדיר המיועד לאחסון מידע בגיליונות אלקטרוניים (לדוגמה, בעזרת Excel).
\n", - "- EXE – תסדיר המיועד למערכת ההפעלה חלונות, ומפרט אילו פקודות יש לבצע כדי שתוכנה תרוץ.
\n", + "\n", + "
" ] }, @@ -238,8 +228,8 @@ "metadata": {}, "source": [ "" ] @@ -248,7 +238,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- MP3 – תסדיר המיועד עבור קובצי שמע.
\n", + "- PNG – תסדיר לייצוג תמונות.
\n", + "- PDF – תסדיר המיועד עבור תצוגה מדויקת של מסמכים.
\n", + "- XLSX – תסדיר המיועד לאחסון מידע בגיליונות אלקטרוניים (לדוגמה, בעזרת Excel).
\n", + "- EXE – תסדיר המיועד למערכת ההפעלה חלונות, ומפרט אילו פקודות יש לבצע כדי שתוכנה תרוץ.
\n", "\n", + "
\n", " בהמשך החוברת הזו נלמד לטפל בקבצים טקסטואליים.\n", "
" ] @@ -257,15 +247,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## טיפול בקבצים" + "## טיפול בקבצים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אם בעבר השתמשנו בפנקס כדי לשמור מלל, הרי שכיום שימוש בקבצים ממוחשבים עושה הכול לקל ומהיר.
\n", + "\n", + " אם בעבר השתמשנו בפנקס כדי לשמור מלל, הרי שכיום שימוש בקבצים ממוחשבים עושה הכול לקל ומהיר.
" ] @@ -274,9 +264,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " על קבצים ממוחשבים אפשר לבצע חישובים מסובכים בתוך חלקיק שנייה, ויתרון זה מעניק לנו יכולות שלא היו קיימות בעבר.\n", "\n", - " קבצים הם מקור מצוין לקלט ולפלט עבור התוכניות שאנחנו כותבים.
\n", - " כמקור קלט, הם יכולים לכלול שורות רבות או מידע מורכב מהרגיל.
\n", + "\n", + " קבצים הם מקור מצוין לקלט ולפלט עבור התוכניות שאנחנו כותבים.
" ] @@ -285,8 +275,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כמקור קלט, הם יכולים לכלול שורות רבות או מידע מורכב מהרגיל.
\n", " כפלט, הם מאפשרים לנו לשמור מידע בין הרצה להרצה, להעביר את המידע ממקום למקום בקלות ולייצג מידע מורכב בפשטות.\n", "\n", - "בקובץ passwords.txt שנמצא בתוך תיקיית resources, אספנו לכם את 25 הסיסמאות הנפוצות ביותר בעולם.
\n", + "\n", + "בקובץ passwords.txt שנמצא בתוך תיקיית resources, אספנו לכם את 25 הסיסמאות הנפוצות ביותר בעולם.
" ] @@ -295,17 +285,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### פתיחת קובץ" + "### פתיחת קובץ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "בתור התחלה, ננסה להציץ במה שכתוב בתוך הקובץ בעזרת פייתון. \n", "\n", - "הפונקציה
open
מאפשרת לנו לפתוח קובץ בעזרת פייתון, כדי להשתמש בו בהמשך התוכנית.
\n", - "היא מקבלת 2 פרמטרים: הראשון הוא הנתיב לקובץ, והשני הוא צורת הגישה לקובץ, שעליה מייד נסביר.
\n", - "הפונקציה מחזירה ערך שנקרא File handler, מעין מצביע על הקובץ שעליו נוכל לבצע פעולות.
\n", + "\n", + "הפונקציה
" ] }, @@ -313,13 +303,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "open
מאפשרת לנו לפתוח קובץ בעזרת פייתון, כדי להשתמש בו בהמשך התוכנית.
\n", + "היא מקבלת 2 פרמטרים: הראשון הוא הנתיב לקובץ, והשני הוא צורת הגישה לקובץ, שעליה מייד נסביר.
\n", + "הפונקציה מחזירה ערך שנקרא File handler, מעין מצביע על הקובץ שעליו נוכל לבצע פעולות.
\n", "\n", + "
\n", "צורת הגישה לקובץ תיבחר לפי המטרה שלשמה אנחנו פותחים אותו:\n", "
\n", - "\n", - "
- אם אנחנו מעוניינים לקרוא את הקובץ, צורת הגישה שנבחר תהיה 'r' – קריאה, read.
\n", - "- אם אנחנו מעוניינים לכתוב אל הקובץ ולדרוס את מה שקיים בו, צורת הגישה שנבחר תהיה 'w' – כתיבה, write.
\n", - "- אם אנחנו מעוניינים להוסיף אל הקובץ, צורת הגישה שנבחר תהיה 'a' – הוספה, append.
\n", + "\n", + "
" ] }, @@ -327,16 +317,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- אם אנחנו מעוניינים לקרוא את הקובץ, צורת הגישה שנבחר תהיה 'r' – קריאה, read.
\n", + "- אם אנחנו מעוניינים לכתוב אל הקובץ ולדרוס את מה שקיים בו, צורת הגישה שנבחר תהיה 'w' – כתיבה, write.
\n", + "- אם אנחנו מעוניינים להוסיף אל הקובץ, צורת הגישה שנבחר תהיה 'a' – הוספה, append.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -344,7 +334,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הפרמטר השני, צורת הגישה לקובץ, הוא מחרוזת.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " הפרמטר השני, צורת הגישה לקובץ, הוא מחרוזת.
\n", - "
\n", " טעות נפוצה היא לשים שם r, w או a בלי גרשיים סביב.\n", "\n", + "
\n", "נתחיל בפתיחת הקובץ, ובהשמה של ה־file handler למשתנה:\n", "
" ] @@ -362,7 +352,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כך נראה הסוג של file handler המצביע לקובץ טקסטואלי:\n", "
" ] @@ -380,15 +370,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### קריאת קובץ" + "### קריאת קובץ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "עכשיו, כשהקובץ פתוח, נוכל להשתמש בו.
\n", + "\n", + "עכשיו, כשהקובץ פתוח, נוכל להשתמש בו.
" ] @@ -407,7 +397,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נבקש מפייתון לקרוא את תוכן הקובץ באמצעות הפעולהread
, ונבצע השמה של התוכן שחזר מהפעולה, למשתנה:\n", "\n", + "
\n", "נשים לב שהערך שחזר לנו מפעולת הקריאה הוא מחרוזת לכל דבר:\n", "
" ] @@ -425,8 +415,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "זיכרו ששורות חדשות מיוצגות על ידי התו \\n, וכך גם ב־common_passwords:\n", + "
\n", + "זיכרו ששורות חדשות מיוצגות על ידי התו \\n, וכך גם ב־common_passwords:\n", "
" ] }, @@ -443,16 +433,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -460,14 +450,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הסמן" + "### הסמן" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " פתחו את הקובץ וקראו אותו בעצמכם, קבלו מהמשתמש את הסיסמה שלו, והדפיסו אם היא בין 25 הסיסמאות הנפוצות ביותר.
\n", - " בונוס: אם היא בין 25 הסיסמאות הנפוצות, החזירו את המיקום שלה ברשימה.\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " פתחו את הקובץ וקראו אותו בעצמכם, קבלו מהמשתמש את הסיסמה שלו, והדפיסו אם היא בין 25 הסיסמאות הנפוצות ביותר.
\n", - "
\n", + "בונוס: אם היא בין 25 הסיסמאות הנפוצות, החזירו את המיקום שלה ברשימה.\n", "\n", + "
\n", "אם ננסה לקרוא שוב את הקובץ, נגלה תופעה מוזרה מעט:\n", "
" ] @@ -496,8 +486,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "קריאה נוספת של הקובץ החזירה לנו הפעם שהוא ריק!
\n", + "\n", + "קריאה נוספת של הקובץ החזירה לנו הפעם שהוא ריק!
" ] @@ -506,9 +496,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "ודאי תשמחו לגלות שזו התנהגות צפויה – הכל באשמתו של הסמן.\n", "\n", - "תופתעו לדעת שאתם כבר מכירים את הרעיון של סמן!
\n", - "דמיינו שאתם פותחים מסמך לעריכה, או אפילו פותרים תרגיל במחברת.
\n", + "\n", + "תופתעו לדעת שאתם כבר מכירים את הרעיון של סמן!
" ] @@ -517,9 +507,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "דמיינו שאתם פותחים מסמך לעריכה, או אפילו פותרים תרגיל במחברת.
\n", "נסו להיזכר בקו המהבהב שמסמן לכם את המיקום של התו הבא שתכתבו.\n", "\n", - "כאשר אנחנו פותחים קובץ לקריאה בעזרת פייתון, הסמן (באנגלית: cursor) מצביע לתחילת הקובץ.
\n", - "ברגע שאתם מבקשים מפייתון לקרוא את הקובץ בעזרת הפעולהread
, היא קוראת מהמקום שבו נמצא הסמן ועד סוף הקובץ.
\n", + "\n", + "כאשר אנחנו פותחים קובץ לקריאה בעזרת פייתון, הסמן (באנגלית: cursor) מצביע לתחילת הקובץ.
" ] @@ -528,14 +518,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### seek" + "#### seek" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ברגע שאתם מבקשים מפייתון לקרוא את הקובץ בעזרת הפעולהread
, היא קוראת מהמקום שבו נמצא הסמן ועד סוף הקובץ.
\n", "בזמן הקריאה הסמן יעבור לסוף הקובץ, ולכן כשתנסו לקרוא אותו שוב – תקבלו מחרוזת ריקה.\n", "\n", + "
\n", "כדי להחזיר את הסמן לתחילת הקובץ, נשתמש בפעולה
" ] @@ -562,14 +552,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### tell" + "#### tell" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "seek
ונבקש ממנה להחזיר את הסמן כך שיצביע למקום 0 – לפני התו הראשון:\n", "\n", + "
\n", "ניתן לראות איפה הסמן נמצא באמצעות הפעולה
" ] @@ -607,7 +597,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "tell
:\n", "\n", + "
\n", "מכאן ניתן להסיק, שאם נעשה
" ] @@ -616,16 +606,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### קריאה בצורות נוספות" + "### קריאה בצורות נוספות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "seek
ונספק כארגומנט את המספר שחזר בתא האחרון, נעביר את הסמן כך שיצביע לסוף הקובץ. \n", "\n", - "לעיתים, בייחוד כאשר מדובר בקובץ גדול, נעדיף לקרוא בכל פעם רק חלק מהקובץ.
\n", - "נוכל לבחור לקרוא מספר מסוים של תווים באמצעות הפעולהread
שאנחנו כבר מכירים,
\n", + "\n", + "לעיתים, בייחוד כאשר מדובר בקובץ גדול, נעדיף לקרוא בכל פעם רק חלק מהקובץ.
" ] @@ -644,7 +634,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "נוכל לבחור לקרוא מספר מסוים של תווים באמצעות הפעולהread
שאנחנו כבר מכירים,
\n", "אלא שהפעם נעביר לה ארגומנט שיורה לה כמה תווים לקרוא:\n", "\n", + "
\n", "כדאי לזכור שהסמן יצביע עכשיו על מיקום 10, והפעלה נוספת של פעולת הקריאה תמשיך מהמקום הזה:\n", "
" ] @@ -662,8 +652,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פייתון גם מאפשרת לנו לקרוא עד סוף השורה הנוכחית, שעליה נמצא הסמן, באמצעות הפעולה
readline
.
\n", + "\n", + "פייתון גם מאפשרת לנו לקרוא עד סוף השורה הנוכחית, שעליה נמצא הסמן, באמצעות הפעולה
" ] @@ -682,8 +672,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "readline
.
\n", "שימו לב שהשורה תסתיים בתווים המייצגים שורה חדשה:\n", "\n", - "לקריאת כל השורות בקובץ, ניתן להשתמש בפעולה
readlines
, שתחזיר לנו רשימת מחרוזות.
\n", + "\n", + "לקריאת כל השורות בקובץ, ניתן להשתמש בפעולה
" ] @@ -708,16 +698,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "readlines
, שתחזיר לנו רשימת מחרוזות.
\n", "כל מחרוזת ברשימה מייצגת שורה אחת בקובץ:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -725,17 +715,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סגירת קובץ" + "### סגירת קובץ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו פונקציה שמקבלת נתיב לקובץ, ומחזירה רשימה שבה כל איבר הוא שורה בקובץ.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כתבו פונקציה שמקבלת נתיב לקובץ, ומחזירה רשימה שבה כל איבר הוא שורה בקובץ.
\n", - "
\n", " בניגוד לפעולהreadlines
, דאגו שהמחרוזות ברשימה לא יסתיימו בתו שמייצג ירידת שורה.\n", "\n", - "חשבתם שהשארת דלת פתוחה נחשבת גסות רוח? נראה שעדיין לא שמעתם מה מתכנתים חושבים על קבצים שנשארים פתוחים.
\n", - "כיוון שחשוב לנו להיות מנומסים, אנחנו נסגור קבצים לאחר שסיימנו להשתמש בהם.
\n", - "קובץ פתוח תופס משאבי מערכת (כמו זיכרון), ולעיתים יגרום לכך שתוכנות אחרות לא יוכלו לגשת אליו.
\n", + "\n", + "חשבתם שהשארת דלת פתוחה נחשבת גסות רוח? נראה שעדיין לא שמעתם מה מתכנתים חושבים על קבצים שנשארים פתוחים.
" ] @@ -744,7 +734,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כיוון שחשוב לנו להיות מנומסים, אנחנו נסגור קבצים לאחר שסיימנו להשתמש בהם.
\n", + "קובץ פתוח תופס משאבי מערכת (כמו זיכרון), ולעיתים יגרום לכך שתוכנות אחרות לא יוכלו לגשת אליו.
\n", "השארת קבצים פתוחים היא מנהג מגונה שיגרום להאטה בביצועים ואפילו לקריסות בלתי צפויות, אם יותר מדי file handlers פתוחים.\n", "\n", + "
\n", "לא מדובר בפעולה מסובכת מדי. כל מה שתצטרכו לעשות הוא להשתמש בפעולה
" ] @@ -762,7 +752,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "close
:\n", "\n", + "
\n", "שימו לב שכל ניסיון לעשות שימוש בקובץ אחרי סגירתו, ייכשל:\n", "
" ] @@ -780,14 +770,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### כתיבה לקובץ" + "### כתיבה לקובץ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נסתכל שוב על המידע שראינו בתרגיל על הפוקימונים:\n", "
" ] @@ -826,8 +816,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "הפעם נכתוב אותו לתוך קובץ בתסדיר CSV.
\n", + "\n", + "הפעם נכתוב אותו לתוך קובץ בתסדיר CSV.
" ] @@ -836,15 +826,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "כדי לכתוב לקובץ נשתמש בפעולהwrite
, לאחר שנפתח את הקובץ במצב כתיבה (w).\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -852,16 +842,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זהירות! פתיחת קובץ קיים במצב w תמחק את התוכן שלו מיידית.\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "זהירות! פתיחת קובץ קיים במצב w תמחק את התוכן שלו מיידית.\n", "
\n", - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -890,7 +880,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אם פתחנו קובץ לכתיבה והנתיב אליו לא קיים במערכת שלנו, פייתון תבדוק אם התיקייה שמעליו קיימת.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " אם פתחנו קובץ לכתיבה והנתיב אליו לא קיים במערכת שלנו, פייתון תבדוק אם התיקייה שמעליו קיימת.
\n", - "
\n", " אם כן – פייתון תיצור את הקובץ בשבילנו.\n", "\n", + "
\n", "המספר שפייתון מחזירה הוא כמות התווים שייכתבו לקובץ.\n", "
" ] @@ -899,9 +889,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אם תחפשו את הקובץ במחשב ותפתחו אותו, תגלו שפייתון עדיין לא כתבה אליו את הנתונים.
\n", - "פייתון שומרת את הנתונים שביקשתם לכתוב בצד במנגנון זיכרון זמני שנקרא buffer (\"מִכְלָא\" בעברית, תודה ששאלתם), ותכתוב אותם לקובץ כשתסגרו אותו.
\n", + "\n", + "אם תחפשו את הקובץ במחשב ותפתחו אותו, תגלו שפייתון עדיין לא כתבה אליו את הנתונים.
" ] @@ -919,7 +909,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "פייתון שומרת את הנתונים שביקשתם לכתוב בצד במנגנון זיכרון זמני שנקרא buffer (\"מִכְלָא\" בעברית, תודה ששאלתם), ותכתוב אותם לקובץ כשתסגרו אותו.
\n", "תוכלו להכריח את פייתון לכתוב לקובץ עוד לפני שסגרתם אותו באמצעות הפעולהflush
:\n", "\n", + "
\n", "לסיום, לא נשכח לסגור את הקובץ כשאנחנו יודעים שכבר לא נשתמש בו:\n", "
" ] @@ -937,17 +927,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -964,15 +954,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הוספה לקובץ" + "### הוספה לקובץ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כשאתם בתוך המחברת, ניתן להשתמש בסימן קריאה כדי להריץ פקודות או תוכניות שלא קשורות לפייתון.
\n", - " לדוגמה, הפקודה:!pokemon.csv
תריץ את הקובץ שכתבנו.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כשאתם בתוך המחברת, ניתן להשתמש בסימן קריאה כדי להריץ פקודות או תוכניות שלא קשורות לפייתון.
\n", - "
\n", + " לדוגמה, הפקודה:!pokemon.csv
תריץ את הקובץ שכתבנו.
\n", " שימו לב שלא תוכלו להריץ שום דבר אחר במחברת עד שתסגרו את הקובץ.\n", "\n", - "ניתן לפתוח קובץ במצב 'w' אם נרצה לכתוב לקובץ חדש, או לדרוס קובץ קיים.
\n", + "\n", + "ניתן לפתוח קובץ במצב 'w' אם נרצה לכתוב לקובץ חדש, או לדרוס קובץ קיים.
" ] @@ -981,7 +971,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אם נרצה להוסיף שורות לקובץ קיים, נפתח את הקובץ במצב ההוספה 'a', שמסמן append.\n", "\n", + "
\n", "נוסיף את פוקימון מספר 20, רטיקייט, לקובץ הפוקימונים:\n", "
" ] @@ -1008,7 +998,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "הוספת תוכן לקובץ במצב הוספה תתבצע באמצעות הפעולה
" ] @@ -1035,16 +1025,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## with" + "## with" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "write
, בדיוק כמו בכתיבת קובץ חדש:\n", "\n", - "מילת המפתח
with
מאפשרת לנו לאגד כמה שורות באותו הקשר.
\n", - "בהקשר של קבצים, היא מאפשרת לנו לאגד תחתיה שורות שמטרתן טיפול בקובץ מסוים.
\n", + "\n", + "מילת המפתח
" ] @@ -1067,7 +1057,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "with
מאפשרת לנו לאגד כמה שורות באותו הקשר.
\n", + "בהקשר של קבצים, היא מאפשרת לנו לאגד תחתיה שורות שמטרתן טיפול בקובץ מסוים.
\n", "לדוגמה, השורות הבאות:\n", "\n", + "
\n", " יכולה להיכתב אחרת בעזרת מילת המפתח
" ] @@ -1089,7 +1079,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "with
:\n", "\n", + "
\n", " שימו לב לצורת השימוש ב־
" ] @@ -1098,13 +1088,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "with
:\n", "\n", - "
- כתבנו את מילת המפתח
\n", - "with
.- מייד לאחר מכן השתמשנו בפונקציה
\n", - "open
כדי לפתוח את הקובץ עם הארגומנטים שרצינו.- השתמשנו במילת המפתח
\n", - "as
.- הכנסנו את שם המשתנה שרצינו שבו ישמר ה־file handler.
\n", - "- כתבנו נקודתיים כדי לסיים את השורה.
\n", - "- השתמשנו בהזחה, ואז כתבנו את הפעולות שאנחנו רוצים לעשות בהקשר לקובץ.
\n", + "\n", + "
" ] }, @@ -1112,8 +1102,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- כתבנו את מילת המפתח
\n", + "with
.- מייד לאחר מכן השתמשנו בפונקציה
\n", + "open
כדי לפתוח את הקובץ עם הארגומנטים שרצינו.- השתמשנו במילת המפתח
\n", + "as
.- הכנסנו את שם המשתנה שרצינו שבו ישמר ה־file handler.
\n", + "- כתבנו נקודתיים כדי לסיים את השורה.
\n", + "- השתמשנו בהזחה, ואז כתבנו את הפעולות שאנחנו רוצים לעשות בהקשר לקובץ.
\n", "\n", - " בתור מתכנתים, אתם בוחרים איך לכתוב את הקוד שלכם.
\n", + "\n", + " בתור מתכנתים, אתם בוחרים איך לכתוב את הקוד שלכם.
" ] @@ -1122,8 +1112,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ובכל זאת, קל לראות את היתרונות של שימוש ב־with
: הקוד נעשה קריא ומסודר יותר, והקובץ נסגר לבד כשמסתיימת ההזחה.\n", "\n", - " כתיבת קוד עם
with
היא פשוטה יותר ממה שנראה בהתחלה –
\n", + "\n", + " כתיבת קוד עם
" ] @@ -1132,14 +1122,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מונחים" + "## מונחים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "with
היא פשוטה יותר ממה שנראה בהתחלה –
\n", " 5 הסעיפים הראשונים התייחסו לשורה הראשונה, ששקולה לשורה הראשונה והרביעית בקוד בלי ה־with
.\n", "\n", + "
\n", "
- קובץ טקסטואלי
- קובץ שאפשר להמיר את הבייטים שבו לתווים, ומקבלים קובץ שקריא עבור בני אדם.
\n", "- קובץ בינארי
- קובץ שהתוכן שלו לא נועד לקריאה על־ידי עין אנושית.
\n", "- סמן
- מצביע על המיקום הנוכחי בקובץ, שממנו יתבצעו הפעולות (קריאה, כתיבה וכדומה).
\n", @@ -1153,24 +1143,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגולים" + "## תרגולים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### מי דגנים בריאים?" + "### מי דגנים בריאים?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בקובץ cereal.csv שנמצא בתיקיית resources, ישנו מידע תזונתי על מִדְגַּנִּים שונים (יענו, דגני בוקר).
\n", - " ככל שהמדגנים שמופיעים בשורה מסוימת בריאים יותר, כך המספר שמופיע לידם בעמודה rating גבוה יותר.
\n", - " מצאו את המדגנים הבריאים ביותר והדפיסו את שמם לצד הציון שקיבלו.
\n", + "\n", + " בקובץ cereal.csv שנמצא בתיקיית resources, ישנו מידע תזונתי על מִדְגַּנִּים שונים (יענו, דגני בוקר).
" ] @@ -1179,15 +1169,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### תקווה מארחת" + "### תקווה מארחת" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " ככל שהמדגנים שמופיעים בשורה מסוימת בריאים יותר, כך המספר שמופיע לידם בעמודה rating גבוה יותר.
\n", + " מצאו את המדגנים הבריאים ביותר והדפיסו את שמם לצד הציון שקיבלו.
\n", " קרדיט: את הקובץ הבאנו מכאן.\n", "\n", - "בקובץ hope.txt שנמצא בתיקיית resources, נמצאת אחת הפואמות המהממות של אמילי דיקנסון, תִּקְוָה הִיא בַּעֲלַת-הַנוֹצָה.
\n", + "\n", + "בקובץ hope.txt שנמצא בתיקיית resources, נמצאת אחת הפואמות המהממות של אמילי דיקנסון, תִּקְוָה הִיא בַּעֲלַת-הַנוֹצָה.
" ] @@ -1196,7 +1186,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אך אבוי! הפואמה התבלגנה, וכעת סדר המילים בכל שורה הוא הפוך.\n", "\n", + "
\n", "במקום:\n", "
" ] @@ -1205,8 +1195,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תִּקְוָה הִיא בַּעֲלַת-הַנוֹצָה
\n", + "\n", + " תִּקְוָה הִיא בַּעֲלַת-הַנוֹצָה" ] @@ -1215,7 +1205,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " זוּ בַּנְּשָׁמָה תִשְׁכֹּן –\n", "\n", + "
\n", "מופיע:\n", "
" ] @@ -1224,8 +1214,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בַּעֲלַת-הַנוֹצָה הִיא תִּקְוָה
\n", + "\n", + " בַּעֲלַת-הַנוֹצָה הִיא תִּקְוָה" ] @@ -1234,8 +1224,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " – תִשְׁכֹּן בַּנְּשָׁמָה זוּ\n", "\n", - "שמרו גיבוי של הקובץ, וכתבו קוד שמסדר את הפואמה המבולגנת.
\n", + "\n", + "שמרו גיבוי של הקובץ, וכתבו קוד שמסדר את הפואמה המבולגנת.
" ] @@ -1244,16 +1234,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "שמרו את הפואמה המסודרת בקובץ חדש ששמו hope2.txt.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] } diff --git a/week3/4_List_Methods.ipynb b/week3/4_List_Methods.ipynb index 9601cd4..5a5809c 100644 --- a/week3/4_List_Methods.ipynb +++ b/week3/4_List_Methods.ipynb @@ -4,30 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# פעולות על רשימות" + "# פעולות על רשימות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זהירות! יש פה בעיה שלא למדנו איך לתקן.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "זהירות! יש פה בעיה שלא למדנו איך לתקן.
\n", - "
\n", " התרגיל בודק גם מה הבנתם מהשיעור על משאבים ברשת בשבוע שעבר :)\n", "\n", - " עד כה למדנו שישנם שני אופרטורים חשבוניים שעובדים על רשימות: חיבור וכפל.
\n", - " חיבור משרשר רשימה אחת לאחרת, וכפל משרשר רשימה לעצמה כמה פעמים.
\n", + "\n", + " עד כה למדנו שישנם שני אופרטורים חשבוניים שעובדים על רשימות: חיבור וכפל.
" ] @@ -65,7 +65,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " חיבור משרשר רשימה אחת לאחרת, וכפל משרשר רשימה לעצמה כמה פעמים.
\n", " ניזכר בדוגמאות:\n", "\n", + "
\n", " למדנו גם שאפשר להשוות בין רשימות בעזרת אופרטורי השוואה, שעליהם למדנו בשיעור על ביטויים בוליאניים.\n", "
" ] @@ -101,7 +101,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " השבוע כבר הספקנו ללמוד על חיתוכים (Slicing), כך שיש לנו כבר ידע רב באשר לשימוש ברשימות.\n", "
" ] @@ -122,8 +122,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " למרות כל הידע המועיל שצברנו עד כה, טרם נגענו בפעולות השייכות לנתונים מסוג רשימה.
\n", + "\n", + " למרות כל הידע המועיל שצברנו עד כה, טרם נגענו בפעולות השייכות לנתונים מסוג רשימה.
" ] @@ -132,14 +132,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## פעולות על רשימה" + "## פעולות על רשימה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הפעולות האלו יתווספו לארגז הכלים שלנו, יקלו על כתיבת הקוד ויעשו אותו קריא יותר.\n", "\n", + "
\n", "נגדיר רשימה שתשמש אותנו לדוגמאות:\n", "
" ] @@ -157,8 +157,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "במהלך הרצת הדוגמאות נשים לב שפעולות על הרשימה משפיעות ישירות על הרשימה עצמה.
\n", + "\n", + "במהלך הרצת הדוגמאות נשים לב שפעולות על הרשימה משפיעות ישירות על הרשימה עצמה.
" ] @@ -167,15 +167,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הוספת איבר" + "### הוספת איבר" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "זה אומר שלא נצטרך להשתמש בהשמה כדי לערוך את הרשימה שעליה אנחנו עובדים.\n", "\n", - "רשימה היא סוג נתונים נוח לשימוש, בין היתר כיוון שניתן להוסיף לה כמה איברים שנרצה.
\n", + "\n", + "רשימה היא סוג נתונים נוח לשימוש, בין היתר כיוון שניתן להוסיף לה כמה איברים שנרצה.
" ] @@ -194,7 +194,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נוכל להוסיף איבר לסוף הרשימה באמצעות הפעולהappend
:\n", "\n", + "
\n", "הפעולה הזו תשיג תוצאה דומה לקוד שכתבנו עד היום בדרך טיפה פחות אלגנטית:\n", "
" ] @@ -213,8 +213,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "שימו לב שבניגוד לשורה שמופיעה למעלה,
append
מאפשרת להוסיף בכל פעם איבר אחד בלבד.
\n", + "\n", + "שימו לב שבניגוד לשורה שמופיעה למעלה,
" ] @@ -233,15 +233,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "append
מאפשרת להוסיף בכל פעם איבר אחד בלבד.
\n", "ניסיון להעביר לפעולהappend
רשימה, נניח, יוסיף את הרשימה המשנית כולה כאיבר אחד בסוף הרשימה הראשית:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -249,14 +249,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הסרת איבר" + "### הסרת איבר" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " כתבו פונקציה שמקבלת מספר, ומחזירה רשימה של כל המספרים החיוביים הזוגיים עד אותו מספר.\n", "
\n", - "\n", + "
\n", "נוכל להסיר איבר מסוף הרשימה באמצעות קריאה לפעולה
" ] @@ -275,7 +275,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "pop
:\n", "\n", + "
\n", "הפעולה הזו תשיג תוצאה דומה לקוד שכתבנו עד היום בצורה המסורבלת הבאה:\n", "
" ] @@ -294,7 +294,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "הפעולה
" ] @@ -314,8 +314,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "pop
מחזירה את הערך שהוציאה, כך שניתן לשמור אותו בצד:\n", "\n", - "הפעולה גם מאפשרת לנו לבחור את המקום שממנו אנחנו מעוניינים להוציא את הערך.
\n", + "\n", + "הפעולה גם מאפשרת לנו לבחור את המקום שממנו אנחנו מעוניינים להוציא את הערך.
" ] @@ -335,7 +335,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נעשה זאת בעזרת העברת ארגומנט עם מיקום הערך שאנחנו רוצים להוציא מהרשימה:\n", "\n", + "
\n", "כדי להסיר יותר מאיבר אחד, ייתכן שעדיין תעדיפו להשתמש בחיתוך רשימות.\n", "
" ] @@ -344,17 +344,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -362,14 +362,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הוספה של כמה איברים" + "### הוספה של כמה איברים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה בסדר איברים הפוך.
\n", - " השתמשו בפעולהpop
.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה בסדר איברים הפוך.
\n", - "
\n", + " השתמשו בפעולהpop
.
\n", " לדוגמה: אם תועבר לפונקציה הרשימה[3, 2, 1]
, הפונקציה תחזיר[1, 2, 3]
.\n", "\n", + "
\n", "נוכל להוסיף יותר מאיבר אחד בשימוש יחיד בפעולה
" ] @@ -389,7 +389,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "extend
:\n", "\n", + "
\n", "במבט ראשון, הפעולה תשיג תוצאה דומה לשרשור רשימות:\n", "
" ] @@ -409,8 +409,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אבל אחד היתרונות המובהקים של
extend
הוא שניתן להעביר לה כארגומנט כל iterable שהוא.
\n", + "\n", + "אבל אחד היתרונות המובהקים של
" ] @@ -431,16 +431,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "extend
הוא שניתן להעביר לה כארגומנט כל iterable שהוא.
\n", "הפעולהextend
תפרק את ה־iterable ותוסיף כל איבר בנפרד לרשימה המקורית: \n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -448,15 +448,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### ספירת איברים" + "### ספירת איברים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה המכילה את הרשימה המקורית, ומייד אחריה את אותה רשימה בסדר הפוך.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה המכילה את הרשימה המקורית, ומייד אחריה את אותה רשימה בסדר הפוך.
\n", - "
\n", " לדוגמה: עבור הרשימה[1, 2, 3]
תוחזר הרשימה:[1, 2, 3, 3, 2, 1]
\n", - "\n", - "כאן לא תמצאו הפתעות מיוחדות. הפעולה
count
מחזירה את מספר האיברים ברשימה, שזהים לאיבר שהעברתם לה כארגומנט.
\n", + "\n", + "כאן לא תמצאו הפתעות מיוחדות. הפעולה
" ] @@ -476,16 +476,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מציאת איבר" + "### מציאת איבר" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "count
מחזירה את מספר האיברים ברשימה, שזהים לאיבר שהעברתם לה כארגומנט.
\n", "נשמע לכם מוכר? נכון! למחרוזות יש פעולה עם שם זהה שעושה בדיוק אותו דבר.\n", "\n", - "גם הפעולה הזו אמורה להישמע לכם מוכרת.
\n", - "הפעולהindex
מוצאת את המופע הראשון של האיבר שהעברתם לה כארגומנט.
\n", + "\n", + "גם הפעולה הזו אמורה להישמע לכם מוכרת.
" ] @@ -505,15 +505,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "הפעולהindex
מוצאת את המופע הראשון של האיבר שהעברתם לה כארגומנט.
\n", "כן, גם הפעם למחרוזות יש פעולה באותו שם, שעושה בדיוק אותו דבר.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -521,16 +521,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " כמו בפעולת
\n", - "index
על מחרוזות, גם כאן הפעולה תזרוק שגיאה אם הערך לא נמצא.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -538,15 +538,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מחיקת איבר (שוב?)" + "### מחיקת איבר (שוב?)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו פונקציה שמקבלת רשימה, ומחזירה את מיקום המופע האחרון של האיבר הראשון ברשימה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כתבו פונקציה שמקבלת רשימה, ומחזירה את מיקום המופע האחרון של האיבר הראשון ברשימה.
\n", - "
\n", " לדוגמה, עבור הרשימה[1, 2, 3, 5, 1, 2]
החזירו 4, כיוון ש־1 מופיע פעם אחרונה במקום 4 ברשימה.\n", "\n", - "הפעם נשתמש בפעולה
remove
, שבניגוד לפעולהpop
מוחקת איבר לפי הערך שלו ולא לפי המיקום שלו.
\n", + "\n", + "הפעם נשתמש בפעולה
" ] @@ -567,16 +567,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "remove
, שבניגוד לפעולהpop
מוחקת איבר לפי הערך שלו ולא לפי המיקום שלו.
\n", "נשים לב שהפעולה תמחק את האיבר הראשון השווה לערך שהועבר כארגומנט, ולא את כל המופעים של אותו ערך.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -584,17 +584,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סידור רשימה" + "### סידור רשימה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " קבלו פונקציה שמקבלת רשימה של חיות, ומחזירה רשימה שבה אין מופעים של החיות camel, rabbit ו־pig.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " קבלו פונקציה שמקבלת רשימה של חיות, ומחזירה רשימה שבה אין מופעים של החיות camel, rabbit ו־pig.
\n", - "
\n", " לדוגמה, עבור הרשימה:['camel', 'camel', 'dove', 'pig', 'camel']
תוחזר הרשימה:['dove']
\n", - "\n", - "אחת הפעולות הנוחות ביותר שאפשר לבצע על רשימה היא
sort
, שמסדרת לנו את האיברים ברשימה.
\n", - "אם האיברים הם מחרוזות, הרשימה תסודר בסדר לקסיקוגרפי (אלפביתי).
\n", - "אם האיברים ברשימה הם מספרים (שלמים, עשרוניים או גם וגם), הרשימה תסודר מתמטית מהקטן לגדול.
\n", + "\n", + "אחת הפעולות הנוחות ביותר שאפשר לבצע על רשימה היא
" ] @@ -624,16 +624,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "sort
, שמסדרת לנו את האיברים ברשימה.
\n", + "אם האיברים הם מחרוזות, הרשימה תסודר בסדר לקסיקוגרפי (אלפביתי).
\n", + "אם האיברים ברשימה הם מספרים (שלמים, עשרוניים או גם וגם), הרשימה תסודר מתמטית מהקטן לגדול.
\n", "אם הרשימה מורכבת מסוגים שונים של איברים שאין ביניהם הגדרת שוויון ברורה (כמו מספרים ומחרוזות), פעולת הסידור תיכשל ותזרוק שגיאה.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -641,17 +641,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " טעות נפוצה היא השמת התוצאה של
sort
חזרה למשתנה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " טעות נפוצה היא השמת התוצאה של
\n", - "sort
חזרה למשתנה.
\n", " כיוון שהפעולהsort
משנה את מיקום האיברים בתוך הרשימה ולא מחזירה ערך, השמה חזרה למשתנה תמחק את ערכו.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -659,24 +659,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הוספת איבר במקום מסוים" + "### הוספת איבר במקום מסוים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תרגול:\n", - " קבלו מהמשתמש 10 מספרים. מצאו את הערך השלישי הגדול ביותר.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " קבלו מהמשתמש 10 מספרים. מצאו את הערך השלישי הגדול ביותר.
\n", - "
\n", " לדוגמה, עבור הקלט הבא:5, 1, 6, 2, 3, 4, 8, 7, 10, 9
, החזירו 8.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -684,22 +684,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים נוספים" + "## תרגילים נוספים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### חוטש" + "### חוטש" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תרגול:\n", - " קראו בתיעוד של פייתון על הפעולה
insert
השייכת לערכים מסוג רשימה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " קראו בתיעוד של פייתון על הפעולה
\n", - "insert
השייכת לערכים מסוג רשימה.
\n", " הוסיפו דג מימין לכריש (shark) שברשימת animals.\n", "\n", - " כתבו פונקציה שמקבלת רשימה של רשימות, ומחזירה רשימה שטוחה והפוכה של כל האיברים.
\n", + "\n", + " כתבו פונקציה שמקבלת רשימה של רשימות, ומחזירה רשימה שטוחה והפוכה של כל האיברים.
" ] @@ -708,15 +708,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### רשימת תיקונים" + "### רשימת תיקונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " לדוגמה: עבור הרשימה[[1, 2, 3], [4, 5, 6]]
החזירו[6, 5, 4, 3, 2, 1]
.\n", "\n", - " לפניכם קוד שמטרתו היא מציאת המספר הקטן ביותר שהמשתמש הזין.
\n", + "\n", + " לפניכם קוד שמטרתו היא מציאת המספר הקטן ביותר שהמשתמש הזין.
" ] diff --git a/week3/5_Mutability_and_Tuples.ipynb b/week3/5_Mutability_and_Tuples.ipynb index 23a41f0..152f58e 100644 --- a/week3/5_Mutability_and_Tuples.ipynb +++ b/week3/5_Mutability_and_Tuples.ipynb @@ -4,31 +4,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Mutability" + "# Mutability" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הגדרה" + "## הגדרה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הכמנו בקוד 3 טעויות. מצאו אותן ותקנו אותן כך שהקוד יפעל.\n", "\n", - "המילה Mutable נגזרת מהמילה Mutate, והמשמעות שלה היא \"משהו בר־שינוי\".
\n", - "אנחנו נשתמש בה כדי לתאר טיפוסי נתונים שניתן לשנותם, למשל להוסיף או להחסיר מהם איברים.
\n", - "משמעות המילה Immutable היא \"משהו שאינו בר־שינוי\", נתון שאמור להישאר קבוע אחרי יצירתו.
\n", + "\n", + "המילה Mutable נגזרת מהמילה Mutate, והמשמעות שלה היא \"משהו בר־שינוי\".
" ] @@ -37,11 +37,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אנחנו נשתמש בה כדי לתאר טיפוסי נתונים שניתן לשנותם, למשל להוסיף או להחסיר מהם איברים.
\n", + "משמעות המילה Immutable היא \"משהו שאינו בר־שינוי\", נתון שאמור להישאר קבוע אחרי יצירתו.
\n", "שינוי ערך שהוא Immutable משנה את המהות שלו, ויגרום לו להיחשב ערך אחר לגמרי.\n", "\n", - "נדמיין ארנק שבתוכו שטרות – ניתן להוסיף אליו שטרות או להוציא ממנו שטרות, אבל הארנק יישאר אותו ארנק.
\n", - "כיוון שניתן לשנות את המצב של הארנק בלי לפגוע במהות שלו, ניתן להגיד שארנק הוא Mutable.
\n", - "לעומת זאת, אם אקח את אחד השטרות שנמצאים בתוך הארנק, לא אוכל לשנות בו משהו בלי שאשנה את המהות שלו.
\n", - "שינוי באחד המאפיינים של השטר, כמו המספר שכתוב עליו, יגרור שינוי מהותי שיהפוך אותו לדבר אחר לחלוטין.
\n", + "\n", + "נדמיין ארנק שבתוכו שטרות – ניתן להוסיף אליו שטרות או להוציא ממנו שטרות, אבל הארנק יישאר אותו ארנק.
" ] @@ -50,8 +50,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כיוון שניתן לשנות את המצב של הארנק בלי לפגוע במהות שלו, ניתן להגיד שארנק הוא Mutable.
\n", + "לעומת זאת, אם אקח את אחד השטרות שנמצאים בתוך הארנק, לא אוכל לשנות בו משהו בלי שאשנה את המהות שלו.
\n", + "שינוי באחד המאפיינים של השטר, כמו המספר שכתוב עליו, יגרור שינוי מהותי שיהפוך אותו לדבר אחר לחלוטין.
\n", "ניתן להגיד שהשטר הוא Immutable, בלתי ניתן לשינוי.\n", "\n", - "הערכים ה־Mutable שנכיר בקורס הם מעין \"מכולות\" שמכילות ערכים אחרים.
\n", + "\n", + "הערכים ה־Mutable שנכיר בקורס הם מעין \"מכולות\" שמכילות ערכים אחרים.
" ] @@ -60,21 +60,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## כתובות של ערכים" + "## כתובות של ערכים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### ערכים" + "### ערכים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "כרגע אנו מכירים סוג ערך אחד שהוא Mutable – רשימה.\n", "\n", + "
\n", "כדי להבין טוב יותר את הנושא, נעצור לרגע כדי להבין איך ערכים עובדים מאחורי הקלעים בפייתון.\n", "
" ] @@ -83,9 +83,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כשאנחנו יוצרים ערך כלשהו, פייתון מקצה עבורו מקום בזיכרון המחשב ושומרת שם את הערך.
\n", - "מאותו רגע לאותו ערך יש כתובת, שהיא מספר שמייצג את המקום שבו אותו ערך נמצא בזיכרון המחשב.
\n", + "\n", + "כשאנחנו יוצרים ערך כלשהו, פייתון מקצה עבורו מקום בזיכרון המחשב ושומרת שם את הערך.
" ] @@ -103,9 +103,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "מאותו רגע לאותו ערך יש כתובת, שהיא מספר שמייצג את המקום שבו אותו ערך נמצא בזיכרון המחשב.
\n", "כתובת הערך נשארת זהה מרגע שהוא נוצר ועד סוף חייו.\n", "\n", - "בשורה למעלה הגדרנו את הערך 9,876,543.
\n", - "אף על פי שלא עשינו עליו פעולה מתוחכמת ולא שמרנו אותו במשתנה, פייתון תשמור את הערך הזה בזיכרון המחשב.
\n", + "\n", + "בשורה למעלה הגדרנו את הערך 9,876,543.
" ] @@ -114,8 +114,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אף על פי שלא עשינו עליו פעולה מתוחכמת ולא שמרנו אותו במשתנה, פייתון תשמור את הערך הזה בזיכרון המחשב.
\n", "לערך 9,876,543 יש כתובת עכשיו.\n", "\n", - "בשורה הבאה \"נקשור\" את השם name לכתובת של הערך המספרי 12,345.
\n", + "\n", + "בשורה הבאה \"נקשור\" את השם name לכתובת של הערך המספרי 12,345.
" ] @@ -133,7 +133,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "המשתנה name לא באמת \"מכיל\" את הערך 12,345, אלא רק מצביע על הכתובת שבה הערך 12,345 מאוחסן.\n", "\n", + "
\n", "כשאנחנו מבצעים השמה, אנחנו יוצרים קישור בין שם המשתנה לבין הכתובת של הערך שהשמנו לתוכו.\n", "
" ] @@ -142,13 +142,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אם ניזכר בדימוי הלייזר מהשיעורים הקודמים, עבור כל פעולת השמה בתוכנית, פייתון: \n", "
\n", - "\n", - "\n", - "
\n", - "- תיצור מצביע לייזר חדש שעליו מודבק שם המשתנה.
\n", - "- תגרום ללייזר להצביע על המקום בזיכרון שבו מאוחסן הערך המדובר.
\n", + "\n", + "
" ] }, @@ -156,16 +155,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### בדיקת כתובת של ערכים" + "### בדיקת כתובת של ערכים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- תיצור מצביע לייזר חדש שעליו מודבק שם המשתנה.
\n", + "- תגרום ללייזר להצביע על המקום בזיכרון שבו מאוחסן הערך המדובר.
\n", "\n", - "הפונקציה
id
מקבלת כארגומנט ערך, ומחזירה מספר שמייצג את הכתובת שלו – המיקום של הערך בזיכרון.
\n", - "בהקבלה למטאפורת הלייזר, היא מקבלת את ראש הלייזר ומראה לנו לאן הוא מצביע.
\n", + "\n", + "הפונקציה
" ] @@ -186,8 +185,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "id
מקבלת כארגומנט ערך, ומחזירה מספר שמייצג את הכתובת שלו – המיקום של הערך בזיכרון.
\n", + "בהקבלה למטאפורת הלייזר, היא מקבלת את ראש הלייזר ומראה לנו לאן הוא מצביע.
\n", "נראה דוגמה:\n", "\n", - "בדוגמה האחרונה ניתן לראות ששם המשתנה לא משפיע על המיקום שבו הערכים נשמרים.
\n", + "\n", + "בדוגמה האחרונה ניתן לראות ששם המשתנה לא משפיע על המיקום שבו הערכים נשמרים.
" ] @@ -208,16 +207,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "לערכים שונים מוקצות כתובות שונות.\n", "\n", - "בדוגמה הגדלנו את ערך המשתנה number מ־100,000 ל־100,001.
\n", + "\n", + "בדוגמה הגדלנו את ערך המשתנה number מ־100,000 ל־100,001.
\n", - "
\n", "חשוב לזכור שההגדלה מ־100,000 ל־100,001 לא באמת שינתה את הערך השמור במשתנה, אלא גרמה למשתנה להצביע לכתובת אחרת של ערך אחר.\n", "\n", - "בשורה הראשונה ביקשנו מ־number להצביע לערך 100,000, ולכן כשהרצנו את
id(number)
קיבלנו את הכתובת של הערך 100,000.
\n", + "\n", + "בשורה הראשונה ביקשנו מ־number להצביע לערך 100,000, ולכן כשהרצנו את
\n", - "id(number)
קיבלנו את הכתובת של הערך 100,000.
\n", "בשורה השנייה ביקשנו מ־number להצביע לערך 100,001, ולכן כשהרצנו אתid(number)
קיבלנו את הכתובת של הערך 100,001.\n", "\n", - " עבור שתי השורות הראשונות מודפסת הכתובת של הערך הראשון שיצרנו, 100,000.
\n", + "\n", + " עבור שתי השורות הראשונות מודפסת הכתובת של הערך הראשון שיצרנו, 100,000.
" ] @@ -226,7 +225,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " עבור שתי השורות האחרונות מודפסת הכתובת של הערך השני שיצרנו, 100,001.\n", "\n", + "
\n", "חשוב לדעת שהתייחסות לאותו ערך פעם נוספת עשויה ליצור מופע חדש שלו, שיאוחסן בכתובת אחרת:\n", "
" ] @@ -246,7 +245,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אבל השמה של משתנה אחד למשתנה אחר תגרום לכך ששני המשתנים יפנו לאותה כתובת:\n", "
" ] @@ -266,8 +265,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ניתן לדמיין את המצב האחרון כמו שני ראשי לייזר שמצביעים לאותה כתובת בזיכרון המחשב.
\n", + "\n", + "ניתן לדמיין את המצב האחרון כמו שני ראשי לייזר שמצביעים לאותה כתובת בזיכרון המחשב.
" ] }, @@ -275,15 +274,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### רשימה" + "#### רשימה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", - "נבדוק אם שינוי של ערך שנמצא בתוך הרשימה יגרום לפייתון לבנות רשימה חדשה.
\n", + "\n", + "נבדוק אם שינוי של ערך שנמצא בתוך הרשימה יגרום לפייתון לבנות רשימה חדשה.
" ] @@ -304,9 +303,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אם פייתון תבנה רשימה חדשה אחרי שינוי הערך, נוכל לראות זאת בקלות לפי השינוי במיקום של הרשימה בזיכרון.\n", "\n", - "בדוגמה שינינו ערך ברשימה ששמה my_list, וראינו שהמיקום שלה לא משתנה.
\n", - "זו ההתנהגות שאנחנו מצפים לה מערך שהסוג שלו הוא Mutable – ניתן לשנות אותו מבלי להשפיע על מיקומו בזיכרון המחשב.
\n", + "\n", + "בדוגמה שינינו ערך ברשימה ששמה my_list, וראינו שהמיקום שלה לא משתנה.
" ] }, @@ -314,21 +313,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סיכום ביניים" + "### סיכום ביניים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "זו ההתנהגות שאנחנו מצפים לה מערך שהסוג שלו הוא Mutable – ניתן לשנות אותו מבלי להשפיע על מיקומו בזיכרון המחשב.
\n", "\n", - "
- כל ערך שניצור מאוחסן בכתובת, שלא תשתנה במשך כל חייו של הערך.
\n", - "- אם ניצור ערך פעמיים, יכול להיות שיהיו שני מופעים שלו בכתובות שונות.
\n", - "- משתנה הוא לא יותר מ\"קשירה\" בין שם לכתובת של ערך מסוים.
\n", - "- השמה היא הפעולה שקושרת בין שם המשתנה לבין הכתובת של הערך.
\n", - "- ייתכן שיותר משם משתנה אחד יצביע לאותה כתובת.
\n", - "- ערכים שהסוג שלהם הוא mutable יכולים להשתנות בלי שהכתובת שלהם תשתנה.
\n", - "- ערכים שהסוג שלהם הוא immutable לא יכולים להשתנות בלי שהכתובת שלהם תשתנה.
\n", + "\n", + "
" ] }, @@ -336,21 +335,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## השלכות" + "## השלכות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### רשימות" + "### רשימות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- כל ערך שניצור מאוחסן בכתובת, שלא תשתנה במשך כל חייו של הערך.
\n", + "- אם ניצור ערך פעמיים, יכול להיות שיהיו שני מופעים שלו בכתובות שונות.
\n", + "- משתנה הוא לא יותר מ\"קשירה\" בין שם לכתובת של ערך מסוים.
\n", + "- השמה היא הפעולה שקושרת בין שם המשתנה לבין הכתובת של הערך.
\n", + "- ייתכן שיותר משם משתנה אחד יצביע לאותה כתובת.
\n", + "- ערכים שהסוג שלהם הוא mutable יכולים להשתנות בלי שהכתובת שלהם תשתנה.
\n", + "- ערכים שהסוג שלהם הוא immutable לא יכולים להשתנות בלי שהכתובת שלהם תשתנה.
\n", "\n", + "
\n", "נעשה את הניסיון הבא:
" ] }, @@ -373,10 +372,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "עם הידע החדש שצברנו, נוכל להגיד ש־str1 ו־str2 מצביעים למקומות שונים, בגלל ההשמה בשורה 3.\n", "
\n", - "\n", + "
\n", "אבל ברשימות אפשר לשנות את הערכים גם בלי לבצע השמה. מה קורה אז?\n", "
" ] @@ -400,8 +399,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "במקרה הזה, גרמנו ל־list2 להצביע לאותו מקום ש־list1 מצביעה עליו.
\n", + "\n", + "במקרה הזה, גרמנו ל־list2 להצביע לאותו מקום ש־list1 מצביעה עליו.
" ] @@ -420,8 +419,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "מהסיבה הזו, שינוי של list2 ישפיע גם על list1, ושינוי של list1 ישפיע גם על list2.\n", "\n", - " כדי לבקש מפייתון לא להתנהג כך, צריך להגיד לה במפורש שאנחנו מעוניינים ביצירת רשימה חדשה.
\n", + "\n", + " כדי לבקש מפייתון לא להתנהג כך, צריך להגיד לה במפורש שאנחנו מעוניינים ביצירת רשימה חדשה.
" ] @@ -445,14 +444,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### פרמטרים של פונקציה" + "### פרמטרים של פונקציה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ניתן לעשות את זה בקריאה לפעולהlist.copy()
:\n", "\n", + "
\n", "נגדיר פונקציה שמקבלת מחרוזת ומשרשרת לסופה את האות Z:\n", "
" ] @@ -480,12 +479,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "מה קרה בפועל? למה המחרוזת לא השתנתה גם מחוץ לפונקציה?\n", "
\n", - "\n", - "הערך שהועבר לפרמטר של הפונקציה היה הכתובת של s, שעכשיו גם my_string מצביע עליו.
\n", - "ברגע שביצענו את ההשמהmy_string = my_string + 'Z'
, יצרנו באגף הימני של ההשמה ערך חדש, וביקשנו מלייזר חדש ששמו my_string להצביע לכתובת שלו.
\n", + "\n", + "הערך שהועבר לפרמטר של הפונקציה היה הכתובת של s, שעכשיו גם my_string מצביע עליו.
" ] @@ -494,9 +493,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ברגע שביצענו את ההשמהmy_string = my_string + 'Z'
, יצרנו באגף הימני של ההשמה ערך חדש, וביקשנו מלייזר חדש ששמו my_string להצביע לכתובת שלו.
\n", "המשתנה ששמו my_string מצביע כרגע לכתובת של ערך אחר, בזמן שהמשתנה s עדיין מצביע על הערך המקורי.\n", "\n", - "במקרה הזה, הפונקציה לא שינתה את הערך של המחרוזת שהעברנו לה כארגומנט.
\n", - "גם אם היינו רוצים מאוד לעשות את זה – זה לא אפשרי, כיוון שמחרוזות הן immutable.
\n", + "\n", + "במקרה הזה, הפונקציה לא שינתה את הערך של המחרוזת שהעברנו לה כארגומנט.
" ] }, @@ -504,7 +503,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "גם אם היינו רוצים מאוד לעשות את זה – זה לא אפשרי, כיוון שמחרוזות הן immutable.
\n", "\n", + "
\n", "ננסה לעשות אותו דבר עם רשימה:\n", "
" ] @@ -532,10 +531,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "ההתרחשות הייתה זהה למה שקרה עם מחרוזות!
\n", - "זה קרה כיוון שגם פה דרסנו את my_list כך שיצביע לרשימה חדשה שיצרנו.
\n", - "בצד ימין של ההשמה, יצרנו רשימה חדשה שמכילה את האיברים 2, 8, 20, 28, 50, 82, 126.
בעצם ההשמה ביקשנו מ־my_list שבתוך הפונקציה להפנות לכתובת של הרשימה החדשה.
\n", + "\n", + "ההתרחשות הייתה זהה למה שקרה עם מחרוזות!
" ] @@ -563,10 +562,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "זה קרה כיוון שגם פה דרסנו את my_list כך שיצביע לרשימה חדשה שיצרנו.
\n", + "בצד ימין של ההשמה, יצרנו רשימה חדשה שמכילה את האיברים 2, 8, 20, 28, 50, 82, 126.
בעצם ההשמה ביקשנו מ־my_list שבתוך הפונקציה להפנות לכתובת של הרשימה החדשה.
\n", "ננסה להשתמש בפעולה של צירוף איבר חדש לרשימה,list.append(item)
, שעליה למדנו השבוע:\n", "\n", - "הצלחנו!
\n", - "הרשימה השתנתה גם בתוך הפונקציה וגם מחוצה לה.
\n", - "אפשר ללמוד מהדוגמה הזו שכשאנחנו מבצעים השמה לשם משתנה מסוים, אנחנו משנים את הכתובת שאליה הצביע שם המשתנה לכתובת חדשה, ולא עורכים את תוכן משתנה.
\n", + "\n", + "הצלחנו!
" ] }, @@ -574,16 +573,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### כתיבת פונקציה כראוי" + "### כתיבת פונקציה כראוי" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "הרשימה השתנתה גם בתוך הפונקציה וגם מחוצה לה.
\n", + "אפשר ללמוד מהדוגמה הזו שכשאנחנו מבצעים השמה לשם משתנה מסוים, אנחנו משנים את הכתובת שאליה הצביע שם המשתנה לכתובת חדשה, ולא עורכים את תוכן משתנה.
\n", "\n", - "כשלמדנו פונקציות, הדגשנו את העובדה שפונקציה היא קטע קוד עצמאי.
\n", - "ככזו, פונקציה בדרך כלל לא תשנה ערכים של משתנים שלא היא הגדירה.
\n", + "\n", + "כשלמדנו פונקציות, הדגשנו את העובדה שפונקציה היא קטע קוד עצמאי.
" ] @@ -592,7 +591,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ככזו, פונקציה בדרך כלל לא תשנה ערכים של משתנים שלא היא הגדירה.
\n", "לדוגמה, קטע הקוד שמופיע למעלה ועורך את המשתנהl
שהוגדר מחוץ לפונקציה, נחשב להרגל רע.\n", "\n", + "
\n", " הנה קטע הקוד מלמעלה בלי ההדפסות המסרבלות:\n", "
" ] @@ -615,7 +614,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ננסה לרשום קוד זהה, רק שהפעם הפונקציה לא תערוך את המשתנה
" ] @@ -641,7 +640,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "l
:\n", "\n", + "
\n", " לצורת כתיבה זו כמה יתרונות:\n", "
" ] @@ -650,33 +649,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- קל יותר להבין מה הפונקציה עושה, גם אם אין לקורא ידע מוקדם בנוגע לשאר הקוד.
\n", - "- קל יותר למשתמש חיצוני להשתמש בפונקציה מבלי לפחד שיאבד מידע.
\n", - "- קל יותר לבנות פונקציות נוספות שיסתמכו על ההתנהגות של הפונקציה הזו.
\n", - "" + "\n", + "
- קל יותר להבין מה הפונקציה עושה, גם אם אין לקורא ידע מוקדם בנוגע לשאר הקוד.
\n", + "- קל יותר למשתמש חיצוני להשתמש בפונקציה מבלי לפחד שיאבד מידע.
\n", + "- קל יותר לבנות פונקציות נוספות שיסתמכו על ההתנהגות של הפונקציה הזו.
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Tuple" + "## Tuple" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### הגדרה" + "### הגדרה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " ברוח השיעור על העובדה שרשימות הן Mutable, הגיע הזמן להכיר את \"האח דל התקציב\" שלהן:
tuple
.
\n", + "\n", + " ברוח השיעור על העובדה שרשימות הן Mutable, הגיע הזמן להכיר את \"האח דל התקציב\" שלהן:
" ] @@ -685,7 +683,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "tuple
.
\n", " סוג הנתונים tuple לא מרגש במיוחד – הוא למעשה סוג של רשימה שאי־אפשר לשנות. רשימה שהיא immutable, אם תרצו.\n", "\n", + "
\n", " נגדיר משתנה מסוג tuple באמצעות סוגריים עגולים:\n", "
" ] @@ -703,7 +701,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " כמו ברשימה, ניתן לקבל איברים שנמצאים ב־tuple אם נפנה למיקום שלהם:\n", "
" ] @@ -722,7 +720,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ניסיון לשנות את ה־tuple לא יצליח, מן הסתם. Immutable, זוכרים?\n", "
" ] @@ -740,7 +738,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " יצירת tuple ריק תיכתב כך:\n", "
" ] @@ -758,7 +756,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ועבור יצירת tuple עם איבר אחד בלבד, נכתוב את האיבר ואז פסיק אחריו, כדי שפייתון לא תפרש את הביטוי כסוגריים רגילים:\n", "
" ] @@ -776,18 +774,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -795,14 +793,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### שימושים" + "### שימושים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " תרגול:\n", - " כתבו פונקצייה שמשתמשת ב־
dir()
, ומחזירה את כל הפעולות שיש ב־list ואין ב־tuple.
\n", - " בדקו גם אילו פעולות יש ב־tuple ואין ב־list.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "תרגול:\n", + " כתבו פונקצייה שמשתמשת ב־
\n", - "dir()
, ומחזירה את כל הפעולות שיש ב־list ואין ב־tuple.
\n", + " בדקו גם אילו פעולות יש ב־tuple ואין ב־list.
\n", " בשתי ההשוואות, התעלמו מפעולות ששמן מתחיל בתו קו תחתון.\n", "\n", + "
\n", " אם tuple מעניק לי פחות חופש פעולה, למה להשתמש בו מלכתחילה?\n", "
" ] @@ -811,17 +809,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
" + "- מהירות – עבודה עם ערכים מסוג tuple היא מהירה פי כמה וכמה מאשר עם רשימות.
\n", - "- סמנטיקה – עבור ערך קבוע שאין צורך לשנות, נעדיף להשתמש ב־tuple כדי להדגיש את זה וכדי לא לאפשר הוספה או הסרה של ערכים בטעות.
\n", - "\n", + "
- מהירות – עבודה עם ערכים מסוג tuple היא מהירה פי כמה וכמה מאשר עם רשימות.
\n", + "- סמנטיקה – עבור ערך קבוע שאין צורך לשנות, נעדיף להשתמש ב־tuple כדי להדגיש את זה וכדי לא לאפשר הוספה או הסרה של ערכים בטעות.
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### דוגמאות" + "### דוגמאות" ] }, { @@ -840,14 +837,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##מונחים
" + "##מונחים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "
- כתובת
- מקום במחשב שבו שמור ערך כלשהו. ערך לעולם לא יחליף את הכתובת שלו.
\n", "- Immutable
- ערך שלא ניתן לשנות.
\n", "- Mutable
- ערך שניתן לשנות.
\n", diff --git a/week3/Summary.ipynb b/week3/Summary.ipynb index 0b5a0bd..8f82b41 100644 --- a/week3/Summary.ipynb +++ b/week3/Summary.ipynb @@ -4,62 +4,59 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# תרגילים" + "# תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הגדרה" + "## הגדרה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " פונקציית גיבוב היא פונקציה המקבלת קלט כלשהו ומחזירה ערך באורך קבוע.
\n", + "\n", + " פונקציית גיבוב היא פונקציה המקבלת קלט כלשהו ומחזירה ערך באורך קבוע.
\n", - "\n", - "
\n", " קיימות פונקציות גיבוב רבות, ולהן שימושים מגוונים.\n", "\n", + "
\n", " נמנה כמה תכונות נפוצות של פונקציות גיבוב:\n", "
\n", - " \n", - "\n", - "
\n", - "\n" + "- דטרמיניזם – עבור קלט מסוים, הערך המוחזר יהיה תמיד זהה.
\n", - "- אחידות – כיוון שהערך המוחזר הוא בגודל קבוע, יש קלטים שעבורם הערך המוחזר זהה. פונקציית גיבוב טובה תנסה למזער את כמות הערכים המוחזרים הזהים.
\n", - "- חד־כיווניות – עבור ערך מסוים שהפונקציה החזירה, קשה למצוא מה הקלט שיצר אותו.
\n", - "\n", + "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## מימוש בסיסי" + "## מימוש בסיסי" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- דטרמיניזם – עבור קלט מסוים, הערך המוחזר יהיה תמיד זהה.
\n", + "- אחידות – כיוון שהערך המוחזר הוא בגודל קבוע, יש קלטים שעבורם הערך המוחזר זהה. פונקציית גיבוב טובה תנסה למזער את כמות הערכים המוחזרים הזהים.
\n", + "- חד־כיווניות – עבור ערך מסוים שהפונקציה החזירה, קשה למצוא מה הקלט שיצר אותו.
\n", + "\n", - " בתרגיל זה נממש גרסה פשוטה של פונקציית גיבוב (hash function).
\n", + "\n", + " בתרגיל זה נממש גרסה פשוטה של פונקציית גיבוב (hash function).
\n", - "
\n", " פונקציית הגיבוב שלנו תקבל מחרוזת ותחזיר תמיד פלט באורך זהה.\n", "\n", - " תחילה נכיר את הפונקציה
ord(תו)
.
\n", - " פונקציה זו מקבלת תו, ומחזירה ערך מספרי המייצג אותו:
\n", + "\n", + " תחילה נכיר את הפונקציה
" ] }, @@ -87,20 +84,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "ord(תו)
.
\n", + " פונקציה זו מקבלת תו, ומחזירה ערך מספרי המייצג אותו:
\n", "\n", - "פונקציית הגיבוב שלנו תעבוד כך:
\n", + "\n", + "פונקציית הגיבוב שלנו תעבוד כך:
\n", - "
\n", "\n", - "
\n", - "- נאתחל משתנה עזר בשם hash כך שערכו יהיה 1.
\n", - "- עבור כל אות במחרוזת:
\n", - "\n", - "
\n", + "- נחשב את
\n", - "ord(letter)
ונכפיל במשתנה העזר hash.- נכפיל את הערך שקיבלנו במיקום של האות הבאה במחרוזת.\n", + "
\n", + "
- נאתחל משתנה עזר בשם hash כך שערכו יהיה 1.
\n", + "- עבור כל אות במחרוזת:
\n", + "\n", + "
\n", - "- נחשב את
\n", + "ord(letter)
ונכפיל במשתנה העזר hash.- נכפיל את הערך שקיבלנו במיקום של האות הבאה במחרוזת.\n", "
- לתוצאה הזו נבצע מודולו 397,643, ונשמור על hash.
\n", - "- כדי שהפלט תמיד יהיה באורך זהה, נשתמש במודולו 100,297 על התוצאה (חשבו: איך מודולו גורם לזה לקרות?)
\n", + "- כדי שהפלט תמיד יהיה באורך זהה, נשתמש במודולו 100,297 על התוצאה (חשבו: איך מודולו גורם לזה לקרות?)
\n", "\n", + "
\n", "פונקציית הגיבוב שיצרנו מחזירה תמיד ערכים באורך קבוע (בין 0 ל־100,297), כפי שפונקציית גיבוב צריכה להחזיר (לאו דווקא באורך זה, אבל הפלט חייב להיות באורך קבוע).\n", "
" ] @@ -109,56 +106,50 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " דוגמה:
\n", + "\n", + " דוגמה:
\n", - "\n", - "
\n", "myhash('aba')
\n", - "62242
\n", - "\n", - "\n", - " החישוב התבצע כך:
\n", + "myhash('aba')
\n", + "62242
\n", + "\n", + " החישוב התבצע כך:
\n", - "\n", - "
\n", "temp_hash = 1
\n", - "temp_hash = (temp_hash * ord('a') * 1) % 397643
\n", - "# temp_hash = (1 * 97 * 1) % 397643 = 97
\n", - "\n", - "\n", + "
temp_hash = 1
\n", + "temp_hash = (temp_hash * ord('a') * 1) % 397643
\n", + "# temp_hash = (1 * 97 * 1) % 397643 = 97
\n", + "\n", " שימו לב שכאן הכפלנו ב־1, כיוון שמיקום האות הוא 0 ואנו מכפילים\n", " באינדקס האות הבאה.\n", "
\n", - "\n", - "temp_hash = (temp_hash * ord('b') * 2) % 397643
\n", - "# temp_hash = (97 * 98 * 2) % 397643 = 19012\n", - "temp_hash = (temp_hash * ord('a') * 3) % 397643
\n", - "# temp_hash = (19012 * 97 * 3) % 397643 = 363133\n", - "return temp_hash % 100297
\n", - "# temp_hash = 363133 % 100297 = 62242" + "temp_hash = (temp_hash * ord('b') * 2) % 397643
\n", + "# temp_hash = (97 * 98 * 2) % 397643 = 19012\n", + "temp_hash = (temp_hash * ord('a') * 3) % 397643
\n", + "# temp_hash = (19012 * 97 * 3) % 397643 = 363133\n", + "return temp_hash % 100297
\n", + "# temp_hash = 363133 % 100297 = 62242" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " ממשו את פונקציית הגיבוב.
\n", - " כדי לבדוק את עצמכם ודאו שקיבלתם את הערכים הבאים עבור המחרוזות הבאות:
\n", + "\n", + " ממשו את פונקציית הגיבוב.
\n", - "\n", - "
\n", + " כדי לבדוק את עצמכם ודאו שקיבלתם את הערכים הבאים עבור המחרוזות הבאות:
\n", "\n", - "
- \n", - "
\n", - "myhash('python course')
\n", - " 75273\n", - "- \n", - "
\n", - "myhash('hashing is sababa')
\n", - " 38166\n", - "- \n", - "
\n", + "myhash('i calculate hashes for fun')
\n", - " 68720\n", - "\n", + "
" ] }, @@ -166,9 +157,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- \n", + "
\n", + "myhash('python course')
\n", + "75273\n", + "- \n", + "
\n", + "myhash('hashing is sababa')
\n", + "38166\n", + "- \n", + "
\n", "myhash('i calculate hashes for fun')
\n", + "68720\n", + "\n", - " שימו לב שזוהי פונקציית גיבוב מומצאת.
\n", - " לעולם לא נשתמש בפונקציות גיבוב שהמצאנו בסביבות אמיתיות שאנחנו מתכנתים(!), משום שדבר כזה יסכן בוודאות את המשתמשים במערכת.
\n", + "\n", + " שימו לב שזוהי פונקציית גיבוב מומצאת.
" ] @@ -186,28 +177,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## איקס־עיגול" + "## איקס־עיגול" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " לעולם לא נשתמש בפונקציות גיבוב שהמצאנו בסביבות אמיתיות שאנחנו מתכנתים(!), משום שדבר כזה יסכן בוודאות את המשתמשים במערכת.
\n", " זה עולם שלם שנחקר רבות, ואנחנו תמיד נשתמש רק בפונקציות גיבוב שנחקרו במוסדות הרלוונטיים ופורסמו מטעמם.\n", "\n", - " נזכיר את החוקים של המשחק המוכר איקס־עיגול:
\n", + "\n", + " נזכיר את החוקים של המשחק המוכר איקס־עיגול:
\n", - "\n", - "
\n", "\n", - "
- המשחק מתרחש על לוח בגודל 3 על 3.
\n", - "- \n", + "
\n", + "\n", + "
" ] }, @@ -215,23 +205,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מימוש המשחק" + "### מימוש המשחק" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### ייצוג הלוח" + "#### ייצוג הלוח" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- המשחק מתרחש על לוח בגודל 3 על 3.
\n", + "- \n", " במשחק משתתפים שני שחקנים: שחקן שמשתמש באות X \n", " ושחקן שמשתמש באות O.\n", "
\n", - "- \n", + "
- \n", " השחקן שמשתמש באות O תמיד מתחיל.\n", "
\n", - "- המשחק נמשך כל עוד יש מקום פנוי בלוח, או עד שהוכרז מנצח.
\n", - "- מנצח הוא מי שהציב את האות השייכת לו בכל התאים הנמצאים באלכסון, בשורה או בטור על הלוח.
\n", + "- המשחק נמשך כל עוד יש מקום פנוי בלוח, או עד שהוכרז מנצח.
\n", + "- מנצח הוא מי שהציב את האות השייכת לו בכל התאים הנמצאים באלכסון, בשורה או בטור על הלוח.
\n", "\n", - " את הלוח נייצג באמצעות רשימה של רשימות.
\n", - " כל רשימה תייצג שורה בלוח שלנו: הרשימה במיקום 0 תייצג את השורה הראשונה בלוח, הרשימה בשורה 1 את השורה השנייה וכך הלאה.
\n", + "\n", + " את הלוח נייצג באמצעות רשימה של רשימות.
" ] @@ -240,16 +230,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כל רשימה תייצג שורה בלוח שלנו: הרשימה במיקום 0 תייצג את השורה הראשונה בלוח, הרשימה בשורה 1 את השורה השנייה וכך הלאה.
\n", " הרשימות המייצגות את השורות יהיו רשימות של תווים, כאשר בכל תא יהיה אחד מבין התווים האפשריים – 'O', 'X' או '-'\n", "\n", + "
\n", " לדוגמה, כך נראה לוח ריק:\n", "
\n", - " \n", "[['-', '-', '-'], ['-', '-', '-'], ['-', '-', '-']]\n", - " \n", - "\n", + "
\n", " נוח לדמיין את הרשימה הזו כתובה במאונך:\n", "
\n", - "\n", "\n", "[\n", " ['-', '-', '-'],\n", @@ -257,22 +244,18 @@ " ['-', '-', '-']\n", "]\n", "\n", - " \n", - "\n", + "
\n", " כעת נראה איך נראה הלוח כאשר יש 'X'־ים באלכסון:\n", "
\n", - "\n", "\n", "[\n", " ['X', '-', '-'],\n", " ['-', 'X', '-'],\n", " ['-', '-', 'X']\n", "]\n", - "\n", - "\n", + "
\n", " וללא ההדפסה לאורך:\n", "
\n", - "\n", "[['X', '-', '-'], ['-', 'X', '-'], ['-', '-', 'X']]\n" ] }, @@ -280,14 +263,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " תחילה נממש פונקציה המקבלת את הלוח ובודקת אם יש מנצח כלשהו \n", " (X או O),\n", " ומחזירה את האות של המנצח\n", " ('X' או 'O')\n", " אם יש מנצח, או '' (מחרוזת ריקה) אחרת.\n", "
\n", - "\n", + "
\n", "חִשבו אילו בדיקות נידרש לבצע כדי למצוא אם יש בלוח מצב של ניצחון. ממשו את הפונקציה
" ] @@ -305,21 +288,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "check_board(board)
כך שתשתמש בכמה שיותר פונקציות עזר.\n", "\n", - " לפני שתמשיכו הלאה, חשוב לוודא שהפונקציה שכתבתם עובדת, לכן נכתוב עבורה סדרה של בדיקות.
\n", + "\n", + " לפני שתמשיכו הלאה, חשוב לוודא שהפונקציה שכתבתם עובדת, לכן נכתוב עבורה סדרה של בדיקות.
\n", - "\n", - "
\n", " כתבו בדיקות עבור המקרים הבאים:\n", "\n", - "
- ניצחון באלכסון הראשי (שמאל למעלה–ימין למטה).
\n", - "- ניצחון באלכסון המשני (ימין למעלה–שמאל למטה).
\n", - "- ניצחון בכל אחד מהטורים.
\n", - "- ניצחון בכל אחת מהשורות.
\n", - "- לוח מלא ללא ניצחון.
\n", - "- לוח לא מלא ללא ניצחון (במקומות לא מסומנים יופיע הסימן '-').
\n", + "\n", + "
\n", - "\n", - "- ניצחון באלכסון הראשי (שמאל למעלה–ימין למטה).
\n", + "- ניצחון באלכסון המשני (ימין למעלה–שמאל למטה).
\n", + "- ניצחון בכל אחד מהטורים.
\n", + "- ניצחון בכל אחת מהשורות.
\n", + "- לוח מלא ללא ניצחון.
\n", + "- לוח לא מלא ללא ניצחון (במקומות לא מסומנים יופיע הסימן '-').
\n", "\n", + "
\n", " בסך הכול תצטרכו לכתוב 10 בדיקות. בכל בדיקה הפעילו את הפונקציה שלכם
\n" ] @@ -418,28 +399,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### פונקציות לבדיקת תקינות קלט" + "#### פונקציות לבדיקת תקינות קלט" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "check_board(board)
על לוח כפי שמתואר ובדקו אם הפלט שמוחזר תואם לפלט שציפיתם לקבל.\n", "\n", - " במהלך המשחק אנו נקלוט מהשחקנים במשחק (המשתמשים) את המקומות בלוח, שבהם הם ירצו למקם את האות שלהם.
\n", - " מקומות אלו יהיו שני מספרים בתחום 0–2 המציינים את השורה והעמודה שבה יש למקם את האות.
\n", + "\n", + " במהלך המשחק אנו נקלוט מהשחקנים במשחק (המשתמשים) את המקומות בלוח, שבהם הם ירצו למקם את האות שלהם.
\n", - "\n", "1 2\n", - "\n", - "
\n", + " מקומות אלו יהיו שני מספרים בתחום 0–2 המציינים את השורה והעמודה שבה יש למקם את האות.
\n", " לדוגמה, עבור:\n", "\n", + "
\n", " נמקם את האות המתאימה לשחקן, נניח X, בשורה 1 ובעמודה 2, כך:\n", "
\n", - "\n", "[['-', '-', '-'], ['-', '-', 'X'], ['-', '-', '-']]\n", - "\n", - "\n", + "
\n", " זכרו כי הספירה מתחילה מ־0, ולכן מדובר בשורה האמצעית ובעמודה הימנית.\n", "
" ] @@ -448,24 +425,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כעת כתבו פונקציה המקבלת את הלוח ואת האות שמייצגת את השחקן ('X' או 'O'). כמו כן, הפונקציה תקלוט מהמשתמש שני מספרים.
\n", - " הפונקציה תבדוק אם התנאים הבאים מתקיימים, ואם הם מתקיימים היא תמקם את האות הנתונה במיקום המבוקש, ותעדכן את הלוח:
\n", + "\n", + " כעת כתבו פונקציה המקבלת את הלוח ואת האות שמייצגת את השחקן ('X' או 'O'). כמו כן, הפונקציה תקלוט מהמשתמש שני מספרים.
\n", - "\n", - "
\n", + " הפונקציה תבדוק אם התנאים הבאים מתקיימים, ואם הם מתקיימים היא תמקם את האות הנתונה במיקום המבוקש, ותעדכן את הלוח:
\n", "\n", - "
\n", + "- מספר השורה הוא בין 0 ל־2.
\n", - "- מספר העמודה הוא בין 0 ל־2.
\n", - "- המקום המבוקש לא תפוס על ידי אות כלשהי (כלומר יש בו '-').
\n", + "\n", + "
\n", - "\n", - "- מספר השורה הוא בין 0 ל־2.
\n", + "- מספר העמודה הוא בין 0 ל־2.
\n", + "- המקום המבוקש לא תפוס על ידי אות כלשהי (כלומר יש בו '-').
\n", "\n", - " שימו לב, עליכם לחייב את המשתמש להכניס ערכים חוקיים. כלומר, המשחק לא ימשיך עד שיתקבל קלט תקין (חשבו על דרך שבה התוכנית תמשיך לבקש מהמשתמש ערכים עד שיוכנסו ערכים חוקיים).
\n", + "\n", + " שימו לב, עליכם לחייב את המשתמש להכניס ערכים חוקיים. כלומר, המשחק לא ימשיך עד שיתקבל קלט תקין (חשבו על דרך שבה התוכנית תמשיך לבקש מהמשתמש ערכים עד שיוכנסו ערכים חוקיים).
\n", - "\n", - "
\n", " כאשר נגלה בשלב מוקדם יותר שהלוח לא ניתן יותר למילוי – המשחק יסתיים.\n", "\n", - " רמז: השתמשו בלולאת while\n", + "
\n", + " רמז: השתמשו בלולאת while\n", "
\n" ] }, @@ -473,67 +447,51 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "לוח לדוגמה:\n", "
\n", - "\n", "\n", "board = [['-', '-', '-'], ['-', 'O', 'X'], ['-', '-', '-']]\n", "\n", - "\n", - "\n", + "
\n", " הזנה חוקית:\n", "
\n", - "\n", "make_turn('X', board)
\n", - "\n", - "
\n", - "\n", + "
\n", "Player 'X' Please choose cell:\n", "0 2\n", "\n", "[['-', '-', 'X'], ['-', 'O', 'X'], ['-', '-', '-']]\n", - "\n", - "\n", + "
\n", " הזנה לא חוקית:\n", "
\n", - "\n", - "
\n", - "\n", + "
\n", "Player 'X' Please choose cell:\n", "5 -2\n", "Invalid line chosen (5)\n", "Invalid column chosen (-2)\n", "[['-', '-', '-'], ['-', 'O', 'X'], ['-', '-', '-']]\n", "\n", - "\n", - "
\n", - "\n", + "
\n", "Player 'X' Please choose cell:\n", "1 2\n", "Cell (1,2) is taken, use other.\n", "[['-', '-', '-'], ['-', 'O', 'X'], ['-', '-', '-']]\n", "\n", - "\n", - "
\n", - "\n", + "
\n", "Player 'X' Please choose cell:\n", "2 -2\n", "Invalid column chosen (-2)\n", "[['-', '-', '-'], ['-', 'O', 'X'], ['-', '-', '-']]\n", "\n", - "\n", - "
\n", - "\n", + "
\n", "Player 'X' Please choose cell:\n", "1 1\n", "Cell (1,1) is taken, use other.\n", "[['-', '-', '-'], ['-', 'O', 'X'], ['-', '-', '-']]\n", "\n", - "\n", - "
\n", - "\n", - "\n", + "
\n", + "\n", " שימו לב שלאחר כל פעולה אנו מדפיסים את הלוח, בין אם הצליחה ובין אם לאו.\n", "
" ] @@ -551,14 +509,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בונוס: ממשו פונקציה שמדפיסה את הלוח לאורך.\n", + "
\n", + "בונוס: ממשו פונקציה שמדפיסה את הלוח לאורך.\n", "
\n", - "\n", "print_board(board)
\n", - "\n", - "
\n", - "\n", + "
\n", "\n", "[\n", " ['-', '-', '-'],\n", @@ -572,32 +527,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### מימוש המשחק" + "#### מימוש המשחק" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כאמור המשחק ממשיך כל עוד אין מנצח ונותר מקום פנוי בלוח.
\n", - " נשים לב כי מספר המהלכים החוקיים יכול להיות לכל היותר כגודל הלוח.
\n", - " כלומר – אם לא הוכרז מנצח במהלך המשחק, המשחק ייגמר לאחר 9 מהלכים עבור לוח בגודל $3\\times3$.
\n", - " נספור כמה מהלכים חוקיים יש במשחק. עבור מספרי מהלך זוגיים (0, 2, 4, ...) ישחק השחקן O, ועבור מספרי מהלך אי־זוגיים ישחק השחקן X.
\n", - " נתאר את מהלך המשחק בפסאודו־קוד:
\n", + "\n", + " כאמור המשחק ממשיך כל עוד אין מנצח ונותר מקום פנוי בלוח.
\n", - "
\n", + " נשים לב כי מספר המהלכים החוקיים יכול להיות לכל היותר כגודל הלוח.
\n", + " כלומר – אם לא הוכרז מנצח במהלך המשחק, המשחק ייגמר לאחר 9 מהלכים עבור לוח בגודל $3\\times3$.
\n", + " נספור כמה מהלכים חוקיים יש במשחק. עבור מספרי מהלך זוגיים (0, 2, 4, ...) ישחק השחקן O, ועבור מספרי מהלך אי־זוגיים ישחק השחקן X.
\n", + " נתאר את מהלך המשחק בפסאודו־קוד:
\n", "\n", - "
- אתחל את מונה המהלכים ל־0.
\n", - "- כל עוד אין מנצח וגם הלוח לא מלא:\n", + "
\n", + "
- אתחל את מונה המהלכים ל־0.
\n", + "- כל עוד אין מנצח וגם הלוח לא מלא:\n", "
\n", - "\n", - "
\n", - "- אם מספר המהלך זוגי – בצע מהלך שחקן O.
\n", - "- אם מספר המהלך אי־זוגי – בצע מהלך שחקן X.
\n", - "- הגדל את מונה המהלכים ב־1.
\n", - "- אם יש ניצחון – הכרז על המנצח, אחרת הכרז תיקו.
\n", + "- אם מספר המהלך זוגי – בצע מהלך שחקן O.
\n", + "- אם מספר המהלך אי־זוגי – בצע מהלך שחקן X.
\n", + "- הגדל את מונה המהלכים ב־1.
\n", + "- אם יש ניצחון – הכרז על המנצח, אחרת הכרז תיקו.
\n", "\n", - "\n", + "
\n", " ממשו את המשחק על פי הפונקציות שיצרתם ועל פי תיאור מהלך המשחק.\n", "
" ] @@ -615,7 +570,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " כעת שחקו עם בני משפחה וחברים ;)\n", "
" ] @@ -624,32 +579,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## בנק 2.0" + "## בנק 2.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מנהלי הבנק היו מרוצים מאוד מהתוכנה הקודמת לניהול בנק שכתבתם וכעת הם מעוניינים לשפר אותה.
\n", - " תחילה הם הביעו דאגה מחוזק הסיסמאות. מנגנון הסיסמאות הקודם היה חלש ומנהלי הבנק מפחדים שייעשה בו שימוש לרעה.
\n", + "\n", + " מנהלי הבנק היו מרוצים מאוד מהתוכנה הקודמת לניהול בנק שכתבתם וכעת הם מעוניינים לשפר אותה.
\n", - "\n", - "
\n", + " תחילה הם הביעו דאגה מחוזק הסיסמאות. מנגנון הסיסמאות הקודם היה חלש ומנהלי הבנק מפחדים שייעשה בו שימוש לרעה.
\n", " שמועות מתפשטות מהר מאוד ומנהלי הבנק שמעו שמימשתם גרסה לפונקציית גיבוב. הם מעוניינים להשתמש בה במנגנון הסיסמאות החדש.\n", "\n", + "
\n", " מנגנון הסיסמאות ינוהל כך:\n", "
\n", - "\n", - "\n", - "
" ] }, @@ -81,22 +81,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- הבנק ינהל קובץ סיסמאות שייקרא bank_passwd.txt.
\n", - "- כאשר משתמש יפתח חשבון בנק, הוא יכניס את הסיסמה שהוא מעוניין שתשמש אותו בהתחברות הבאה.
\n", - "- נחשב את ה־hash של הסיסמה הזו באמצעות פונקציית ה־hash שכתבנו בתחילת מחברת זו.
\n", - "- הבנק ישמור את שם המשתמש ותוצאת ה־hash בקובץ הסיסמאות בצורה קבועה מראש.
\n", + "\n", + "
\n", - "\n", - "- הבנק ינהל קובץ סיסמאות שייקרא bank_passwd.txt.
\n", + "- כאשר משתמש יפתח חשבון בנק, הוא יכניס את הסיסמה שהוא מעוניין שתשמש אותו בהתחברות הבאה.
\n", + "- נחשב את ה־hash של הסיסמה הזו באמצעות פונקציית ה־hash שכתבנו בתחילת מחברת זו.
\n", + "- הבנק ישמור את שם המשתמש ותוצאת ה־hash בקובץ הסיסמאות בצורה קבועה מראש.
\n", "\n", - " כל סיסמה של משתמש תישמר בקובץ בצורה: username:62242,
\n", + "\n", + " כל סיסמה של משתמש תישמר בקובץ בצורה: username:62242,
" ] @@ -658,16 +610,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### פתיחת חשבון בנק" + "### פתיחת חשבון בנק" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " כאשר username הוא שם המשתמש שנרשם בפתיחת החשבון, ו־62242 הוא תוצאת ה־hash עבור הסיסמה שבחר.\n", "בסעיף זה נממש את פונקציית פתיחת חשבון הבנק.
\n", - " הפונקציה תקבל שם משתמש וסיסמה, ותיצור רשומה חדשה בקובץ הסיסמאות עבור המשתמש שביקש להצטרף לבנק.
\n", - " כיוון שהבנק שלנו לא עבר לעבוד עם מספרי חשבון, עלינו לוודא ששם המשתמש שנבחר לא קיים כבר בבנק. אם קיים כזה, נדפיס שגיאה ולא נבצע דבר.
\n", + "בסעיף זה נממש את פונקציית פתיחת חשבון הבנק.
" ] @@ -676,52 +628,48 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### דוגמאות" + "#### דוגמאות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הפונקציה תקבל שם משתמש וסיסמה, ותיצור רשומה חדשה בקובץ הסיסמאות עבור המשתמש שביקש להצטרף לבנק.
\n", + " כיוון שהבנק שלנו לא עבר לעבוד עם מספרי חשבון, עלינו לוודא ששם המשתמש שנבחר לא קיים כבר בבנק. אם קיים כזה, נדפיס שגיאה ולא נבצע דבר.
\n", " אם לא קיים שם משתמש כזה, נחשב את ה־hash של הסיסמה שהזין, ונוסיף לסוף הקובץ רשומה חדשה בייצוג שצוין בתחילת השאלה.\n", "\n", + "
\n", "תוכן קובץ הסיסמאות (לצורך הדוגמה):\n", "
\n", - "\n", - "FreddieMercury:56443
\n", - "BBKing:33471
\n", - "DonaldDuck:17743
\n", - "register_to_bank('FreddieMercury', 'ILoveQueen')
\n", - "An account with name \"FreddieMercury\" already exists.
Account was not created.
\n", - "register_to_bank('Simba', 'ILoveNala')
\n", - "Account with name \"Simba\" was created and added to the bank.
\n", - "\n", - "\n", + "FreddieMercury:56443
\n", + "BBKing:33471
\n", + "DonaldDuck:17743
\n", + "register_to_bank('FreddieMercury', 'ILoveQueen')
\n", + "An account with name \"FreddieMercury\" already exists.
Account was not created.
\n", + "register_to_bank('Simba', 'ILoveNala')
\n", + "Account with name \"Simba\" was created and added to the bank.
\n", + "\n", " תוכן קובץ הסיסמאות כעת:\n", "
\n", - "\n", - "FreddieMercury:56443
\n", - "BBKing:19463
\n", - "DonaldDuck:17743
\n", - "Simba:6362
" + "FreddieMercury:56443
\n", + "BBKing:19463
\n", + "DonaldDuck:17743
\n", + "Simba:6362
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### תרגיל" + "#### תרגיל" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "ממשו את פונקציית הרישום.
\n", - "רמזים:
\n", - "\n", - "\n", - "
\n", - "\n", - "- קראו את המידע מהקובץ לתוך רשימה, זכרו שכל שורה היא מחרוזת וניתן להפעיל עליה פעולות של מחרוזות כדי לחלץ את שם המשתמש.
\n", - "- כאשר פותחים קובץ במצב הוספה, ניתן להוסיף אליו נתונים מבלי למחוק את הקיימים. קראו על פונקציית open וחפשו כיצד עושים זאת.
\n", + "ממשו את פונקציית הרישום.
\n", + "רמזים:
\n", + "\n", + "
" ] }, @@ -738,39 +686,36 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מערכת הזדהות" + "### מערכת הזדהות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- קראו את המידע מהקובץ לתוך רשימה, זכרו שכל שורה היא מחרוזת וניתן להפעיל עליה פעולות של מחרוזות כדי לחלץ את שם המשתמש.
\n", + "- כאשר פותחים קובץ במצב הוספה, ניתן להוסיף אליו נתונים מבלי למחוק את הקיימים. קראו על פונקציית open וחפשו כיצד עושים זאת.
\n", "\n", - " בעקבות השיפור במנגנון חוזק הסיסמאות, הצטרפו לקוחות רבים לבנק.
\n", + "\n", + " בעקבות השיפור במנגנון חוזק הסיסמאות, הצטרפו לקוחות רבים לבנק.
\n", - "\n", - "
\n", " המנהלים מרוצים וכעת רוצים שתממשו עבורם מערכת הזדהות שעובדת עם קובץ הסיסמאות.\n", "\n", + "
\n", " מערכת ההזדהות תעבוד כך:\n", "
\n", - "\n", - "\n", - "
\n", + "\n", "- הלקוח יזין שם משתמש וסיסמה.\n", + "
\n", + "\n", + "
\n", + "- הלקוח יזין שם משתמש וסיסמה.\n", "
\n", - "\n", - "
\n", - "- אם המשתמש לא קיים, נדפיס Account not registered, ונסיים.
\n", - "- אם הלקוח קיים, אך הסיסמה שהזין שגויה – יש ללקוח עוד 2 נסיונות להזין סיסמה נכונה.
\n", - "- למשתמש ינתנו 3 ניסיונות בסך הכול להכניס סיסמה נכונה.\n", + "
- אם המשתמש לא קיים, נדפיס Account not registered, ונסיים.
\n", + "- אם הלקוח קיים, אך הסיסמה שהזין שגויה – יש ללקוח עוד 2 נסיונות להזין סיסמה נכונה.
\n", + "- למשתמש ינתנו 3 ניסיונות בסך הכול להכניס סיסמה נכונה.\n", "
\n", + "\n", - "
\n", - "- אם הזין סיסמה שגויה בשלושתם – הרשומה שלו תימחק מקובץ הסיסמאות, ויהיה עליו להירשם מחדש בעתיד.
\n", - "- אחרת, הזיהוי הצליח.
\n", - "- אם הזין סיסמה שגויה בשלושתם – הרשומה שלו תימחק מקובץ הסיסמאות, ויהיה עליו להירשם מחדש בעתיד.
\n", + "- אחרת, הזיהוי הצליח.
\n", + "\n", - " מערכת ההזדהות הינה פונקציה המקבלת שם משתמש וסיסמה.
\n", + "\n", + " מערכת ההזדהות הינה פונקציה המקבלת שם משתמש וסיסמה.
" ] @@ -779,58 +724,52 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### דוגמאות" + "#### דוגמאות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " היא מחזירה True אם הזיהוי הצליח, ו־False אחרת.\n", "\n", + "
\n", " תוכן קובץ הסיסמאות (לצורך הדוגמה):\n", "
\n", - "\n", - "
\n", - "\n", - "FreddieMercury:61875
\n", - "BBKing:33471
\n", - "DonaldDuck:17743
\n", - "Simba:6362
\n", - "authenticate('FreddieMercury', 'ILoveQueen')
\n", - "Wrong password (1/3). # myhash('ILoveQueen') = 99597 != 61875 (in password file)
\n", - "authenticate('FreddieMercury', 'LetItBe')
\n", - "Wrong password (2/3). # myhash('LetItBe') = 58060 != 61875 (in password file)
\n", - "authenticate('FreddieMercury', 'HeyJude')
\n", - "Wrong password (3/3). 'FreddieMercury' was removed. # myhash('HeyJude') = 8309 != 61875 (in password file)
\n", - "authenticate('FreddieMercury', 'IHatePasswords!')
\n", - "Account not registered. # FreddieMercury was removed in the previous example
\n", - "\n", - "authenticate('Simba', 'ILoveNala')
\n", - "Welcome 'Simba'. # myhash('ILoveNala') = 6362 == 6362 (in password file)
\n", - "\n", - "\n", + "
\n", + "FreddieMercury:61875
\n", + "BBKing:33471
\n", + "DonaldDuck:17743
\n", + "Simba:6362
\n", + "authenticate('FreddieMercury', 'ILoveQueen')
\n", + "Wrong password (1/3). # myhash('ILoveQueen') = 99597 != 61875 (in password file)
\n", + "authenticate('FreddieMercury', 'LetItBe')
\n", + "Wrong password (2/3). # myhash('LetItBe') = 58060 != 61875 (in password file)
\n", + "authenticate('FreddieMercury', 'HeyJude')
\n", + "Wrong password (3/3). 'FreddieMercury' was removed. # myhash('HeyJude') = 8309 != 61875 (in password file)
\n", + "authenticate('FreddieMercury', 'IHatePasswords!')
\n", + "Account not registered. # FreddieMercury was removed in the previous example
\n", + "authenticate('Simba', 'ILoveNala')
\n", + "Welcome 'Simba'. # myhash('ILoveNala') = 6362 == 6362 (in password file)
\n", + "\n", " תוכן קובץ הסיסמאות כעת:\n", "
\n", - "\n", - "
\n", - "\n", - "BBKing:19463
\n", - "DonaldDuck:17743
\n", - "Simba:6362
" + "
\n", + "BBKing:19463
\n", + "DonaldDuck:17743
\n", + "Simba:6362
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### תרגול" + "#### תרגול" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ממשו את מערכת ההזדהות.\n", "
" ] diff --git a/week4/1_For_Loops.ipynb b/week4/1_For_Loops.ipynb index c5bbaa1..e52778d 100644 --- a/week4/1_For_Loops.ipynb +++ b/week4/1_For_Loops.ipynb @@ -4,28 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# לולאת for" + "# לולאת for" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " פעמים רבות אנחנו מנסים לפתור בעיה, שכדי להגיע לפתרונה נידרש לעבור על כל הערכים במבנה מסוים:\n", "
" ] @@ -34,11 +34,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- קבל את רשימת גובהי התלמידים בכיתה, והחזר את גובהו של התלמיד הגבוה ביותר.
\n", - "- קבל את רשימת הקלפים שבידי, והחזר את הקלף המתאים ביותר לשליפה עכשיו.
\n", - "- קבל רשימת השמעה (Playlist), והחזר את כל השירים של הלהקה Led Zeppelin.
\n", - "- קבל את רשימת המסעדות בצרפת ואת הדירוגים שלהן, והחזר את 3 המסעדות בעלות הדירוג הגבוה ביותר.
\n", + "\n", + "
" ] }, @@ -46,9 +46,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- קבל את רשימת גובהי התלמידים בכיתה, והחזר את גובהו של התלמיד הגבוה ביותר.
\n", + "- קבל את רשימת הקלפים שבידי, והחזר את הקלף המתאים ביותר לשליפה עכשיו.
\n", + "- קבל רשימת השמעה (Playlist), והחזר את כל השירים של הלהקה Led Zeppelin.
\n", + "- קבל את רשימת המסעדות בצרפת ואת הדירוגים שלהן, והחזר את 3 המסעדות בעלות הדירוג הגבוה ביותר.
\n", "\n", - " מה משותף לכל הבעיות שהוצגו למעלה?
\n", - " דרך ראויה לפתור אותן היא בעזרת לולאה שתעבור על כל האיברים שהוצגו בבעיה, ותבצע על כל איבר סדרת פעולות.
\n", + "\n", + " מה משותף לכל הבעיות שהוצגו למעלה?
" ] @@ -57,23 +57,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " דרך ראויה לפתור אותן היא בעזרת לולאה שתעבור על כל האיברים שהוצגו בבעיה, ותבצע על כל איבר סדרת פעולות.
\n", " נכתוב בפסאודו־קוד דוגמה לפתרון הבעיה הראשונה – מציאת הגובה של התלמיד הגבוה ביותר בכיתה:\n", "\n", - "
\n", + "\n", + "- קלוט רשימת גבהים לתוך המשתנה גבהים.
\n", - "- אפס את המשתנה ששמו הכי_גבוה_שמצאנו כך שיכיל את הערך 0.
\n", - "- \n", - " עבור כל גובה שנמצא בתוך גבהים:\n", + "
\n", + "\n", + "
\n", + "- קלוט רשימת גבהים לתוך המשתנה גבהים.
\n", + "- אפס את המשתנה ששמו הכי_גבוה_שמצאנו כך שיכיל את הערך 0.
\n", + "- \n", + "עבור כל גובה שנמצא בתוך גבהים:\n", "
\n", - "\n", - "
\n", - "- \n", - " אם הערך של גובה גדול יותר מהכי_גבוה_שמצאנו:\n", + "
- \n", + "אם הערך של גובה גדול יותר מהכי_גבוה_שמצאנו:\n", "
\n", - "\n", - "
\n", - "- \n", - " שים בתוך הכי_גבוה_שמצאנו את הערך של גובה.\n", + "
- \n", + "שים בתוך הכי_גבוה_שמצאנו את הערך של גובה.\n", "
\n", - "- החזר את הכי_גבוה_שמצאנו.
\n", + "- החזר את הכי_גבוה_שמצאנו.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -104,16 +104,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### לולאת while" + "### לולאת while" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " ממשו פונקציה שמקבלת רשימת גבהים של האנשים בכיתה, ומחזירה את הגובה של התלמיד הגבוה ביותר.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " ממשו פונקציה שמקבלת רשימת גבהים של האנשים בכיתה, ומחזירה את הגובה של התלמיד הגבוה ביותר.
\n", - "
\n", " לדוגמה, עבור הרשימה[1.50, 1.84, 1.73, 1.51]
החזירו 1.84.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " עד כה, אחד מהשימושים הנפוצים שעשינו בלולאת
while
היה לעבור על איברים ברשימה באמצעות מיקום.
\n", - " הקוד שכתבתם בתרגול למעלה, שבו הייתם צריכים לעבור על גובהי התלמידים, זה אחר זה, הוא דוגמה טובה לכך.
\n", + "\n", + " עד כה, אחד מהשימושים הנפוצים שעשינו בלולאת
" ] @@ -143,17 +143,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "while
היה לעבור על איברים ברשימה באמצעות מיקום.
\n", + " הקוד שכתבתם בתרגול למעלה, שבו הייתם צריכים לעבור על גובהי התלמידים, זה אחר זה, הוא דוגמה טובה לכך.
\n", " ייתכן שהקוד שלכם דומה לקוד שאני כתבתי לפתרון התרגיל הזה:\n", "\n", + "
\n", " הקוד בתא האחרון עושה את הפעולות הבאות:\n", "
\n", - "\n", - "\n", - "
- איפוס המשתנה max_height_so_far, ששומר את הגובה המרבי שמצאנו עד כה ברשימה.
\n", - "- איפוס המשתנה current_student_index, שמצביע על מיקום התלמיד שאנחנו בודקים באיטרציה הנוכחית של הלולאה.
\n", - "- בכל איטרציה, הביטוי
\n", - "student_heights[current_student_index]
ישיג את גובהו של אחד התלמידים, לפי הסדר.- אם התלמיד הנבדק גבוה יותר מהתלמיד הכי גבוה שמצאנו עד עכשיו, שמור את הגובה המרבי החדש בתוך max_height_so_far.
\n", - "- קדם את current_student_index כך שיצביע לתא שבו מופיע התלמיד הבא.
\n", - "- בסיום המעבר על כל הערכים, החזר את max_height_so_far.
\n", + "\n", + "
" ] }, @@ -161,8 +160,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- איפוס המשתנה max_height_so_far, ששומר את הגובה המרבי שמצאנו עד כה ברשימה.
\n", + "- איפוס המשתנה current_student_index, שמצביע על מיקום התלמיד שאנחנו בודקים באיטרציה הנוכחית של הלולאה.
\n", + "- בכל איטרציה, הביטוי
\n", + "student_heights[current_student_index]
ישיג את גובהו של אחד התלמידים, לפי הסדר.- אם התלמיד הנבדק גבוה יותר מהתלמיד הכי גבוה שמצאנו עד עכשיו, שמור את הגובה המרבי החדש בתוך max_height_so_far.
\n", + "- קדם את current_student_index כך שיצביע לתא שבו מופיע התלמיד הבא.
\n", + "- בסיום המעבר על כל הערכים, החזר את max_height_so_far.
\n", "\n", - " הלולאה שמופיעה תעבור על מספרי התאים ברשימה ותבדוק את התוכן שלהם.
\n", + "\n", + " הלולאה שמופיעה תעבור על מספרי התאים ברשימה ותבדוק את התוכן שלהם.
" ] @@ -171,7 +170,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " עד כה, פעמים רבות השימוש שלנו בלולאות היה לצורך מעבר על כל האיברים של iterable כלשהו.\n", "\n", + "
\n", " למעשה, בדוגמה שלמעלה אנחנו מבצעים פעולה עבור כל איבר בתוך student_heights.\n", "
" ] @@ -180,22 +179,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## שימוש ב־for" + "## שימוש ב־for" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### שימוש בסיסי" + "### שימוש בסיסי" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "בפעמים שבהן אנחנו רוצים לבצע דבר מה עבור כל אחד מהאיברים במבנה כלשהו, נשתמש בלולאת
for
.
\n", + "\n", + "בפעמים שבהן אנחנו רוצים לבצע דבר מה עבור כל אחד מהאיברים במבנה כלשהו, נשתמש בלולאת
" ] @@ -226,7 +225,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
.
\n", "נראה, לדוגמה, איך נשתמש בלולאתwhile
כדי להדפיס את שמותיהן של כל התלמידות בכיתה:\n", "\n", + "
\n", "בעברית, היינו משתמשים בנוסח דומה לזה: עבור כל שם של תלמידה בתוך רשימת שמות התלמידות שבכיתה, הדפס את שם התלמידה.
" ] }, @@ -234,7 +233,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " נכתוב בפייתון, הפעם בעזרת לולאת
" ] @@ -253,7 +252,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
:\n", "\n", + "
\n", "השוו את האלגנטיות של הקוד הזה לאלגנטיות של הקוד שמשתמש בלולאת
" ] @@ -262,14 +261,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### איך זה עובד?" + "### איך זה עובד?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "while
, ואת הדמיון בין כל אחת מהן לבין הנוסח המילולי שכתבנו.\n", "\n", + "
\n", "לולאת ה־
" ] @@ -278,10 +277,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
שראיתם מתחלקת ל־3 חלקים:\n", "\n", - "
- iterable כלשהו – נסתכל על כל האיברים שבו לפי הסדר שלהם.
\n", - "- שם משתנה חדש שנמציא – פייתון תיצור אותו במיוחד עבור הלולאה. המשתנה הזה יצביע בכל פעם על איבר אחד, לפי הסדר, מתוך ה־iterable.
\n", - "- הפעולה או הפעולות שאנחנו רוצים לבצע על כל אחד מהאיברים האלו.
\n", + "\n", + "
" ] }, @@ -303,7 +302,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- iterable כלשהו – נסתכל על כל האיברים שבו לפי הסדר שלהם.
\n", + "- שם משתנה חדש שנמציא – פייתון תיצור אותו במיוחד עבור הלולאה. המשתנה הזה יצביע בכל פעם על איבר אחד, לפי הסדר, מתוך ה־iterable.
\n", + "- הפעולה או הפעולות שאנחנו רוצים לבצע על כל אחד מהאיברים האלו.
\n", "\n", + "
\n", "נבחן את הלולאה שמדפיסה את שמות התלמידות בכיתה, שלב אחר שלב, כדי להבין איך לולאת
" ] @@ -312,16 +311,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
פועלת.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -339,39 +338,39 @@ "metadata": {}, "source": [ "\n", - " כמה מקטעי הקוד הבאים לא ירוצו, כיוון שחלק מהקוד מסומן בהערה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כמה מקטעי הקוד הבאים לא ירוצו, כיוון שחלק מהקוד מסומן בהערה.
\n", - "
\n", " המטרה של קטעי הקוד בחלק הזה של המחברת היא להדגיש איזה קוד רץ באותו רגע.\n", "\n", - "
" ] }, @@ -379,8 +378,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "תוכן המשתנה names_of_students_in_class \n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "\n", - " \n", - "\"Galia\" \n", - "\"Hadas\" \n", - "\"Hen\" \n", - "\"Ilana\" \n", - "\"Ivria\" \n", - "\"Karin\" \n", - "\"Maya\" \n", - "\"Noa\" \n", - "\n", - " \n", - " \n", + "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "תוכן המשתנה names_of_students_in_class \n", + "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "\n", + " \n", + "\"Galia\" \n", + "\"Hadas\" \n", + "\"Hen\" \n", + "\"Ilana\" \n", + "\"Ivria\" \n", + "\"Karin\" \n", + "\"Maya\" \n", + "\"Noa\" \n", + "\n", + " \n", + "\n", "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", - "בחזרור הראשון, המשתנה החדש שיצרנו, בשם student_name, יצביע על הערך הראשון ברשימה, Galia.
\n", + "\n", + "בחזרור הראשון, המשתנה החדש שיצרנו, בשם student_name, יצביע על הערך הראשון ברשימה, Galia.
" ] @@ -400,39 +399,39 @@ "metadata": {}, "source": [ "
\n", "נשים לב שהמשתנה student_name לא היה קיים לפני הלולאה, והלולאה היא המבנה הקסום שיוצר את המשתנה וגורם לו להצביע לערכים:\n", "\n", - "
\n", "חזרור ראשון, student_name מצביע על \"Galia\" \n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "\n", - " \n", - "\"Galia\" \n", - "\"Hadas\" \n", - "\"Hen\" \n", - "\"Ilana\" \n", - "\"Ivria\" \n", - "\"Karin\" \n", - "\"Maya\" \n", - "\"Noa\" \n", - "\n", - " \n", - " \n", + "student_name ↑ \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "חזרור ראשון, student_name מצביע על \"Galia\" \n", + "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "\n", + " \n", + "\"Galia\" \n", + "\"Hadas\" \n", + "\"Hen\" \n", + "\"Ilana\" \n", + "\"Ivria\" \n", + "\"Karin\" \n", + "\"Maya\" \n", + "\"Noa\" \n", + "\n", + " \n", + "\n", "student_name ↑ \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", "" @@ -442,7 +441,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "מייד לאחר מכן יודפס התוכן שאליו student_name מצביע:
" ] }, @@ -460,8 +459,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "סיימנו את האיטרציה! מה עכשיו?
\n", + "\n", + "סיימנו את האיטרציה! מה עכשיו?
" ] }, @@ -479,7 +478,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "עולים חזרה לראש הלולאה כדי לבדוק אם נשארו עוד איברים לעבור עליהם:\n", + "
\n", "המשתנה student_name יעבור להצביע על האיבר הבא, Hadas:\n", "
" ] @@ -489,39 +488,39 @@ "metadata": {}, "source": [ "\n", - "
\n", "חזרור שני, student_name מצביע על \"Hadas\" \n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "\n", - " \n", - "\"Galia\" \n", - "\"Hadas\" \n", - "\"Hen\" \n", - "\"Ilana\" \n", - "\"Ivria\" \n", - "\"Karin\" \n", - "\"Maya\" \n", - "\"Noa\" \n", - "\n", - " \n", - " \n", + "-8 \n", - "student_name ↑ \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "חזרור שני, student_name מצביע על \"Hadas\" \n", + "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "\n", + " \n", + "\"Galia\" \n", + "\"Hadas\" \n", + "\"Hen\" \n", + "\"Ilana\" \n", + "\"Ivria\" \n", + "\"Karin\" \n", + "\"Maya\" \n", + "\"Noa\" \n", + "\n", + " \n", + "\n", "-8 \n", + "student_name ↑ \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", "" @@ -531,7 +530,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "ושוב, נדפיס את המחרוזת ש־student_name מצביע עליה:\n", "
" ] @@ -550,7 +549,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כך נמשיך לבצע את הלולאה, עד שנגיע לאיבר האחרון ברשימה, התלמידה Noa:\n", "
" ] @@ -570,39 +569,39 @@ "metadata": {}, "source": [ "\n", - "
\n", "חזרור אחרון, student_name מצביע על \"Noa\" \n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "7 \n", - "\n", - " \n", - "\"Galia\" \n", - "\"Hadas\" \n", - "\"Hen\" \n", - "\"Ilana\" \n", - "\"Ivria\" \n", - "\"Karin\" \n", - "\"Maya\" \n", - "\"Noa\" \n", - "\n", - " \n", - " \n", + "-8 \n", - "-7 \n", - "-6 \n", - "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "student_name ↑ \n", - "חזרור אחרון, student_name מצביע על \"Noa\" \n", + "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "7 \n", + "\n", + " \n", + "\"Galia\" \n", + "\"Hadas\" \n", + "\"Hen\" \n", + "\"Ilana\" \n", + "\"Ivria\" \n", + "\"Karin\" \n", + "\"Maya\" \n", + "\"Noa\" \n", + "\n", + " \n", + "\n", "-8 \n", + "-7 \n", + "-6 \n", + "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "student_name ↑ \n", + "\n", "" @@ -612,7 +611,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "נדפיס בפעם האחרונה את המחרוזת שעליה אנחנו מצביעים:\n", "
" ] @@ -631,8 +630,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כשנחזור לראש הלולאה, נראה שעברנו על כל האיברים.
\n", + "\n", + "כשנחזור לראש הלולאה, נראה שעברנו על כל האיברים.
" ] @@ -641,32 +640,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "הלולאה תיפסק, וירוץ הקוד שנמצא אחרי הלולאה.\n", "\n", - "
החלקים בלולאת for \n", - " \n", - "\n", - " \n", - " \n", - " \n", - "החלק בלולאה \n", - "איפה בקוד \n", - "דוגמה \n", - "\n", - " \n", - "המבנה שאנחנו רוצים לעבור על כלל איבריו – חייב להיות iterable \n", - "אחרי המילה in \n", - "names_of_students_in_class \n", - "\n", - " \n", - "שם שנמציא למשתנה – בכל חזרור יכיל איבר מתוך ה־iterable \n", - "אחרי המילה for, לפני המילה in \n", - "student_name \n", - "\n", - " \n", - " \n", + "תוכן הלולאה – הפעולות שנרצה לבצע על כל איבר \n", - "אחרי הנקודתיים, בשורה חדשה (אחת או יותר), בהזחה \n", - "\n", - " print(student_name)
\n", + "
" ] }, @@ -674,22 +673,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "החלקים בלולאת for \n", + "\n", + "\n", + " \n", + "\n", + "\n", + "החלק בלולאה \n", + "איפה בקוד \n", + "דוגמה \n", + "\n", + " \n", + "המבנה שאנחנו רוצים לעבור על כלל איבריו – חייב להיות iterable \n", + "אחרי המילה in \n", + "names_of_students_in_class \n", + "\n", + " \n", + "שם שנמציא למשתנה – בכל חזרור יכיל איבר מתוך ה־iterable \n", + "אחרי המילה for, לפני המילה in \n", + "student_name \n", + "\n", + " \n", + "\n", "תוכן הלולאה – הפעולות שנרצה לבצע על כל איבר \n", + "אחרי הנקודתיים, בשורה חדשה (אחת או יותר), בהזחה \n", + "\n", + " print(student_name)
\n", - "\n", - " \n", - "\n", - "\n", - "\n", - "\n", - " שנו את הקוד שכתבתם למציאת האדם הגבוה ביותר בכיתה, כך שישתמש ב־
\n", - "for
ולא ב־while
.
\n", - " טיפ: השתמשו בפסאודו־קוד שהוצג לפני כן, והשוו בין ה־for
לבין ה־while
בדוגמה של הדפסת שמות התלמידים.
\n", - "\n", - "" ] }, @@ -697,18 +696,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### דוגמאות מילוליות נוספות" + "### דוגמאות מילוליות נוספות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " חשוב!
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " שנו את הקוד שכתבתם למציאת האדם הגבוה ביותר בכיתה, כך שישתמש ב־
\n", + "for
ולא ב־while
.
\n", + " טיפ: השתמשו בפסאודו־קוד שהוצג לפני כן, והשוו בין ה־for
לבין ה־while
בדוגמה של הדפסת שמות התלמידים.
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "
- עבור כל עמוד בספר – קרא את העמוד.
\n", - "- עבור כל צלחת – שטוף אותה במים חמים, קרצף אותה היטב בסקוץ' ספוג בסבון, נגב אותה במגבת יבשה ואחסן אותה בארון.
\n", - "- בהינתן רשימה של 1,000 תלמידים, חשב את הגובה הממוצע של תלמיד.
\n", - "- בליל כל הקדושים, התחפש, צא החוצה, ועבור כל בית ברחוב: גש לדלת, צלצל בפעמון, אמור \"ממתק או תעלול\", קח ממתק ואמור תודה.
\n", + "\n", + "
" ] }, @@ -716,16 +715,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מתי להשתמש?" + "### מתי להשתמש?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- עבור כל עמוד בספר – קרא את העמוד.
\n", + "- עבור כל צלחת – שטוף אותה במים חמים, קרצף אותה היטב בסקוץ' ספוג בסבון, נגב אותה במגבת יבשה ואחסן אותה בארון.
\n", + "- בהינתן רשימה של 1,000 תלמידים, חשב את הגובה הממוצע של תלמיד.
\n", + "- בליל כל הקדושים, התחפש, צא החוצה, ועבור כל בית ברחוב: גש לדלת, צלצל בפעמון, אמור \"ממתק או תעלול\", קח ממתק ואמור תודה.
\n", "\n", - "לולאת
for
יוצרת מבנה אלגנטי וקריא, ומתכנתים רבים מעדיפים אותה על פני לולאתwhile
.
\n", - "ננסה לעמוד על ההבדלים בין הלולאות:
\n", + "\n", + "לולאת
" ] }, @@ -733,33 +732,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
יוצרת מבנה אלגנטי וקריא, ומתכנתים רבים מעדיפים אותה על פני לולאתwhile
.
\n", + "ננסה לעמוד על ההבדלים בין הלולאות:
\n", "\n", - "
" ] }, @@ -1046,15 +1042,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### שינויים בתוך הלולאה" + "### שינויים בתוך הלולאה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "הבדלים בין while ל־for \n", - " \n", - "\n", - " \n", - " \n", - " \n", - "נתון להשוואה \n", - "לולאת \n", - "for
לולאת \n", - "while
\n", - " \n", - "מה \"מניע\" את הלולאה? \n", - "iterable שהלולאה תעבור על כל האיברים שלו \n", - "ביטוי שערכו הבוליאני שקול ל־ \n", - "True
או ל־False
\n", - " \n", - "מתי הלולאה מפסיקה \n", - "כשהלולאה עברה על כל האיברים של ה־iterable \n", - "כשמגיעים לתנאי של הפונקציה וערכו שקול ל־ \n", - "False
\n", - " \n", - "שימושים עיקריים \n", - "ביצוע פעולה עבור כל ערך בסדרת ערכים,\n", + " \n", + "\n", + "
" ] }, @@ -767,9 +766,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "הבדלים בין while ל־for \n", + "\n", + "\n", + " \n", + "\n", + "\n", + "נתון להשוואה \n", + "לולאת \n", + "for
לולאת \n", + "while
\n", + " \n", + "מה \"מניע\" את הלולאה? \n", + "iterable שהלולאה תעבור על כל האיברים שלו \n", + "ביטוי שערכו הבוליאני שקול ל־ \n", + "True
או ל־False
\n", + " \n", + "מתי הלולאה מפסיקה \n", + "כשהלולאה עברה על כל האיברים של ה־iterable \n", + "כשמגיעים לתנאי של הפונקציה וערכו שקול ל־ \n", + "False
\n", + " \n", - " \n", + "שימושים עיקריים \n", + "ביצוע פעולה עבור כל ערך בסדרת ערכים,\n", " כמו איברי רשימה או תווים במחרוזת \n", - "חזרה על פעולה כל עוד מצאנו שהמשימה לא הושלמה \n", - "חזרה על פעולה כל עוד מצאנו שהמשימה לא הושלמה \n", + "\n", + "\n", "\n", - "בשלב הנוכחי בקורס, תמיד נוכל להשתמש בלולאת
while
במקום בלולאתfor
, אך לא תמיד נוכל להחליף לולאותfor
בלולאותwhile
.
\n", - "באופן כללי, לולאותwhile
יכולות להוכיח את עצמן כשימושיות מאוד מפעם לפעם.
\n", + "\n", + "בשלב הנוכחי בקורס, תמיד נוכל להשתמש בלולאת
" ] @@ -778,21 +777,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "while
במקום בלולאתfor
, אך לא תמיד נוכל להחליף לולאותfor
בלולאותwhile
.
\n", + "באופן כללי, לולאותwhile
יכולות להוכיח את עצמן כשימושיות מאוד מפעם לפעם.
\n", "חשבו, לדוגמה, על מצב שבו אתם צריכים לקבל מהמשתמש קלט חדש כל עוד הקלט שלו לא תקין.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -800,36 +799,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### תרגיל ביניים: פורלולה 1" + "### תרגיל ביניים: פורלולה 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " כתבו 3 דוגמאות מילוליות נוספות ללולאות
\n", - "for
.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "בתחרות המרוצים \"פורלולה 1\", שבה משתתפות בקביעות 6 מכוניות מרוץ, אפשר להמר על הסדר שבו יגיעו המכוניות לקו הסיום.
\n", - "משתתף זוכה הוא משתתף שהצליח לנחש נכונה את סדר ההגעה של המכוניות לקו הסיום, עם לא יותר מ־2 טעויות.
\n", + "\n", + "בתחרות המרוצים \"פורלולה 1\", שבה משתתפות בקביעות 6 מכוניות מרוץ, אפשר להמר על הסדר שבו יגיעו המכוניות לקו הסיום.
\n", - "\n", - "
\n", + "משתתף זוכה הוא משתתף שהצליח לנחש נכונה את סדר ההגעה של המכוניות לקו הסיום, עם לא יותר מ־2 טעויות.
\n", "כתבו פונקציה שמקבלת הימור בודד ואת סדר ההגעה של המכוניות במרוץ, והחזירו אם ההימור זכה או הפסיד. \n", "\n", - "לדוגמה, במרוץ האחרון סדר ההגעה לקו הסיום היה:
\n", + "\n", + "לדוגמה, במרוץ האחרון סדר ההגעה לקו הסיום היה:
\n", - "\n", - "
\n", "[1, 2, 3, 4, 5, 6]\n", "\n", - "הנה דוגמאות להימורים של משתתפים ולתוצאתם:
\n", + "\n", + "הנה דוגמאות להימורים של משתתפים ולתוצאתם:
\n", - "\n", - "
\n", "\n", - "
- [1, 2, 3, 4, 5, 6] – הימור זוכה (0 טעויות)
\n", - "- [2, 1, 3, 4, 5, 6] – הימור זוכה (2 טעויות)
\n", - "- [1, 2, 6, 4, 5, 3] – הימור זוכה (2 טעויות)
\n", - "- [1, 2, 4, 4, 5, 6] – הימור זוכה (טעות אחת)
\n", - "- [1, 6, 2, 4, 5, 3] – הימור מפסיד (3 טעויות)
\n", - "- [5, 3, 2, 4, 6, 1] – הימור מפסיד (5 טעויות)
\n", - "- [6, 5, 4, 3, 2, 1] – הימור מפסיד (6 טעויות)
\n", + "\n", + "
" ] }, @@ -837,14 +833,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מבנים מורכבים" + "### מבנים מורכבים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- [1, 2, 3, 4, 5, 6] – הימור זוכה (0 טעויות)
\n", + "- [2, 1, 3, 4, 5, 6] – הימור זוכה (2 טעויות)
\n", + "- [1, 2, 6, 4, 5, 3] – הימור זוכה (2 טעויות)
\n", + "- [1, 2, 4, 4, 5, 6] – הימור זוכה (טעות אחת)
\n", + "- [1, 6, 2, 4, 5, 3] – הימור מפסיד (3 טעויות)
\n", + "- [5, 3, 2, 4, 6, 1] – הימור מפסיד (5 טעויות)
\n", + "- [6, 5, 4, 3, 2, 1] – הימור מפסיד (6 טעויות)
\n", "\n", + "
\n", "הרשימה הבאה מכילה tuple־ים בגודל 2 איברים:\n", "
" ] @@ -862,22 +858,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -885,8 +881,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו לולאת
for
שתדפיס עבור כל זוג מחרוזות ברשימה: Flip \"X\" to get \"Y\".
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו לולאת
\n", - "for
שתדפיס עבור כל זוג מחרוזות ברשימה: Flip \"X\" to get \"Y\".
\n", " לדוגמה, עבור הזוג האחרון מתוך 4 הזוגות, היא תדפיס: Flip \"ekans\" to get \"snake\".\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "כדי לפתור את התרגיל, כתבתם קוד שהשתמש במיקום של הערך הראשון (0) ושל הערך השני (1).
\n", + "\n", + "כדי לפתור את התרגיל, כתבתם קוד שהשתמש במיקום של הערך הראשון (0) ושל הערך השני (1).
" ] @@ -907,8 +903,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "כך אני פתרתי אותו:\n", "\n", - "נבחן דרך נוספת לפתור את התרגיל, רק שהפעם נשתמש בטריק שנקרא unpacking (או \"פירוק\").
\n", + "\n", + "נבחן דרך נוספת לפתור את התרגיל, רק שהפעם נשתמש בטריק שנקרא unpacking (או \"פירוק\").
" ] @@ -927,9 +923,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "כיוון שכל tuple ברשימת words מכיל בדיוק 2 איברים, נוכל לתת להם שמות כבר בראש הלולאה ולחלץ אותם מה־tuple:\n", "\n", - "בכל חזרור של הלולאה שכתובה למעלה, ה־
for
יעבור על tuple בודד מתוך words, בדיוק כמו שקרה עד עכשיו.
\n", - "השינוי הוא שבמקום שה־tuple יישמר כמו שהוא במשתנה בודד שהוגדר בראש הלולאה, הערכים שבו \"יחולצו\" למשתנים בראש הלולאה.
\n", + "\n", + "בכל חזרור של הלולאה שכתובה למעלה, ה־
" ] @@ -938,9 +934,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
יעבור על tuple בודד מתוך words, בדיוק כמו שקרה עד עכשיו.
\n", + "השינוי הוא שבמקום שה־tuple יישמר כמו שהוא במשתנה בודד שהוגדר בראש הלולאה, הערכים שבו \"יחולצו\" למשתנים בראש הלולאה.
\n", "הטריק הזה עובד כיוון שבראש הלולאה כתבנו מספר משתנים שזהה למספר הערכים שנמצאים בכל tuple.\n", "\n", - "לפניכם תרשים המתאר את תוכן המשתנה words.
\n", - "הטבלה הגדולה מייצגת את הרשימה words, וכל אחד מהתאים שבה מייצג tuple בתוך הרשימה.
\n", + "\n", + "לפניכם תרשים המתאר את תוכן המשתנה words.
" ] @@ -950,95 +946,95 @@ "metadata": {}, "source": [ "
\n", + "הטבלה הגדולה מייצגת את הרשימה words, וכל אחד מהתאים שבה מייצג tuple בתוך הרשימה.
\n", "בכל חזרור של ה־for
המופיע למעלה, המשתנה word יקבל ערך שמסומן באדום, והמשתנה reversed_word יקבל את הערך הירוק התואם לו. \n", "\n", - "
\n", + "תצוגה של המשתנה words ושל צורת הפירוק שלו \n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "\n", - " \n", + " תצוגה של המשתנה words ושל צורת הפירוק שלו \n", + "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "\n", + " \n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"star\" \n", - "\"rats\" \n", - "\n", - " \n", - " \n", + "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"star\" \n", + "\"rats\" \n", + "\n", + " \n", + "\n", "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"wolf\" \n", - "\"flow\" \n", - "\n", - " \n", - " \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"wolf\" \n", + "\"flow\" \n", + "\n", + " \n", + "\n", + "-2 \n", + "-1 \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"racecar\" \n", - "\"racecar\" \n", - "\n", - " \n", - " \n", + "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"racecar\" \n", + "\"racecar\" \n", + "\n", + " \n", + "\n", "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"ekans\" \n", - "\"snake\" \n", - "\n", - " \n", - " \n", + "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"ekans\" \n", + "\"snake\" \n", + "\n", + " \n", + "\n", "-2 \n", + "-1 \n", + "\n", - " \n", - " \n", + "\n", + "\n", + "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", - "בדרך כלל נעדיף להימנע משינוי רשימה בזמן ביצוע לולאת
for
.
\n", + "\n", + "בדרך כלל נעדיף להימנע משינוי רשימה בזמן ביצוע לולאת
" ] @@ -1063,14 +1059,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### שינוי של מספר האיברים ברשימה בזמן ריצת הלולאה" + "#### שינוי של מספר האיברים ברשימה בזמן ריצת הלולאה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "for
.
\n", "שינויים כאלו עלולים לגרום להתנהגות בלתי צפויה, ללולאות אין־סופיות ולקוד קשה במיוחד לקריאה.\n", "\n", + "
\n", " נבחן את קטע הקוד הבא, שעבור כל איבר ברשימה, מוציא איבר מסוף הרשימה:\n", "
" ] @@ -1092,8 +1088,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הלולאה הסתיימה מוקדם מהרגיל, כיוון שכשניסתה להגיע לתא שערכו
'd'
הוא כבר לא היה שם.
\n", + "\n", + " הלולאה הסתיימה מוקדם מהרגיל, כיוון שכשניסתה להגיע לתא שערכו
" ] @@ -1102,7 +1098,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "'d'
הוא כבר לא היה שם.
\n", " קוד שכזה אינו צפוי, קשה לקריאה ויוצר תקלים. מומלץ מאוד לא לשנות את מספר האיברים ב־iterable בזמן הריצה.\n", "\n", + "
\n", " פתרון אפשרי הוא ליצור עותק של הרשימה באמצעות הפעולה
" ] @@ -1125,14 +1121,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### עריכת הערכים שנמצאים ב־iterable" + "#### עריכת הערכים שנמצאים ב־iterable" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "list.copy()
ולהשתמש בו במקום:\n", "\n", + "
\n", " ננסה להכפיל כל תא ברשימה שלנו פי 2:\n", "
" ] @@ -1159,7 +1155,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " נוכל לראות שהרשימה נותרה ללא שינוי, למרות הלולאה שתכליתה היה להכפיל את איברי הרשימה פי 2.\n", "
" ] @@ -1168,9 +1164,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כדי להבין למה זה קרה, ננסה להיזכר בשיעור על mutability.
\n", - " במהלך כל חזרור, המשתנה num מקבל ערך כלשהו להצביע עליו.
\n", + "\n", + " כדי להבין למה זה קרה, ננסה להיזכר בשיעור על mutability.
" ] @@ -1179,15 +1175,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " במהלך כל חזרור, המשתנה num מקבל ערך כלשהו להצביע עליו.
\n", " לדוגמה, בחזרור הראשון num מצביע עלnumbers[0]
, המקום הראשון ברשימה:\n", "\n", - " בעצם הפעולה
num * 2
אנחנו יוצרים ערך חדש שמאוחסן בכתובת שונה.
\n", + "\n", + " בעצם הפעולה
" ] }, @@ -1195,14 +1191,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "num * 2
אנחנו יוצרים ערך חדש שמאוחסן בכתובת שונה.
\n", "\n", + "
\n", " הפעולה
" ] @@ -1211,16 +1207,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "num = num * 2
לא באמת \"תשנה ערך בתוך num\", אלא תגרום לו להצביע על ערך אחר.\n", "\n", - " נסכם כך: המשתנה num הצביע תחילה על מספר שנמצא בתוך הרשימה, ועכשיו הוא מצביע על מספר אחר.
\n", - " ההשמה, כרגיל, שינתה את המקום שעליו המשתנה מצביע, ולא את הערך שהמשתנה מצביע עליו.
\n", + "\n", + " נסכם כך: המשתנה num הצביע תחילה על מספר שנמצא בתוך הרשימה, ועכשיו הוא מצביע על מספר אחר.
" ] @@ -1229,14 +1225,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### דוגמאות נוספות" + "### דוגמאות נוספות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### סכום רשימה" + "#### סכום רשימה" ] }, { @@ -1259,7 +1255,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### ראשי תיבות" + "#### ראשי תיבות" ] }, { @@ -1291,14 +1287,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### סכום איברים חיוביים" + "#### סכום איברים חיוביים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " ההשמה, כרגיל, שינתה את המקום שעליו המשתנה מצביע, ולא את הערך שהמשתנה מצביע עליו.
\n", " בקוד שמתואר למעלה, לא שינינו את האיבר בתוך הרשימה.\n", "\n", + "
\n", " קלוט מהמשתמש מספרים. אם צריך, המר את הקלט כך שיהיה מסוג רשימה, ובה יהיו מספרים שלמים. סכום את האיברים הגדולים מ־0.\n", "
" ] @@ -1335,14 +1331,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### 7 בום" + "#### 7 בום" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " סכום את האיברים שמופיעים בכל מקום שביעי ברשימה.\n", "
" ] @@ -1367,23 +1363,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים" + "## תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### אקרוסטיכון" + "### אקרוסטיכון" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אקרוסטיכון הוא אמצעי ספרותי שבו משתמשים בכתיבת שירה.
\n", - "בשיר שבו יש אקרוסטיכון, כשנחבר את האות הראשונה בכל השורות, נקבל מסר מסוים.
\n", + "\n", + "אקרוסטיכון הוא אמצעי ספרותי שבו משתמשים בכתיבת שירה.
" ] @@ -1392,16 +1388,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "בשיר שבו יש אקרוסטיכון, כשנחבר את האות הראשונה בכל השורות, נקבל מסר מסוים.
\n", "ניקח לדוגמה את שירו של אדגר אלן פו, \"אקרוסטיכון\", שאותו הוא הקדיש ללטישיה אליזבת' לאנדון ובו מופיע האקרוסטיכון ELIZABETH:\n", "\n", - " Elizabeth it is in vain you say
\n", - " Love not — thou sayest it in so sweet a way:
\n", - " In vain those words from thee or L.E.L.
\n", - " Zantippe's talents had enforced so well:
\n", - " Ah! if that language from thy heart arise,
\n", - " Breath it less gently forth — and veil thine eyes.
\n", - " Endymion, recollect, when Luna tried
\n", - " To cure his love — was cured of all beside —
\n", - " His follie — pride — and passion — for he died.
\n", + "\n", + "Elizabeth it is in vain you say" ] }, @@ -1409,9 +1405,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "Love not — thou sayest it in so sweet a way:
\n", + "In vain those words from thee or L.E.L.
\n", + "Zantippe's talents had enforced so well:
\n", + "Ah! if that language from thy heart arise,
\n", + "Breath it less gently forth — and veil thine eyes.
\n", + "Endymion, recollect, when Luna tried
\n", + "To cure his love — was cured of all beside —
\n", + "His follie — pride — and passion — for he died.
\n", "\n", - "כתבו פונקציה שמקבלת שיר כמחרוזת.
\n", - "החזירו את האקרוסטיכון שנוצר אם ניקח את האות הראשונה מכל שורה בשיר.
\n", + "\n", + "כתבו פונקציה שמקבלת שיר כמחרוזת.
" ] }, @@ -1419,26 +1415,26 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### שעורה תרבותית" + "### שעורה תרבותית" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "החזירו את האקרוסטיכון שנוצר אם ניקח את האות הראשונה מכל שורה בשיר.
\n", "\n", - " שנים רבות חלפו מאז אותם ימי הקיץ בשדות השעורה, והזמרת סיגנט שכחה היכן החביאה את הזהב שלה.
\n", - " בידי סיגנט יש מפה, לפיה היא נמצאת כרגע בנקודה (0, 0) בשדה החיטה.
\n", - " המפה מתארת אילו צעדים היא צריכה לעשות כדי להגיע למטמון.
\n", + "\n", + " שנים רבות חלפו מאז אותם ימי הקיץ בשדות השעורה, והזמרת סיגנט שכחה היכן החביאה את הזהב שלה.
\n", - "
\n", + " בידי סיגנט יש מפה, לפיה היא נמצאת כרגע בנקודה (0, 0) בשדה החיטה.
\n", + " המפה מתארת אילו צעדים היא צריכה לעשות כדי להגיע למטמון.
\n", " עזרו לסיגנט לחשב: בהינתן שהיא תלך לפי כל הצעדים שמופיעים במפה – באיזו נקודה יימצא המטמון?\n", "\n", + "
\n", " לדוגמה: עבור הצעדים
\n", - "[(1, 5), (6, -2), (4, 3)]
יוחזר שהמטמון נמצא בנקודה(11, 6)
.\n", "\n", - " הסבר מורחב: קבלו רשימה של צעדים המורים לסיגנט כיצד ללכת.
\n", - " כל \"צעד\" מורכב מזוג מספרים שלמים, שיכולים להיות שליליים – הראשון מסמל כמה צעדים ללכת ימינה, והשני מסמל כמה צעדים ללכת למעלה.
\n", - " אם המספר הראשון שלילי, עליה ללכת את מספר הצעדים הזה שמאלה. אם המספר השני שלילי, עליה ללכת את מספר הצעדים הזה למטה.
\n", + "\n", + "הסבר מורחב: קבלו רשימה של צעדים המורים לסיגנט כיצד ללכת.
" ] @@ -1447,18 +1443,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### גבעת ווטרשיפ" + "### גבעת ווטרשיפ" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כל \"צעד\" מורכב מזוג מספרים שלמים, שיכולים להיות שליליים – הראשון מסמל כמה צעדים ללכת ימינה, והשני מסמל כמה צעדים ללכת למעלה.
\n", + " אם המספר הראשון שלילי, עליה ללכת את מספר הצעדים הזה שמאלה. אם המספר השני שלילי, עליה ללכת את מספר הצעדים הזה למטה.
\n", " כתבו פונקציה שמקבלת רשימה של צעדים ומחזירה את מיקום המטמון.\n", "\n", - " בגבעת ווטרשיפ קצב ההתרבות גבוה. בכל שנה נוספים עוד ועוד ארנבים לארנבייה.
\n", - " חומש הארנב החליט לנהל מעקב דמוגרפי אחרי הגידול.
\n", - " הוא מעוניין שתבנו לו פונקציה שמקבלת כפרמטר רשימה של מספר הארנבים שנולדו בכל שנה.
\n", - " הפונקציה תחזיר רשימה שבה כל תא מייצג את הכמות הנצברת של הארנבים בארנבייה עד כה.
\n", + "\n", + " בגבעת ווטרשיפ קצב ההתרבות גבוה. בכל שנה נוספים עוד ועוד ארנבים לארנבייה.
" ] diff --git a/week4/2_Dictionaries.ipynb b/week4/2_Dictionaries.ipynb index 672f8c3..c10638e 100644 --- a/week4/2_Dictionaries.ipynb +++ b/week4/2_Dictionaries.ipynb @@ -4,28 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# מילונים" + "# מילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " חומש הארנב החליט לנהל מעקב דמוגרפי אחרי הגידול.
\n", + " הוא מעוניין שתבנו לו פונקציה שמקבלת כפרמטר רשימה של מספר הארנבים שנולדו בכל שנה.
\n", + " הפונקציה תחזיר רשימה שבה כל תא מייצג את הכמות הנצברת של הארנבים בארנבייה עד כה.
\n", " לדוגמה: עבור הרשימה[1, 2, 3, 4]
, הפונקציה תחזיר[1, 3, 6, 10]
.\n", "\n", + "
\n", " ברשימה הבאה, כל תבליט מייצג אוסף של נתונים:\n", "
" ] @@ -34,11 +34,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- בחנות של האדון קשטן יש 2 בננות, 3 תפוחים ו־4 גזרים.
\n", - "- מספר הזהות של ג'ני הוא 086753092, של קווין 133713370, של איינשטיין 071091797 ושל מנחם 111111118.
\n", - "- לקווין מהסעיף הקודם יש צוללות בצבע אדום וכחול. הצוללות של ג'ני מהסעיף הקודם בצבע שחור וירוק. הצוללת שלי צהובה.
\n", - "- המחיר של פאי בחנות של קשטן הוא 3.141 ש\"ח. המחיר של אווז מחמד בחנות של קשטן הוא 9.0053 ש\"ח.
\n", + "\n", + "
" ] }, @@ -46,21 +46,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- בחנות של האדון קשטן יש 2 בננות, 3 תפוחים ו־4 גזרים.
\n", + "- מספר הזהות של ג'ני הוא 086753092, של קווין 133713370, של איינשטיין 071091797 ושל מנחם 111111118.
\n", + "- לקווין מהסעיף הקודם יש צוללות בצבע אדום וכחול. הצוללות של ג'ני מהסעיף הקודם בצבע שחור וירוק. הצוללת שלי צהובה.
\n", + "- המחיר של פאי בחנות של קשטן הוא 3.141 ש\"ח. המחיר של אווז מחמד בחנות של קשטן הוא 9.0053 ש\"ח.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -68,10 +68,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " נסו למצוא מאפיינים משותפים לאוספים שהופיעו מעלה.\n", "
\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " אפשר לחלק כל אחד מהאוספים שכתבנו למעלה ל־2 קבוצות ערכים.
\n", - " הראשונה – הנושאים של האוסף. עבור החנות של קשטן, לדוגמה, הפריט שאנחנו מחזיקים בחנות.
\n", - " השנייה – הפריטים שהם נתון כלשהו בנוגע לפריט הראשון: המלאי של אותו פריט, לדוגמה.
\n", + "\n", + " אפשר לחלק כל אחד מהאוספים שכתבנו למעלה ל־2 קבוצות ערכים.
" ] }, @@ -80,8 +80,8 @@ "metadata": {}, "source": [ "" ] }, @@ -89,8 +89,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הראשונה – הנושאים של האוסף. עבור החנות של קשטן, לדוגמה, הפריט שאנחנו מחזיקים בחנות.
\n", + " השנייה – הפריטים שהם נתון כלשהו בנוגע לפריט הראשון: המלאי של אותו פריט, לדוגמה.
\n", "\n", - " פריטים מהקבוצה הראשונה לעולם לא יחזרו על עצמם – אין היגיון בכך ש\"תפוח ירוק\" יופיע פעמיים ברשימת המלאי בחנות, ולא ייתכן מצב של שני מספרי זהות זהים.
\n", + "\n", + " פריטים מהקבוצה הראשונה לעולם לא יחזרו על עצמם – אין היגיון בכך ש\"תפוח ירוק\" יופיע פעמיים ברשימת המלאי בחנות, ולא ייתכן מצב של שני מספרי זהות זהים.
" ] @@ -99,7 +99,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הפריטים מהקבוצה השנייה, לעומת זאת, יכולים לחזור על עצמם – הגיוני שתהיה אותה כמות של בננות ותפוחים בחנות, או שיהיו אנשים בעלי מספרי זהות שונים שנקראים \"משה כהן\".\n", "\n", + "
\n", " נבחן לעומק את המאפיינים המשותפים בדוגמאות שלעיל.\n", "
" ] @@ -108,42 +108,42 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
" ] }, @@ -355,8 +355,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "המשותף לאוספים \n", - " \n", - "\n", - " \n", - " \n", - " \n", - "אוסף \n", - "הערך הקושר (קבוצה ראשונה) \n", - "הערך המתאים לו (קבוצה שנייה) \n", - "הסבר \n", - "\n", - " \n", - "מוצרים והמלאי שלהם בחנות \n", - "המוצר שנמכר בחנות \n", - "המלאי מאותו מוצר \n", - "יכולים להיות בחנות 5 תפוזים ו־5 תפוחים, אבל אין משמעות לחנות שיש בה 5 תפוחים וגם 3 תפוחים. \n", - "\n", - " \n", - "מספרי הזהות של אזרחים \n", - "תעודת הזהות \n", - "השם של בעל מספר הזהות \n", - "יכולים להיות הרבה אזרחים העונים לשם משה לוי, ולכל אחד מהם יהיה מספר זהות שונה. לא ייתכן שמספר זהות מסוים ישויך ליותר מאדם אחד. \n", - "\n", - " \n", - "בעלות על צוללות צבעוניות \n", - "בעל הצוללות \n", - "צבע הצוללות \n", - "יכול להיות שגם לקווין וגם לג'ני יש צוללות בצבעים זהים. ג'ני, קווין ואני הם אנשים ספציפיים, שאין יותר מ־1 מהם בעולם (עד שנמציא דרך לשבט אנשים). \n", - "\n", - " \n", - " \n", + "מוצרים ומחיריהם \n", - "שם המוצר \n", - "מחיר המוצר \n", - "לכל מוצר מחיר נקוב. עבור שני מוצרים שונים בחנות יכול להיות מחיר זהה. \n", - "\n", + "
" ] }, @@ -151,16 +151,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מיפוי ערכים" + "### מיפוי ערכים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "המשותף לאוספים \n", + "\n", + "\n", + " \n", + "\n", + "\n", + "אוסף \n", + "הערך הקושר (קבוצה ראשונה) \n", + "הערך המתאים לו (קבוצה שנייה) \n", + "הסבר \n", + "\n", + " \n", + "מוצרים והמלאי שלהם בחנות \n", + "המוצר שנמכר בחנות \n", + "המלאי מאותו מוצר \n", + "יכולים להיות בחנות 5 תפוזים ו־5 תפוחים, אבל אין משמעות לחנות שיש בה 5 תפוחים וגם 3 תפוחים. \n", + "\n", + " \n", + "מספרי הזהות של אזרחים \n", + "תעודת הזהות \n", + "השם של בעל מספר הזהות \n", + "יכולים להיות הרבה אזרחים העונים לשם משה לוי, ולכל אחד מהם יהיה מספר זהות שונה. לא ייתכן שמספר זהות מסוים ישויך ליותר מאדם אחד. \n", + "\n", + " \n", + "בעלות על צוללות צבעוניות \n", + "בעל הצוללות \n", + "צבע הצוללות \n", + "יכול להיות שגם לקווין וגם לג'ני יש צוללות בצבעים זהים. ג'ני, קווין ואני הם אנשים ספציפיים, שאין יותר מ־1 מהם בעולם (עד שנמציא דרך לשבט אנשים). \n", + "\n", + " \n", + "\n", "מוצרים ומחיריהם \n", + "שם המוצר \n", + "מחיר המוצר \n", + "לכל מוצר מחיר נקוב. עבור שני מוצרים שונים בחנות יכול להיות מחיר זהה. \n", + "\n", - " כמו שראינו בדוגמאות, מצב נפוץ במיוחד הוא הצורך לאחסן מיפוי בין ערכים.
\n", - " נחשוב על המיפוי בחנות של קשטן, שבה הוא סופר את המלאי עבור כל מוצר.
\n", + "\n", + " כמו שראינו בדוגמאות, מצב נפוץ במיוחד הוא הצורך לאחסן מיפוי בין ערכים.
" ] @@ -179,9 +179,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " נחשוב על המיפוי בחנות של קשטן, שבה הוא סופר את המלאי עבור כל מוצר.
\n", " נוכל לייצג את מלאי המוצרים בחנות של קשטן באמצעות הידע שכבר יש לנו. נשתמש בקוד הבא:\n", "\n", - " עבור כל תא ברשימת items, שמרנו במקום התואם ברשימת stock את הכמות שנמצאת ממנו בחנות.
\n", - " יש 4 גזרים, 3 תפוחים ו־2 בננות על המדף בחנות של אדון קשטן.
\n", + "\n", + " עבור כל תא ברשימת items, שמרנו במקום התואם ברשימת stock את הכמות שנמצאת ממנו בחנות.
" ] @@ -202,10 +202,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " יש 4 גזרים, 3 תפוחים ו־2 בננות על המדף בחנות של אדון קשטן.
\n", " שליפה של כמות המלאי עבור מוצר כלשהו בחנות תתבצע בצורה הבאה:\n", "\n", - " בשורה הראשונה בגוף הפונקציה מצאנו את מיקום המוצר שאנחנו מחפשים במלאי. נניח, \"תפוח\" מוחזק במקום 1 ברשימה.
\n", - " בשורה השנייה פנינו לרשימה השנייה, זו שמאחסנת את המלאי עבור כל מוצר, ומצאנו את המלאי שנמצא באותו מיקום.
\n", - " כמות היחידות של מוצר מאוחסנת במספר תא מסוים, התואם למספר התא ברשימה של שמות המוצרים. זו הסיבה לכך שהרעיון עובד.
\n", + "\n", + " בשורה הראשונה בגוף הפונקציה מצאנו את מיקום המוצר שאנחנו מחפשים במלאי. נניח, \"תפוח\" מוחזק במקום 1 ברשימה.
" ] }, @@ -222,7 +222,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " בשורה השנייה פנינו לרשימה השנייה, זו שמאחסנת את המלאי עבור כל מוצר, ומצאנו את המלאי שנמצא באותו מיקום.
\n", + " כמות היחידות של מוצר מאוחסנת במספר תא מסוים, התואם למספר התא ברשימה של שמות המוצרים. זו הסיבה לכך שהרעיון עובד.
\n", "\n", + "
\n", " צורה נוספת למימוש אותו רעיון תהיה שמירה של זוגות סדורים בתוך רשימה של tuple־ים:\n", "
" ] @@ -240,7 +240,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ברשימה הזו הרעיון נראה מובן יותר. בואו נממש דרך לחלץ איבר מסוים מתוך הרשימה:\n", "
" ] @@ -263,9 +263,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " עבור כל tuple ברשימה, בדקנו אם שם הפריט שהוא מכיל תואם לשם הפריט שחיפשנו.
\n", - " אם כן, החזרנו את הכמות של אותו פריט במלאי.
\n", + "\n", + " עבור כל tuple ברשימה, בדקנו אם שם הפריט שהוא מכיל תואם לשם הפריט שחיפשנו.
" ] @@ -283,21 +283,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " אם כן, החזרנו את הכמות של אותו פריט במלאי.
\n", " שימוש בפונקציה הזו נראה כך:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -305,22 +305,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " השתמשו ב־unpacking שלמדנו במחברת הקודמת כדי לפשט את לולאת ה־
\n", - "for
בקוד שלget_stock
.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -328,24 +328,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## הגדרה" + "## הגדרה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### מה זה מילון?" + "### מה זה מילון?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " שני קטעי הקוד שנתנו כדוגמה פישטו את המצב יתר על המידה, והם אינם מתייחסים למצב שבו הפריט חסר במלאי.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " שני קטעי הקוד שנתנו כדוגמה פישטו את המצב יתר על המידה, והם אינם מתייחסים למצב שבו הפריט חסר במלאי.
\n", - "
\n", " הרחיבו את הפונקציותget_stock
כך שיחזירו 0 אם הפריט חסר במלאי.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "מילון הוא סוג ערך בפייתון.
\n", - "תכליתו היא ליצור קשר בין סדרה של נתונים שנקראת מפתחות, לבין סדרה אחרת של נתונים שנקראת ערכים.
\n", - "לכל מפתח יש ערך שעליו הוא מצביע.
\n", + "\n", + "מילון הוא סוג ערך בפייתון.
" ] }, @@ -353,13 +353,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "תכליתו היא ליצור קשר בין סדרה של נתונים שנקראת מפתחות, לבין סדרה אחרת של נתונים שנקראת ערכים.
\n", + "לכל מפתח יש ערך שעליו הוא מצביע.
\n", "\n", + "
\n", " ישנן דוגמאות אפשריות רבות לקשרים כאלו:\n", "
\n", - "\n", - "
- קשר בין ערים בעולם לבין מספר האנשים שחיים בהן.
\n", - "- קשר בין ברקוד של מוצרים בחנות לבין מספר הפריטים במלאי מכל מוצר.
\n", - "- קשר בין מילים לבין רשימת הפירושים שלהן במילון אבן־שושן.
\n", + "\n", + "
" ] }, @@ -367,13 +367,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- קשר בין ערים בעולם לבין מספר האנשים שחיים בהן.
\n", + "- קשר בין ברקוד של מוצרים בחנות לבין מספר הפריטים במלאי מכל מוצר.
\n", + "- קשר בין מילים לבין רשימת הפירושים שלהן במילון אבן־שושן.
\n", "\n", - "לערך המצביע נקרא מפתח (key). זה האיבר מבין זוג האיברים שעל פיו נשמע הגיוני יותר לעשות חיפוש:
\n", + "\n", + "לערך המצביע נקרא מפתח (key). זה האיבר מבין זוג האיברים שעל פיו נשמע הגיוני יותר לעשות חיפוש:
\n", - "
\n", "\n", - "
- העיר שאנחנו רוצים לדעת את מספר התושבים בה.
\n", - "- הברקוד שאנחנו רוצים לדעת כמה פריטים ממנו קיימים במלאי.
\n", - "- המילה שאת הפירושים שלה אנחנו רוצים למצוא.
\n", + "\n", + "
" ] }, @@ -381,13 +381,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- העיר שאנחנו רוצים לדעת את מספר התושבים בה.
\n", + "- הברקוד שאנחנו רוצים לדעת כמה פריטים ממנו קיימים במלאי.
\n", + "- המילה שאת הפירושים שלה אנחנו רוצים למצוא.
\n", "\n", - "לערך השני מבין שני הערכים בזוג, נקרא... ובכן, ערך (value). זה הנתון שנרצה למצוא לפי המפתח:
\n", + "\n", + "לערך השני מבין שני הערכים בזוג, נקרא... ובכן, ערך (value). זה הנתון שנרצה למצוא לפי המפתח:
\n", - "
\n", "\n", - "
- מספר התושבים בעיר.
\n", - "- מספר הפריטים הקיימים במלאי עבור ברקוד מסוים.
\n", - "- הפירושים של המילה במילון.
\n", + "\n", + "
" ] }, @@ -395,7 +395,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מספר התושבים בעיר.
\n", + "- מספר הפריטים הקיימים במלאי עבור ברקוד מסוים.
\n", + "- הפירושים של המילה במילון.
\n", "\n", + "
\n", "אם כך, מילון הוא בסך הכול אוסף של זוגות שכאלו: מפתחות וערכים.
" ] }, @@ -403,21 +403,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## הבסיס" + "## הבסיס" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### יצירת מילון" + "### יצירת מילון" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "ניצור מילון חדש:
" ] }, @@ -434,8 +434,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "במילון הזה ישנם שלושה ערכים: הגיל של ים, של מתושלח ושל בייבי־גרוט.
\n", + "\n", + "במילון הזה ישנם שלושה ערכים: הגיל של ים, של מתושלח ושל בייבי־גרוט.
" ] @@ -444,7 +444,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "המפתחות במילון הזה הם Yam (הערך הקשור למפתח הזה הוא 27), Methuselah (עם הערך 969) ו־Baby Groot (אליו הוצמד הערך 3).\n", "\n", + "
\n", "יצרנו את המילון כך:\n", "
" ] @@ -453,16 +453,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
" ] }, @@ -471,8 +471,8 @@ "metadata": {}, "source": [ "" ] }, @@ -480,7 +480,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- פתחנו סוגריים מסולסלים.
\n", - "- יצרנו זוגות של מפתחות וערכים, מופרדים בפסיק:\n", + "
\n", + "\n", + "
\n", + "- פתחנו סוגריים מסולסלים.
\n", + "- יצרנו זוגות של מפתחות וערכים, מופרדים בפסיק:\n", "
\n", - "\n", - "
\n", - "- המפתח.
\n", - "- הפרדה בנקודתיים.
\n", - "- הערך.
\n", - "- סגרנו סוגריים מסולסלים.
\n", + "- המפתח.
\n", + "- הפרדה בנקודתיים.
\n", + "- הערך.
\n", + "- סגרנו סוגריים מסולסלים.
\n", "\n", + "
\n", "אפשר ליצור מילון ריק בעזרת פתיחה וסגירה של סוגריים מסולסלים:
" ] }, @@ -497,21 +497,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -519,14 +519,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### אחזור ערך" + "### אחזור ערך" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " צרו מילון עבור המלאי בחנות של אדון קשטן.\n", "
\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", "ניזכר כיצד מאחזרים ערך מתוך רשימה:\n", "
" ] @@ -544,7 +544,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כדי לחלץ את הערך שנמצא במקום 2 ברשימה names, נכתוב:\n", "
" ] @@ -562,8 +562,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "עד כאן הכול מוכר.
\n", + "\n", + "עד כאן הכול מוכר.
" ] @@ -581,7 +581,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "ניקח את המילון שמייצג את המלאי בחנות של אדון קשטן:\n", "\n", + "
\n", "כדי לחלץ את ערך המלאי שנמצא במקום שבו המפתח הוא 'banana', נרשום את הביטוי הבא:\n", "
" ] @@ -599,7 +599,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "כיוון שבמילון המפתח הוא זה שמצביע על הערך ולא להפך, אפשר לאחזר ערך לפי מפתח, אבל אי־אפשר לאחזר מפתח לפי ערך.
" ] }, @@ -607,16 +607,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -624,16 +624,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הוספה ועדכון" + "### הוספה ועדכון" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " ביום־יום, השתמשו במילה \"בְּמָקוֹם\" (b'e-ma-qom) כתחליף למילים סוגריים מרובעים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " ביום־יום, השתמשו במילה \"בְּמָקוֹם\" (b'e-ma-qom) כתחליף למילים סוגריים מרובעים.
\n", - "
\n", " לדוגמה: עבור שורת הקוד האחרונה, אימרוitems במקום banana.\n", "\n", - "אפשר להוסיף מפתח וערך למילון, באמצעות השמת הערך אל המילון במקום של המפתח.
\n", - "ניקח כדוגמה מקרה שבו יש לנו במלאי מלון אחד.
\n", + "\n", + "אפשר להוסיף מפתח וערך למילון, באמצעות השמת הערך אל המילון במקום של המפתח.
" ] @@ -651,7 +651,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "ניקח כדוגמה מקרה שבו יש לנו במלאי מלון אחד.
\n", "המפתח הוא melon והערך הוא 1, ולכן נשתמש בהשמה הבאה: \n", "\n", + "
\n", "אם הגיעו עוד 4 מלונים לחנות של אדון קשטן, נוכל לעדכן את מלאי המלונים באמצעות השמה למקום הנכון במילון:\n", "
" ] @@ -669,17 +669,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### כללי המשחק" + "### כללי המשחק" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- לא יכולים להיות 2 מפתחות זהים במילון.
\n", - "- המפתחות במילון חייבים להיות immutables.
\n", - "- אנחנו נתייחס למילון כאל מבנה ללא סדר מסוים (אין \"איבר ראשון\" או \"איבר אחרון\").
\n", + "\n", + "
" ] }, @@ -687,16 +687,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- לא יכולים להיות 2 מפתחות זהים במילון.
\n", + "- המפתחות במילון חייבים להיות immutables.
\n", + "- אנחנו נתייחס למילון כאל מבנה ללא סדר מסוים (אין \"איבר ראשון\" או \"איבר אחרון\").
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -704,18 +704,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סיכום ביניים" + "### סיכום ביניים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בגרסאות האחרונות של פייתון הפך מילון להיות מבנה סדור, שבו סדר האיברים הוא סדר ההכנסה שלהם למילון.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " בגרסאות האחרונות של פייתון הפך מילון להיות מבנה סדור, שבו סדר האיברים הוא סדר ההכנסה שלהם למילון.
\n", - "
\n", " למרות זאת, רק במצבים נדירים נצטרך להתייחס לסדר שבו האיברים מסודרים במילון, ובשלב זה נעדיף שלא להתייחס לתכונה הזו.\n", "\n", - "
- מילון הוא מבנה שבנוי זוגות־זוגות: יש ערכים ומפתחות, ולכל מפתח יש ערך אחד שעליו הוא מצביע.
\n", - "- נתייחס למילון כאל מבנה ללא סדר מסוים. אין \"איבר ראשון\" או \"איבר אחרון\".
\n", - "- בניגוד לרשימה, כאן ה\"מקום\" שאליו אנחנו פונים כדי לאחזר ערך הוא המפתח, ולא מספר שמייצג את המקום הסידורי של התא.
\n", - "- בעזרת מפתח אפשר להגיע לערך המוצמד אליו, אבל לא להפך.
\n", + "\n", + "
" ] }, @@ -723,16 +723,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מילון הוא מבנה שבנוי זוגות־זוגות: יש ערכים ומפתחות, ולכל מפתח יש ערך אחד שעליו הוא מצביע.
\n", + "- נתייחס למילון כאל מבנה ללא סדר מסוים. אין \"איבר ראשון\" או \"איבר אחרון\".
\n", + "- בניגוד לרשימה, כאן ה\"מקום\" שאליו אנחנו פונים כדי לאחזר ערך הוא המפתח, ולא מספר שמייצג את המקום הסידורי של התא.
\n", + "- בעזרת מפתח אפשר להגיע לערך המוצמד אליו, אבל לא להפך.
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -740,22 +740,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מעבר על מילון" + "## מעבר על מילון" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### לולאת for" + "### לולאת for" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " חדי העין שמו לב שאנחנו מצליחים להוסיף ערכים למילון, ולשנות בו ערכים קיימים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " חדי העין שמו לב שאנחנו מצליחים להוסיף ערכים למילון, ולשנות בו ערכים קיימים.
\n", - "
\n", " מהתכונה הזו אנחנו למדים שמילון הוא mutable.\n", "\n", - "כיוון שמילון הוא iterable, דרך מקובלת לעבור עליו היא באמצעות לולאת
for
.
\n", + "\n", + "כיוון שמילון הוא iterable, דרך מקובלת לעבור עליו היא באמצעות לולאת
" ] @@ -775,8 +775,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
.
\n", "ננסה להשתמש בלולאתfor
על מילון, ונראה מה התוצאות:\n", "\n", - " נראה שקיבלנו רק את המפתחות, בלי הערכים.
\n", + "\n", + " נראה שקיבלנו רק את המפתחות, בלי הערכים.
" ] @@ -785,8 +785,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נסיק מכאן שמילון הוא אמנם iterable, אך בכל איטרציה הוא מחזיר לנו רק את המפתח, בלי הערך.\n", "\n", - " אנחנו כבר יודעים איך מחלצים את הערך של מפתח מסוים.
\n", + "\n", + " אנחנו כבר יודעים איך מחלצים את הערך של מפתח מסוים.
" ] @@ -808,7 +808,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נוכל להשתמש בידע הזה כדי לקבל בכל חזרור גם את המפתח, וגם את הערך:\n", "\n", + "
\n", "אבל הפתרון הזה לא נראה אלגנטי במיוחד, ונראה שנוכל למצוא אחד טוב יותר.\n", "
" ] @@ -817,8 +817,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לעזרתנו נחלצת הפעולה
items
, השייכת לערכים מסוג מילון.
\n", + "\n", + "לעזרתנו נחלצת הפעולה
" ] @@ -836,7 +836,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "items
, השייכת לערכים מסוג מילון.
\n", "הפעולה הזו מחזירה זוגות איברים, כאשר בכל זוג האיבר הראשון הוא המפתח והאיבר השני הוא הערך.\n", "\n", + "
\n", "מאחר שמדובר באיברים שבאים בזוגות, נוכל להשתמש בפירוק איברים כפי שלמדנו בשיעור על לולאות
" ] @@ -856,9 +856,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "for
:\n", "\n", - "בלולאה שמופיעה למעלה ניצלנו את העובדה שהפעולה
items
מחזירה לנו איברים בזוגות: מפתח וערך.
\n", - "בכל חזרור, אנחנו מכניסים למשתנה key את האיבר הראשון בזוג, ולמשתנה value את האיבר השני בזוג.
\n", + "\n", + "בלולאה שמופיעה למעלה ניצלנו את העובדה שהפעולה
" ] @@ -878,15 +878,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "items
מחזירה לנו איברים בזוגות: מפתח וערך.
\n", + "בכל חזרור, אנחנו מכניסים למשתנה key את האיבר הראשון בזוג, ולמשתנה value את האיבר השני בזוג.
\n", "נוכל להיות אפילו אלגנטיים יותר ולתת למשתנים הללו שמות ראויים:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -894,24 +894,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מפתחות שלא קיימים" + "## מפתחות שלא קיימים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### הבעיה" + "### הבעיה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " כתבו פונקציה שמקבלת מילון ומדפיסה עבור כל מפתח את האורך של הערך המוצמד אליו.\n", "
\n", - "\n", - "מילונים הם טיפוסים קצת רגישים. הם לא אוהבים כשמזכירים להם מה אין בהם.
\n", - "אם ננסה לפנות למילון ולבקש ממנו מפתח שאין לו, נקבל הודעת שגיאה.
\n", - "בפעמים הראשונות שתתעסקו עם מילונים, יש סיכוי לא מבוטל שתקבלוKeyError
שנראה כך:
\n", + "\n", + "מילונים הם טיפוסים קצת רגישים. הם לא אוהבים כשמזכירים להם מה אין בהם.
" ] }, @@ -929,15 +929,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + "אם ננסה לפנות למילון ולבקש ממנו מפתח שאין לו, נקבל הודעת שגיאה.
\n", + "בפעמים הראשונות שתתעסקו עם מילונים, יש סיכוי לא מבוטל שתקבלוKeyError
שנראה כך:
\n", "in
במילונים" + "###in
במילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "יש כמה דרכים לפתור בעיה זו.
\n", + "\n", + "יש כמה דרכים לפתור בעיה זו.
" ] }, @@ -955,8 +955,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "דרך אפשרית אחת היא לבדוק שהמפתח קיים לפני שאנחנו ניגשים אליו:\n", - "כאן השתמשנו באופרטור
in
כדי לבדוק אם מפתח מסוים נמצא במילון.
\n", + "\n", + "כאן השתמשנו באופרטור
" ] @@ -981,9 +981,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "in
כדי לבדוק אם מפתח מסוים נמצא במילון.
\n", "נוכל גם לבקש את הערך לאחר שבדקנו שהוא קיים:\n", "\n", - "בקוד שלמעלה, השתמשנו באופרטור ההשוואה
in
כדי לבדוק אם מפתח מסוים (\"אכילס\") קיים בתוך המילון שיצרנו בשורה הראשונה.
\n", - "אם הוא נמצא שם, חילצנו את הערך שמוצמד לאותו מפתח (ל\"אכילס\"). אם לא, המצאנו ערך משלנו – \"פוני\".
\n", + "\n", + "בקוד שלמעלה, השתמשנו באופרטור ההשוואה
" ] }, @@ -991,16 +991,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "in
כדי לבדוק אם מפתח מסוים (\"אכילס\") קיים בתוך המילון שיצרנו בשורה הראשונה.
\n", + "אם הוא נמצא שם, חילצנו את הערך שמוצמד לאותו מפתח (ל\"אכילס\"). אם לא, המצאנו ערך משלנו – \"פוני\".
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1008,23 +1008,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מעבר על מילון יחזיר בכל חזרור מפתח מהמילון, ללא הערך הקשור אליו.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " מעבר על מילון יחזיר בכל חזרור מפתח מהמילון, ללא הערך הקשור אליו.
\n", - "
\n", " מסיבה זו, אופרטור ההשוואהin
יבדוק רק אם קיים מפתח מסוים במילון, ולא יבדוק אם ערך שכזה קיים.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1032,7 +1032,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו פונקציה שמקבלת שלושה פרמטרים: מילון, מפתח וערך ברירת מחדל.
\n", - " הפונקציה תחפש את המפתח במילון, ואם הוא קיים תחזיר את הערך שלו.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו פונקציה שמקבלת שלושה פרמטרים: מילון, מפתח וערך ברירת מחדל.
\n", - "
\n", + " הפונקציה תחפש את המפתח במילון, ואם הוא קיים תחזיר את הערך שלו.
\n", " אם המפתח לא קיים במילון, הפונקציה תחזיר את ערך ברירת המחדל.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", "ננסה לכתוב את הרעיון בקוד שלמעלה כפונקציה כללית:\n", "
" ] @@ -1054,9 +1054,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "הפונקציה שלמעלה מקבלת מילון, מפתח וערך ברירת מחדל.
\n", - "אם היא מוצאת את המפתח במילון, היא מחזירה את הערך של אותו מפתח.
\n", + "\n", + "הפונקציה שלמעלה מקבלת מילון, מפתח וערך ברירת מחדל.
" ] @@ -1065,7 +1065,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אם היא מוצאת את המפתח במילון, היא מחזירה את הערך של אותו מפתח.
\n", "אם היא לא מוצאת את המפתח במילון, היא מחזירה את ערך ברירת המחדל שנקבע.\n", "\n", + "
\n", "נבדוק שהפונקציה עובדת:\n", "
" ] @@ -1085,7 +1085,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "ובכן, זו פונקציה כייפית. כמה נוח היה לו היא הייתה פעולה של מילון.
" ] }, @@ -1093,15 +1093,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הפעולהget
במילונים" + "### הפעולהget
במילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "מי היה מאמין, יש פעולה כזו במילונים! ננסה להפעיל אותה על המילון שלנו.
\n", + "\n", + "מי היה מאמין, יש פעולה כזו במילונים! ננסה להפעיל אותה על המילון שלנו.
" ] @@ -1121,9 +1121,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "שימו לב לצורת הקריאה לפעולה, ששונה מהקריאה לפונקציה שכתבנו למעלה – שם המשתנה של המילון בא לפני שם הפעולה. מדובר בפעולה, ולא בפונקציה:\n", "\n", - "טריק קסום אחרון שנראה הוא שהפעולה
get
סלחנית ממש, ומתפקדת גם אם לא נותנים לה ערך ברירת מחדל.
\n", - "אם תספקו רק את שם המפתח שממנו תרצו לאחזר ערך, היא תחפש אותו ותחזיר את הערך שלו, אם הוא קיים.
\n", + "\n", + "טריק קסום אחרון שנראה הוא שהפעולה
" ] @@ -1143,16 +1143,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get
סלחנית ממש, ומתפקדת גם אם לא נותנים לה ערך ברירת מחדל.
\n", + "אם תספקו רק את שם המפתח שממנו תרצו לאחזר ערך, היא תחפש אותו ותחזיר את הערך שלו, אם הוא קיים.
\n", "אם המפתח לא קיים ולא סופק ערך ברירת מחדל, היא תחזיר את הערךNone
:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1160,42 +1160,42 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מונחים" + "## מונחים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הערך המיוחד
None
הוא דרך פייתונית להגיד \"כלום\".
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " הערך המיוחד
\n", - "None
הוא דרך פייתונית להגיד \"כלום\".
\n", " אפשר לדמיין אותו כמו רִיק (וָקוּם). לא הערך המספרי אפס, לאFalse
. פשוט כלום.\n", "\n", + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים" + "## תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### מסר של יום טוב" + "### מסר של יום טוב" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", "
" + "- מילון
- טיפוס פייתוני שמאפשר לנו לשמור זוגות סדורים של מפתחות וערכים, שבהם כל מפתח מצביע על ערך.
\n", "- מפתח
- הנתון שלפיו נחפש את הערך הרצוי במילון, ויופיע כאיבר הראשון בזיווג שבין מפתח לערך.
\n", "- ערך
- הנתון שעליו מצביע המפתח במילון, יתקבל כאשר נחפש במילון לפי אותו מפתח. יופיע כאיבר השני בזיווג שבין מפתח לערך.
- \n", "
- זוג סדור
- זוג של שני איברים הקשורים זה לזה. במקרה של מילון, מפתח וערך.
\n", - "\n", - "יוגב נבו קיבל מסר מוצפן מאדון יום טוב, והצליח לשים את ידו על שיטה לפענוח המסר.
\n", - "כדי לפענח את המסר, החליפו כל אות במסר הסודי באות התואמת לה, לפי המילון המופיע למטה.
\n", + "\n", + "יוגב נבו קיבל מסר מוצפן מאדון יום טוב, והצליח לשים את ידו על שיטה לפענוח המסר.
" ] @@ -1232,24 +1232,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מראה מראה שעל הקיר" + "### מראה מראה שעל הקיר" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כדי לפענח את המסר, החליפו כל אות במסר הסודי באות התואמת לה, לפי המילון המופיע למטה.
\n", "לדוגמה, דאגו שכל המופעים של האות O במסר SONG יוחלפו באות A.\n", "\n", - "חברו של יום טוב, חיים, שלח ליום טוב מסר מוצפן.
\n", - "למרבה הצער יוגב שם את ידיו רק על מפת ההצפנה, ולא על מפת הפענוח.
\n", - "צרו ממילון ההצפנה מילון פענוח, שבו:
\n", + "\n", + "חברו של יום טוב, חיים, שלח ליום טוב מסר מוצפן.
\n", - "
\n", + "למרבה הצער יוגב שם את ידיו רק על מפת ההצפנה, ולא על מפת הפענוח.
\n", + "צרו ממילון ההצפנה מילון פענוח, שבו:
\n", "\n", - "
- הערכים במילון הפענוח שתיצרו הם המפתחות ממילון ההצפנה.
\n", - "- המפתחות במילון הפענוח שתיצרו הם הערכים ממילון ההצפנה.
\n", + "\n", + "
\n", - "- הערכים במילון הפענוח שתיצרו הם המפתחות ממילון ההצפנה.
\n", + "- המפתחות במילון הפענוח שתיצרו הם הערכים ממילון ההצפנה.
\n", "\n", - "לדוגמה, המילון
{'a': '1', 'b': 2}
יהפוך למילון{'1': 'a', '2': 'b'}
.
\n", + "\n", + "לדוגמה, המילון
" ] @@ -1287,16 +1287,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### פטנט, או ברונו הפיל?" + "### פטנט, או ברונו הפיל?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "{'a': '1', 'b': 2}
יהפוך למילון{'1': 'a', '2': 'b'}
.
\n", "השתמשו במילון הפענוח שיצרתם כדי לפענח את המסר שנשלח.\n", "\n", - "בספרו המפורסם של טולסטוי \"מלחמה ושלום\" העלילה מתרחשת בתקופת הפלישה של נפוליאון לרוסיה.
\n", - "אלכנדרוס הראשן התערב עם ברונו הפיל שהוא המציא פטנט, שבעזרתו הוא יכול למצוא את המספר שהופיע הכי הרבה פעמים בכל ספר שהוא.
\n", + "\n", + "בספרו המפורסם של טולסטוי \"מלחמה ושלום\" העלילה מתרחשת בתקופת הפלישה של נפוליאון לרוסיה.
" ] diff --git a/week4/3_Dictionaries_part2.ipynb b/week4/3_Dictionaries_part2.ipynb index a9885b7..beaa8b9 100644 --- a/week4/3_Dictionaries_part2.ipynb +++ b/week4/3_Dictionaries_part2.ipynb @@ -4,30 +4,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# מילונים – חלק שני" + "# מילונים – חלק שני" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "אלכנדרוס הראשן התערב עם ברונו הפיל שהוא המציא פטנט, שבעזרתו הוא יכול למצוא את המספר שהופיע הכי הרבה פעמים בכל ספר שהוא.
\n", "השתמשו בקובץ המצורף war-and-peace.txt שנמצא בתיקיית resources, ועזרו לברונו הפיל למצוא את השנה שמוזכרת הכי הרבה פעמים בספר.\n", "\n", - "במחברת האחרונה למדנו שבפייתון ישנו סוג נתונים שנקרא \"מילון\", שמשמש אותנו לאחסון של זוגות נתונים: מפתח וערך.
\n", - "המילון מאפשר לנו לפנות למפתח מסוים, ולאחזר לפיו את הערך שמוצמד אליו.
\n", + "\n", + "במחברת האחרונה למדנו שבפייתון ישנו סוג נתונים שנקרא \"מילון\", שמשמש אותנו לאחסון של זוגות נתונים: מפתח וערך.
" ] @@ -36,22 +36,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## פעולות על מילונים" + "## פעולות על מילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### ערכים ומפתחות" + "### ערכים ומפתחות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "המילון מאפשר לנו לפנות למפתח מסוים, ולאחזר לפיו את הערך שמוצמד אליו.
\n", "במחברת זו נלמד על פעולות נוספות שאפשר לבצע על מילונים, ועל השילוב של מילונים עם טיפוסי נתונים אחרים.\n", "\n", - " לפעמים נרצה לעבור רק על הערכים שנמצאים במילון, בלי המפתחות שמצביעים עליהם.
\n", + "\n", + " לפעמים נרצה לעבור רק על הערכים שנמצאים במילון, בלי המפתחות שמצביעים עליהם.
" ] @@ -70,7 +70,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " לצורך כך נוכל להשתמש בפעולהvalues
, בצורה הזו:\n", "\n", + "
\n", " הערך שהפעולה מחזירה הוא iterable, ולכן קל לרוץ עליו בעזרת לולאה: \n", "
" ] @@ -89,8 +89,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הפעולה המקבילה ל־
values
שמחזירה לנו רק את המפתחות נקראתkeys
.
\n", + "\n", + " הפעולה המקבילה ל־
" ] @@ -109,16 +109,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מילת המפתחvalues
שמחזירה לנו רק את המפתחות נקראתkeys
.
\n", " יחסית נדיר לראות אותה בקוד, בין היתר כיוון שאפשר לרוץ על מפתחות המילון בלולאה גם בלי להשתמש בפעולהkeys
:\n", "del
" + "### מילת המפתחdel
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "לפעמים עולה צורך למחוק ממילון מפתח ואת הערך שקשור אליו.
\n", - "כפי שאולי ניחשתם, אין אפשרות למחוק רק את המפתח או רק את הערך – הם באים יחד.
\n", + "\n", + "לפעמים עולה צורך למחוק ממילון מפתח ואת הערך שקשור אליו.
" ] @@ -127,9 +127,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "כפי שאולי ניחשתם, אין אפשרות למחוק רק את המפתח או רק את הערך – הם באים יחד.
\n", "נרצה למחוק מפתח וערך מהמילון כשחשוב לנו לחסוך מקום בזיכרון המחשב, או כשהם כבר לא רלוונטיים ומפריעים לנו.\n", "\n", - "הדרך הראשונה למחוק מפתח וערך ממילון היא להשתמש במילת המפתח
del
, שטרם הכרנו.
\n", - "מילת המפתחdel
נגזרת מהמילה delete (למחוק).
\n", + "\n", + "הדרך הראשונה למחוק מפתח וערך ממילון היא להשתמש במילת המפתח
" ] @@ -149,7 +149,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "del
, שטרם הכרנו.
\n", + "מילת המפתחdel
נגזרת מהמילה delete (למחוק).
\n", "נציין את שם המילון ואת המפתח שנרצה למחוק:\n", "\n", + "
\n", "אפשר להשתמש במילת המפתח
" ] @@ -158,16 +158,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הפעולהdel
גם כדי למחוק תאים מרשימה או למחוק משתנים, אף על פי שהשימושים הללו נדירים למדי.\n", "pop
" + "### הפעולהpop
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "פעמים רבות נרצה לקבל את הערך המשויך למפתח שאנחנו מוחקים.
\n", - "חיסרון מובהק שלdel
הוא שבשימוש בה, המפתח והערך יימחקו בלי להחזיר שום מידע על הנתונים שנמחקו.
\n", + "\n", + "פעמים רבות נרצה לקבל את הערך המשויך למפתח שאנחנו מוחקים.
" ] @@ -188,22 +188,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "חיסרון מובהק שלdel
הוא שבשימוש בה, המפתח והערך יימחקו בלי להחזיר שום מידע על הנתונים שנמחקו.
\n", "נוכל לקבל את הערך שנמחק בכל זאת בעזרת הפעולהpop
, שחוץ מלמחוק זוג של מפתח וערך לפי המפתח, גם מחזירה את הערך שמחקה:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -211,15 +211,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### הפעולה\n", - " כתבו פונקציה שמקבלת מילון, ומחזירה מילון הפוך, שבו הערכים הופכים למפתחות והמפתחות לערכים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו פונקציה שמקבלת מילון, ומחזירה מילון הפוך, שבו הערכים הופכים למפתחות והמפתחות לערכים.
\n", - "
\n", " היעזרו בפעולות שלמדתם על מילון.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "update
" + "### הפעולהupdate
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הוספה של ערכים מרובים למילון עלולה להיות לא נוחה במבט ראשון.
\n", + "\n", + " הוספה של ערכים מרובים למילון עלולה להיות לא נוחה במבט ראשון.
" ] @@ -238,7 +238,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נביט בשני המילונים הבאים, שבהם כל ערך הוא המפתח התואם לו, שהועלה בחזקה שנייה.\n", "\n", + "
\n", " אם נרצה למזג את high_powers_of_two לתוך powers_of_two, נצטרך לכתוב את הקוד הבא:\n", "
" ] @@ -259,9 +259,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אף שהקוד למעלה מובן למדי, הוא מסורבל יחסית לפעולה הפשוטה שהוא מבצע.
\n", - " כמו שאולי ניחשתם, החברים שיצרו את פייתון כבר חשבו על פעולה כזו למיזוג מילונים.
\n", + "\n", + " אף שהקוד למעלה מובן למדי, הוא מסורבל יחסית לפעולה הפשוטה שהוא מבצע.
" ] @@ -290,22 +290,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כמו שאולי ניחשתם, החברים שיצרו את פייתון כבר חשבו על פעולה כזו למיזוג מילונים.
\n", " נפעיל אותה על המילון שאליו אנחנו רוצים למזג, ונעביר לפעולה כארגומנט את הרשימה שממנה נרצה למזג:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -313,15 +313,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מבנים מורכבים נפוצים" + "## מבנים מורכבים נפוצים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מה יקרה אם ישנו מפתח שנמצא בשני המילונים?
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " מה יקרה אם ישנו מפתח שנמצא בשני המילונים?
\n", - "
\n", " בנו מקרה שכזה ונסו בעצמכם.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "העולם לעיתים מורכב, וניסיון לארגן מידע רב יכול ליצור מבני נתונים שנראים מסובכים במבט ראשון.
\n", + "\n", + "העולם לעיתים מורכב, וניסיון לארגן מידע רב יכול ליצור מבני נתונים שנראים מסובכים במבט ראשון.
" ] }, @@ -329,14 +329,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### רשימת מילונים" + "### רשימת מילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", + "
\n", "נראה, לדוגמה, דרך לייצג מאגר קטן של משתמשים:\n", "
" ] @@ -358,16 +358,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -375,8 +375,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כדי לסגנן את הקוד שלנו, הרבה פעמים נרד שורה גם כשלא חייבים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " כדי לסגנן את הקוד שלנו, הרבה פעמים נרד שורה גם כשלא חייבים.
\n", - "
\n", " נפוץ מאוד לרדת שורה במבנים ארוכים אחרי שפתחנו סוגריים – פייתון מבינה שמדובר באותה שורה.\n", "\n", - "למעלה מוצגת רשימה שמכילה 3 מילונים. אפשר למנות את האיברים שבה בעזרת לולאה, כמו בכל רשימה אחרת.
\n", + "\n", + "למעלה מוצגת רשימה שמכילה 3 מילונים. אפשר למנות את האיברים שבה בעזרת לולאה, כמו בכל רשימה אחרת.
" ] @@ -395,8 +395,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נדפיס את השמות של כל אחד מהמשתמשים:\n", "\n", - "ניזהר במקרה שיש מפתח שעלול לא להופיע באחד המילונים.
\n", + "\n", + "ניזהר במקרה שיש מפתח שעלול לא להופיע באחד המילונים.
" ] @@ -415,7 +415,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "לדוגמה, לסקרלט ג'והנסון אין בן־זוג, ולכן כשהלולאה הבאה תגיע אליה היא תקפיץ שגיאה:\n", "\n", + "
\n", "נראה דוגמה לטיפול במקרה שכזה בעולם האמיתי:\n", "
" ] @@ -437,7 +437,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "או ש\"נרמה\" קצת בעזרת הפעולה
" ] @@ -457,23 +457,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### ערכים מרובים במפתח אחד" + "### ערכים מרובים במפתח אחד" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### מילון שערכיו הם רשימות" + "#### מילון שערכיו הם רשימות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "get
:\n", "\n", - "אנחנו רוצים ליצור תוכנה לניהול ספרייה, שבה אפשר למצוא ספרים לפי שם המחבר.
\n", - "בשלב הנוכחי ביקשו מאיתנו לשמור עבור כל ספר רק את שמו, ללא פרטים נוספים, כמו מלאי או שנת הוצאה לאור.
\n", + "\n", + "אנחנו רוצים ליצור תוכנה לניהול ספרייה, שבה אפשר למצוא ספרים לפי שם המחבר.
" ] @@ -482,22 +482,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "בשלב הנוכחי ביקשו מאיתנו לשמור עבור כל ספר רק את שמו, ללא פרטים נוספים, כמו מלאי או שנת הוצאה לאור.
\n", "נצטרך לתכנת את האפשרות לשלוף את שמות הספרים לפי שם המחבר, ולהוסיף ולהסיר ספרים בקלות מרשימת ספריו של כל מחבר.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -505,7 +505,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " השקיעו 5 דקות וחשבו איך הייתם מממשים ספרייה שכזו בעזרת סוגי הנתונים שלמדתם.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " השקיעו 5 דקות וחשבו איך הייתם מממשים ספרייה שכזו בעזרת סוגי הנתונים שלמדתם.
\n", - "
\n", " בונוס: כתבו כיצד אפשר לממש ספרייה שכזו, וממשו פונקציה שמאפשרת להוסיף ולהסיר ספרים עבור כל מחבר.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", "נסכם לפנינו את הדרישות:\n", "
" ] @@ -514,9 +514,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- מציאת רשימת הספרים לפי שם המחבר.
\n", - "- עריכת הספרים הקיימים עבור כל מחבר – הוספה והסרה.
\n", + "\n", + "
" ] }, @@ -524,8 +524,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מציאת רשימת הספרים לפי שם המחבר.
\n", + "- עריכת הספרים הקיימים עבור כל מחבר – הוספה והסרה.
\n", "\n", - "עבור הדרישה הראשונה, נראה שהמבנה המתאים ביותר הוא מילון שמקשר את שם המחבר לרשימת הספרים שלו.
\n", + "\n", + "עבור הדרישה הראשונה, נראה שהמבנה המתאים ביותר הוא מילון שמקשר את שם המחבר לרשימת הספרים שלו.
" ] @@ -534,7 +534,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "עבור הדרישה השנייה, נראה שהמבנה המתאים ביותר הוא רשימה – סוג גמיש שקל לערוך את האיברים שבו (לעומת tuple, נניח).\n", "\n", + "
\n", "נבנה מילון שכזה לדוגמה:\n", "
" ] @@ -562,7 +562,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "בהינתן המימוש המוצלח שלנו לדרישות, ראו כמה קל לתפעל את הספרייה:
" ] }, @@ -592,15 +592,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### מילון שערכיו הם מילונים" + "#### מילון שערכיו הם מילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "הדרישות של בעלי הספרייה השתנו.
\n", + "\n", + "הדרישות של בעלי הספרייה השתנו.
\n" ] @@ -609,10 +609,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "הם מבקשים שהפעם, בזמן שאנחנו שומרים על הסידור לפי שמות הסופרים, נוסיף על שם הספר גם את הפרטים הבאים:\n", "\n", - "
- תאריך ההוצאה לאור
\n", - "- רשימת הסוגות
\n", - "- כמות במלאי
\n", + "\n", + "
" ] }, @@ -620,8 +620,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- תאריך ההוצאה לאור
\n", + "- רשימת הסוגות
\n", + "- כמות במלאי
\n", "\n", - "נציץ על שלוש צורות לממש מבני נתונים שיכולים לשמש את הספרייה המדוברת.
\n", + "\n", + "נציץ על שלוש צורות לממש מבני נתונים שיכולים לשמש את הספרייה המדוברת.
" ] @@ -696,22 +696,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "נשאיר את בחינת נוחות השימוש בכל אחת מהן ואת כתיבת קוד להוספת ספרים ולהסרתם כתרגיל לקורא.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -719,22 +719,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים" + "## תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### מילים של אבן ספיר בהווה" + "### מילים של אבן ספיר בהווה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מה היתרונות שנובעים מהבחירה שלנו לייצג הנתונים בכל אחת מהדרכים? מה החסרונות?
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " מה היתרונות שנובעים מהבחירה שלנו לייצג הנתונים בכל אחת מהדרכים? מה החסרונות?
\n", - "
\n", " אם הייתה לכם ספרייה משלכם, כיצד הייתם מסדרים את הנתונים ומייצגים אותם?\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " קבלו רשימה של מילונים, ואחדו את כל המילונים שנמצאים ברשימה למילון אחד.
\n", + "\n", + " קבלו רשימה של מילונים, ואחדו את כל המילונים שנמצאים ברשימה למילון אחד.
" ] @@ -743,8 +743,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ודאו שאינכם משנים את המילונים הנמצאים ברשימה.\n", "\n", - " לדוגמה, עבור הרשימה:
[{'a': 1}, {'b': 2, 'c': 3}, {'d': 4}]
\n", + "\n", + " לדוגמה, עבור הרשימה:
" ] @@ -753,16 +753,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### עוד לבנה בחומה" + "### עוד לבנה בחומה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "[{'a': 1}, {'b': 2, 'c': 3}, {'d': 4}]
\n", " החזירו:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
\n", "\n", - " המורה רוג'רס מעניק ציון לכל תלמיד על פי הציונים שלו במבחנים ובשיעורי הבית.
\n", - " צרו מבנה נתונים שייצג את הציונים של כל התלמידים, ולאחר מכן השתמשו בו כדי לחשב את הציון הסופי של כל תלמיד ולהדפיסו.
\n", + "\n", + " המורה רוג'רס מעניק ציון לכל תלמיד על פי הציונים שלו במבחנים ובשיעורי הבית.
" ] @@ -778,31 +778,31 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " צרו מבנה נתונים שייצג את הציונים של כל התלמידים, ולאחר מכן השתמשו בו כדי לחשב את הציון הסופי של כל תלמיד ולהדפיסו.
\n", " ציון התלמידים הסופי מורכב מ־20% ממוצע הציונים בשיעורי בית, ועוד 80% ממוצע הציונים במבחנים:\n", "\n", - "
\n", + "\n", + "- ניק\n", + "
\n", + "\n", + "
\n", + "- ניק\n", "
\n", - "\n", - "
\n", - "- ציוני מבחנים: 80, 78, 90, 64
\n", - "- ציוני שיעורי בית: 46, 99, 85, 90, 100
\n", - "- ריצ'ארד\n", + "
- ציוני מבחנים: 80, 78, 90, 64
\n", + "- ציוני שיעורי בית: 46, 99, 85, 90, 100
\n", + "- ריצ'ארד\n", "
\n", - "\n", - "
\n", - "- ציוני מבחנים: 90, 92, 87, 99
\n", - "- ציוני שיעורי בית: 88, 77, 94, 66, 96
\n", - "- סיד\n", + "
- ציוני מבחנים: 90, 92, 87, 99
\n", + "- ציוני שיעורי בית: 88, 77, 94, 66, 96
\n", + "- סיד\n", "
\n", - "\n", - "
\n", - "- ציוני מבחנים: 66, 6, 66, 6
\n", - "- ציוני שיעורי בית: 100, 100, 100, 100, 100
\n", - "- דוד\n", + "
- ציוני מבחנים: 66, 6, 66, 6
\n", + "- ציוני שיעורי בית: 100, 100, 100, 100, 100
\n", + "\n", + "\n", + "- דוד\n", "
\n", + "\n", - "
\n", - "- ציוני מבחנים: 96, 92, 91, 78
\n", - "- ציוני שיעורי בית: 80, 77, 74, 71, 68
\n", - "- ציוני מבחנים: 96, 92, 91, 78
\n", + "- ציוני שיעורי בית: 80, 77, 74, 71, 68
\n", + "\n", + "\n", "" ] }, @@ -810,12 +810,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " לדוגמה, הציון של דוד יחושב כך:\n", "
\n", - "\n", - "\n", - " ממוצע ציוני המבחנים ($\\frac{96+92+91+78}{4}$, ששווה ל־$89.25$) במשקל של 80% ($\\frac{89.25\\cdot80}{100}$, ששווה ל־$71.4$).
\n", + "\n", + " ממוצע ציוני המבחנים ($\\frac{96+92+91+78}{4}$, ששווה ל־$89.25$) במשקל של 80% ($\\frac{89.25\\cdot80}{100}$, ששווה ל־$71.4$).
" ] diff --git a/week4/4_Unpacking.ipynb b/week4/4_Unpacking.ipynb index 60eed6a..a535ed2 100644 --- a/week4/4_Unpacking.ipynb +++ b/week4/4_Unpacking.ipynb @@ -4,28 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# Unpacking" + "# Unpacking" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ועוד ממוצע ציוני שיעורי הבית ($\\frac{68+71+74+77+80}{5}$, ששווה ל־$74$) במשקל של 20% ($\\frac{74\\cdot20}{100}$, ששווה ל־$14.8$).\n", "\n", + "
\n", " הנה שורה שתיראה לנו קצת שונה תחבירית מכל מה שהכרנו עד עכשיו:\n", "
" ] @@ -43,9 +43,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בצד ימין יש tuple שמכיל שני איברים, ואנחנו מבצעים השמה לשני משתנים ששמותיהם country ו־population.
\n", - " אומנם לא הייתי מעניק לפיסת הקוד הזו את תואר פיסת הקוד הנאה בעולם, אבל נראה שפייתון יודעת להריץ אותה:
\n", + "\n", + " בצד ימין יש tuple שמכיל שני איברים, ואנחנו מבצעים השמה לשני משתנים ששמותיהם country ו־population.
" ] }, @@ -62,9 +62,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " אומנם לא הייתי מעניק לפיסת הקוד הזו את תואר פיסת הקוד הנאה בעולם, אבל נראה שפייתון יודעת להריץ אותה:
\n", "\n", - " חזינו כאן במעין השמה כפולה שפייתון מאפשרת לנו לבצע:
\n", - " את האיבר הראשון בצד ימין היא הכניסה לאיבר הראשון בצד שמאל, ואת האיבר השני בצד ימין היא הכניסה לאיבר השני בצד שמאל.
\n", + "\n", + " חזינו כאן במעין השמה כפולה שפייתון מאפשרת לנו לבצע:
" ] }, @@ -72,14 +72,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " את האיבר הראשון בצד ימין היא הכניסה לאיבר הראשון בצד שמאל, ואת האיבר השני בצד ימין היא הכניסה לאיבר השני בצד שמאל.
\n", "\n", + "
\n", " התחביר שמאפשר לפייתון לפרק מבנה ולבצע השמה של האיברים שבו לכמה שמות משתנים בו־זמנית, קיבל את השם unpacking.\n", "
" ] @@ -88,22 +88,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Unpacking לתוך משתנים" + "## Unpacking לתוך משתנים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### המקרה הקלאסי" + "### המקרה הקלאסי" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מתכנתים רבים מנצלים את הנוחות שב־unpacking, ולכן תמצאו שהוא מופיע פעמים רבות בקוד \"בעולם האמיתי\".
\n", + "\n", + " מתכנתים רבים מנצלים את הנוחות שב־unpacking, ולכן תמצאו שהוא מופיע פעמים רבות בקוד \"בעולם האמיתי\".
" ] @@ -121,7 +121,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " אפשר לבצע השמה לכמה משתנים שנרצה בו־זמנית:\n", "\n", + "
\n", " הטכניקה הזו עובדת גם עבור טיפוסים אחרים שמוגדרים כ־iterable:\n", "
" ] @@ -139,7 +139,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ואפילו בלי סוגריים (זה לא קסם – בצד ימין נוצר בפועל tuple):\n", "
" ] @@ -157,7 +157,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " או כ\"חילוץ איברים\" מתוך משתנה קיים לתוך כמה משתנים נפרדים:\n", "
" ] @@ -177,8 +177,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בדוגמה האחרונה יצרנו בשורה הראשונה משתנה שמצביע ל־tuple. ב־tuple ישנם שני מספרים מסוג float.
\n", + "\n", + " בדוגמה האחרונה יצרנו בשורה הראשונה משתנה שמצביע ל־tuple. ב־tuple ישנם שני מספרים מסוג float.
" ] @@ -187,15 +187,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### unpacking בלולאות for" + "### unpacking בלולאות for" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בשורה השנייה פירקנו את ה־tuple – הערך הראשון שלו הוכנס לתוך המשתנה x והערך השני שלו הוכנס לתוך המשתנה y. \n", "\n", - " שימוש מקובל מאוד ל־unpacking, שאותו כבר הספקתם לראות בעבר, מתרחש בלולאות for.
\n", + "\n", + " שימוש מקובל מאוד ל־unpacking, שאותו כבר הספקתם לראות בעבר, מתרחש בלולאות for.
" ] @@ -218,7 +218,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ניצור רשימה של tuple־ים, שבה כל tuple ייצג מדינה ואת מספר האנשים החיים בה:\n", "\n", + "
\n", "בעולם ללא unpacking, היינו צריכים לכתוב כך:\n", "
" ] @@ -239,7 +239,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " אבל כיוון שאנחנו חיים בעולם טוב יותר, פייתון מאפשרת לנו לעשות את הטריק הבא:\n", "
" ] @@ -259,95 +259,95 @@ "metadata": {}, "source": [ "\n", - "
\n", + "\n", + "תצוגה של המשתנה countries_with_population ושל צורת הפירוק שלו \n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "\n", - " \n", + " תצוגה של המשתנה countries_with_population ושל צורת הפירוק שלו \n", + "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "\n", + " \n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"Cyprus\" \n", - "1198575 \n", - "\n", - " \n", - " \n", + "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"Cyprus\" \n", + "1198575 \n", + "\n", + " \n", + "\n", "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"Eswatini\" \n", - "1148130 \n", - "\n", - " \n", - " \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"Eswatini\" \n", + "1148130 \n", + "\n", + " \n", + "\n", + "-2 \n", + "-1 \n", + "\n", " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"Djibouti\" \n", - "973560 \n", - "\n", - " \n", - " \n", + "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"Djibouti\" \n", + "973560 \n", + "\n", + " \n", + "\n", "-2 \n", + "-1 \n", + "\n", + " \n", + "\n", " \n", - " \n", - "\n", - "
\n", - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "\n", - " \n", - "\"Fiji\" \n", - "889953 \n", - "\n", - " \n", - " \n", + "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "\n", + " \n", + "\"Fiji\" \n", + "889953 \n", + "\n", + " \n", + "\n", "-2 \n", + "-1 \n", + "\n", - " \n", - " \n", + "\n", + "\n", + "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", - " באיור למעלה, התאים האדומים מפורקים לתוך המשתנה country והתאים הירוקים לתוך המשתנה population.
\n", + "\n", + " באיור למעלה, התאים האדומים מפורקים לתוך המשתנה country והתאים הירוקים לתוך המשתנה population.
" ] @@ -365,15 +365,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "#### במילונים" + "#### במילונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " כל איטרציה של הלולאה תגרום לפירוק של צמד אחד מתוך הרשימה, ולהשמתו בהתאמה לתוך צמד המשתנים שבראש לולאת ה־for.\n", "\n", - " הרעיון של unpacking נעשה שימושי מאוד כשאנחנו רוצים לעבור בו־זמנית על המפתח ועל הערך של מילון.
\n", + "\n", + " הרעיון של unpacking נעשה שימושי מאוד כשאנחנו רוצים לעבור בו־זמנית על המפתח ועל הערך של מילון.
" ] @@ -406,16 +406,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### unpacking לערכי חזרה מפונקציה" + "### unpacking לערכי חזרה מפונקציה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " כל שנצטרך לעשות כדי לקבל את המפתח לצד הערך בכל איטרציה, זה להשתמש בפעולהitems
על המילון:\n", "\n", - " המקרה הזה לא שונה מהמקרים הקודמים שראינו, אבל חשבתי שיהיה נחמד לראות אותו מפורשות.
\n", - " הפעם ניקח פונקציה שמחזירה tuple, ונשתמש ב־unpacking כדי לפרק את הערכים שהיא מחזירה למשתנים.
\n", + "\n", + " המקרה הזה לא שונה מהמקרים הקודמים שראינו, אבל חשבתי שיהיה נחמד לראות אותו מפורשות.
" ] }, @@ -435,7 +435,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הפעם ניקח פונקציה שמחזירה tuple, ונשתמש ב־unpacking כדי לפרק את הערכים שהיא מחזירה למשתנים.
\n", "\n", + "
\n", " נשתמש בפונקציה:\n", "
" ] @@ -453,7 +453,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " והרי שאם מוחזר לנו tuple, אפשר לעשות לו unpacking:\n", "
" ] @@ -472,15 +472,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Unpacking לארגומנטים" + "## Unpacking לארגומנטים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " נבחן את הקוד הפשוט הבא:
\n", + "\n", + " נבחן את הקוד הפשוט הבא:
" ] }, @@ -501,9 +501,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", - " הגדרנו פונקציה שמדפיסה לנו יפה מיקומים לפי x ו־y שהיא מקבלת.
\n", - " המימוש הגיוני, אבל אוי א בראך! השימוש לא מאוד נוח!
\n", + "\n", + " הגדרנו פונקציה שמדפיסה לנו יפה מיקומים לפי x ו־y שהיא מקבלת.
" ] @@ -512,14 +512,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### unpacking לארגומנטים לפי מיקום" + "### unpacking לארגומנטים לפי מיקום" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " המימוש הגיוני, אבל אוי א בראך! השימוש לא מאוד נוח!
\n", " בכל פעם אנחנו צריכים לפרק את ה־tuple שמכיל את המיקום ל־2 איברים, ולשלוח כל אחד מהם בנפרד.\n", "\n", + "
\n", " כפתרון למצב, פייתון מאפשרת לנו לעשות את הקסם הנפלא הבא:\n", "
" ] @@ -541,8 +541,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " נראה מוזר? זו לא טעות, זהו באמת תחביר שעדיין לא ראינו!
\n", + "\n", + " נראה מוזר? זו לא טעות, זהו באמת תחביר שעדיין לא ראינו!
" ] @@ -551,7 +551,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הכוכבית מפרקת את ה־tuple שהגדרנו, treasure_location, ושולחת לארגומנט x את הערך הראשון ולארגומנט y את הערך השני.\n", "\n", + "
\n", " אם היו לנו ערכים רבים, היינו יכולים להשתמש באותו טריק בלולאה:\n", "
" ] @@ -587,7 +587,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " אבל נזכור שאנחנו יכולים להשתמש גם בתעלול שלמדנו על unpacking בתוך for:\n", "
" ] @@ -609,14 +609,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### unpacking לארגומנטים לפי שם הארגומנט" + "### unpacking לארגומנטים לפי שם הארגומנט" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " מצוידים בפונקציה להדפסת המיקום, אנחנו מקבלים את רשימת המילונים הבאה:\n", "
" ] @@ -639,7 +639,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " אין מנוס, דנו אותנו לחיי עבדות של פירוק מילונים ולשליחת ערכיהם לפונקציות! 😢\n", "
" ] @@ -661,7 +661,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " או שאולי לא?\n", "
" ] @@ -670,8 +670,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " במקרה המיוחד מאוד של מילון, אפשר לשלוח לפונקציה את הפרמטרים בעזרת unpacking עם שתי כוכביות.
\n", + "\n", + " במקרה המיוחד מאוד של מילון, אפשר לשלוח לפונקציה את הפרמטרים בעזרת unpacking עם שתי כוכביות.
" ] @@ -700,10 +700,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " המפתחות של המילון צריכים לציין את שם הפרמטרים של הפונקציה, והערכים במילון יהיו הערך שיועבר לאותם פרמטרים:\n", "\n", - " מה קרה פה?
\n", - " באיטרציה הראשונה location היה{'x': 36.671111, 'y': 65.808056}
.
\n", - " הפונקציהprint_treasure_locations
מחכה שיעבירו לה ערך לפרמטר x ולפרמטר y.
\n", + "\n", + " מה קרה פה?
" ] @@ -712,7 +712,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " באיטרציה הראשונה location היה{'x': 36.671111, 'y': 65.808056}
.
\n", + " הפונקציהprint_treasure_locations
מחכה שיעבירו לה ערך לפרמטר x ולפרמטר y.
\n", " ה־unpacking שעשינו בעזרת שתי הכוכביות העביר את הערך של המפתח'x'
במילון לפרמטר x, ואת הערך של המפתח'y'
במילון לפרמטר y.\n", "\n", + "
\n", " נראה דוגמה נוספת לפונקציה שמקבלת שנה, חודש ויום ומחזירה לנו תאריך כמחרוזת:\n", "
" ] @@ -734,15 +734,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## שגיאות" + "## שגיאות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אנחנו רגילים שפייתון די סובלנית, אבל על unpacking תקין היא לא מוותרת.
\n", + "\n", + " אנחנו רגילים שפייתון די סובלנית, אבל על unpacking תקין היא לא מוותרת.
" ] @@ -760,7 +760,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בדוגמה הבאה אנחנו מנסים לחלץ שני איברים לתוך שלושה משתנים, וזה לא נגמר טוב:\n", "\n", + "
\n", " נקבל שגיאה דומה, אך שונה, כשננסה לחלץ מספר לא נכון של ארגומנטים לתוך פונקציה:\n", "
" ] @@ -782,7 +782,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " אם ננסה לעשות unpacking לאיבר שאינו iterable, תתקבל השגיאה הבאה:\n", "
" ] @@ -800,16 +800,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## קוד לדוגמה" + "## קוד לדוגמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "סדרת פיבונאצ'י היא סדרה שמתחילה באיברים 1 ו־1, וכל איבר בה הוא סכום שני האיברים הקודמים לו.
\n", - "האיברים הראשונים בסדרה, הם (מימין לשמאל) 1, 1, 2, 3, 5, 8, וכך הסדרה ממשיכה.
\n", + "\n", + "סדרת פיבונאצ'י היא סדרה שמתחילה באיברים 1 ו־1, וכל איבר בה הוא סכום שני האיברים הקודמים לו.
" ] @@ -818,7 +818,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + "האיברים הראשונים בסדרה, הם (מימין לשמאל) 1, 1, 2, 3, 5, 8, וכך הסדרה ממשיכה.
\n", "במימוש פונקציה שמקבלת מספר ומחזירה את סכום כל איברי הסדרה עד אותו מספר, נוכל להשתמש ב־unpacking כדי לשפר את הקריאות של הפונקציה:\n", "\n", + "
\n", "הפונקציה בלי unpacking:\n", "
" ] @@ -845,7 +845,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "הפונקציה עם unpacking:\n", "
" ] @@ -871,25 +871,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים" + "## תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### אליבי לרוצחים" + "### אליבי לרוצחים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " לפניכם tuple המכיל כמה מילונים, כאשר כל מילון מייצג דמות חשודה ברצח.
\n", - " בתוך כל אחד מהמילונים, תחת המפתח evidences, ישנו tuple שבו שני איברים.
\n", - " האיבר הראשון הוא הנשק שתפסה המשטרה, והאיבר השני הוא המיקום המרכזי שבו הייתה הדמות באותו היום.
\n", - " בהינתן שהרוצח השתמש באקדח דרינגר (derringer) ב־Petersen House, הדפיסו רק את שמות האנשים שעדיין חשודים ברצח.
\n", + "\n", + " לפניכם tuple המכיל כמה מילונים, כאשר כל מילון מייצג דמות חשודה ברצח.
" ] @@ -911,7 +911,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " בתוך כל אחד מהמילונים, תחת המפתח evidences, ישנו tuple שבו שני איברים.
\n", + " האיבר הראשון הוא הנשק שתפסה המשטרה, והאיבר השני הוא המיקום המרכזי שבו הייתה הדמות באותו היום.
\n", + " בהינתן שהרוצח השתמש באקדח דרינגר (derringer) ב־Petersen House, הדפיסו רק את שמות האנשים שעדיין חשודים ברצח.
\n", " השתדלו להשתמש ב־unpacking לפחות פעמיים.\n", "\n", + "
\n", " לנוחיותכם, הנה פונקציה שמקבלת כלי נשק ומיקום, ובודקת אם הראיות תואמות:\n", "
" ] diff --git a/week4/5_Builtins.ipynb b/week4/5_Builtins.ipynb index 48aaaf0..3295761 100644 --- a/week4/5_Builtins.ipynb +++ b/week4/5_Builtins.ipynb @@ -4,28 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# פונקציות מובנות" + "# פונקציות מובנות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " אנו פוגשים הרבה בעיות בתכנות לעיתים קרובות ובמגוון מצבים:\n", "
" ] @@ -34,11 +34,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- מציאת הערך הקטן או הגדול ביותר ברשימת ערכים.
\n", - "- יצירת רשימת מספרים המתחילה בערך מסוים ומסתיימת בערך אחר.
\n", - "- שינוי מיקום הערכים לפי סדר מסוים.
\n", - "- המרה של ערך כלשהו למספר, למחרוזת, לבוליאני או לרשימה (נשמע מוכר?)
\n", + "\n", + "
" ] }, @@ -46,9 +46,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מציאת הערך הקטן או הגדול ביותר ברשימת ערכים.
\n", + "- יצירת רשימת מספרים המתחילה בערך מסוים ומסתיימת בערך אחר.
\n", + "- שינוי מיקום הערכים לפי סדר מסוים.
\n", + "- המרה של ערך כלשהו למספר, למחרוזת, לבוליאני או לרשימה (נשמע מוכר?)
\n", "\n", - " כדי שלא נצטרך לכתוב שוב ושוב את אותו פתרון, שפות רבות מצוידות בכלים מוכנים מראש שמטרתם לפתור בעיות נפוצות.
\n", - " פייתון מתגאה בכך שהיא שפה ש\"הבטריות בה כלולות\" (batteries included), היגד שנועד לתאר את העובדה שהיא מכילה פתרונות מוכנים לאותן בעיות.
\n", + "\n", + " כדי שלא נצטרך לכתוב שוב ושוב את אותו פתרון, שפות רבות מצוידות בכלים מוכנים מראש שמטרתם לפתור בעיות נפוצות.
" ] @@ -57,7 +57,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " פייתון מתגאה בכך שהיא שפה ש\"הבטריות בה כלולות\" (batteries included), היגד שנועד לתאר את העובדה שהיא מכילה פתרונות מוכנים לאותן בעיות.
\n", " במחברת זו נכיר חלק מהפונקציות שפייתון מספקת לנו במטרה להקל על חיינו.\n", "\n", + "
\n", " השם הנפוץ עבור הפונקציות הללו הוא builtins, ואפשר למצוא את התיעוד של כולן כאן. \n", "
" ] @@ -66,22 +66,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -89,17 +89,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " חשבו על פונקציות כאלו שאתם כבר מכירים משיעורים קודמים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " חשבו על פונקציות כאלו שאתם כבר מכירים משיעורים קודמים.
\n", - "
\n", " חלק מהפתרונות האפשריים: len, int, float, str, list, type\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -107,15 +107,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מתמטיקה" + "## מתמטיקה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " בהמשך המחברת ישנן דוגמאות עבור כל פונקציה חדשה שנכיר.
\n", - " למען הבהירות אני מדפיס דוגמה בודדת, ואז אני משתמש בלולאה כדי להדפיס כמה דוגמאות ברצף.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " בהמשך המחברת ישנן דוגמאות עבור כל פונקציה חדשה שנכיר.
\n", - "
\n", + " למען הבהירות אני מדפיס דוגמה בודדת, ואז אני משתמש בלולאה כדי להדפיס כמה דוגמאות ברצף.
\n", " הדוגמאות ירווחו בצורה מוזרה כדי שיהיה נוח להסתכל על הפלט. אל תשתמשו בריווחים כאלו בקוד שלכם.\n", "\n", - " ישנן פעולות מתמטיות שנצטרך לעיתים תכופות, שאת חלקן אפילו מימשנו שוב ושוב לאורך הקורס.
\n", + "\n", + " ישנן פעולות מתמטיות שנצטרך לעיתים תכופות, שאת חלקן אפילו מימשנו שוב ושוב לאורך הקורס.
" ] @@ -124,16 +124,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### ערך מוחלט" + "### ערך מוחלט" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נראה מה יש לארגז הכלים של פייתון להציע לנו.\n", "\n", - " הפונקציה
abs
מחזירה את הערך המוחלט של המספר שנעביר לה.
\n", - " אם נעביר לה כארגומנט מספר שלם או עשרוני, היא תחזיר את המרחק של המספר מ־0 על ציר המספרים:
\n", + "\n", + " הפונקציה
" ] }, @@ -161,16 +161,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "abs
מחזירה את הערך המוחלט של המספר שנעביר לה.
\n", + " אם נעביר לה כארגומנט מספר שלם או עשרוני, היא תחזיר את המרחק של המספר מ־0 על ציר המספרים:
\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -178,14 +178,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מקסימום ומינימום" + "### מקסימום ומינימום" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " המשמעות של
:>6
ב־fstring היא \"דאג שיהיו לפחות 6 תווים, וישר את הערך לימין\".
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " המשמעות של
\n", - ":>6
ב־fstring היא \"דאג שיהיו לפחות 6 תווים, וישר את הערך לימין\".
\n", " אפשר להחליף את>
בתו^
לצורך יישור לאמצע, או בתו<
לצורך יישור לשמאל.\n", "\n", + "
\n", " הפונקציות
" ] @@ -217,17 +217,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "max
ו־min
מקבלות iterable, ומחזירות את האיבר הגבוה או הנמוך ביותר ב־iterable (בהתאמה).\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -245,8 +245,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מחרוזות בפייתון מושוות לפי הערך המספרי של התווים שמהם הן מורכבות.
\n", - " כשמדובר ב־iterable שיש בו מחרוזות, פייתון מוצאת את הערך המרבי או המזערי לפי הייצוג המספרי של האותיות באותן מחרוזות.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " מחרוזות בפייתון מושוות לפי הערך המספרי של התווים שמהם הן מורכבות.
\n", - "
\n", + " כשמדובר ב־iterable שיש בו מחרוזות, פייתון מוצאת את הערך המרבי או המזערי לפי הייצוג המספרי של האותיות באותן מחרוזות.
\n", " מהסיבה הזו, הסידור האלפבתי לא יחזיר את הערך הרצוי במצב שבו יש גם אותיות גדולות וגם אותיות וקטנות: \n", "\n", - " זה קורה כיוון שהערכים המספריים של אותיות גדולות קטנים מאלו של אותיות קטנות.
\n", + "\n", + " זה קורה כיוון שהערכים המספריים של אותיות גדולות קטנים מאלו של אותיות קטנות.
" ] @@ -255,14 +255,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סכום" + "### סכום" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הערך המספרי של Z במילה ZEBRA הוא 90, והערך המספרי של a (במילה apple, שציפינו שתיחשב כקטנה ביותר) הוא 97.\n", "\n", + "
\n", " אפשר לחשב את סכום האיברים ב־iterable באמצעות הפונקציה
" ] @@ -294,14 +294,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### עיגול" + "### עיגול" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "sum
: \n", "\n", + "
\n", " אפשר גם לעגל מספרים בעזרת הפונקציה
" ] @@ -331,7 +331,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "round
: \n", "\n", + "
\n", " ואפשר להחליט על מספר הספרות אחרי הנקודה שלפיו העיגול יתבצע: \n", "
" ] @@ -364,15 +364,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## המרות" + "## המרות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " טוב, על המרות (casting) כבר למדנו.
\n", + "\n", + " טוב, על המרות (casting) כבר למדנו.
" ] @@ -381,7 +381,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " אבל בואו בכל זאת נראה כמה דוגמאות מגניבות.\n", "\n", + "
\n", " אפשר להמיר מחרוזת לרשימה. הפעולה הזו תפריד כל אחת מהאותיות לתא נפרד ברשימה:\n", "
" ] @@ -399,8 +399,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " עוד פרט טריוויה נחמד הוא שלכל ערך בפייתון יש ערך בוליאני שקול.
\n", + "\n", + " עוד פרט טריוויה נחמד הוא שלכל ערך בפייתון יש ערך בוליאני שקול.
" ] @@ -423,16 +423,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בדרך כלל, ערכים ריקים שקולים ל־False
וערכים שאינם ריקים שקולים ל־True
:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -440,7 +440,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " המשמעות של
!r
ב־fstring היא \"הצג את הערך בתצורתו הגולמית\" (raw).
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " המשמעות של
\n", - "!r
ב־fstring היא \"הצג את הערך בתצורתו הגולמית\" (raw).
\n", " לדוגמה, מחרוזות יוצגו עם הגרשיים משני צידיהן.\n", "\n", + "
\n", " אפשר להמיר ערכים בוליאניים למספר שלם:\n", "
" ] @@ -459,8 +459,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מה בנוגע לטריקים על מילונים?
\n", + "\n", + " מה בנוגע לטריקים על מילונים?
" ] @@ -479,7 +479,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " אם יש לנו iterable שמכיל זוגות של ערכים, אפשר להפוך אותו למילון:\n", "\n", + "
\n", " וכטיפ כללי, אפשר להמיר את סוג הערכים שלנו לטיפוס שונה, בעזרת הפונקציה שנקראת על שם הטיפוס שאליו אנחנו רוצים להמיר:\n", "
" ] @@ -504,7 +504,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " אבל צריך לזכור שלא כל טיפוס אפשר להמיר לטיפוס אחר:\n", "
" ] @@ -522,14 +522,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מאחורי הקלעים של פייתון" + "## מאחורי הקלעים של פייתון" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " ישנן פונקציות מובנות רבות שמטרתן להנגיש לנו דברים שקורים מאחורי הקלעים של פייתון. במחברת זו נסביר על שלוש מהן.\n", "
" ] @@ -538,17 +538,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### id" + "### id" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " על הפונקציה
id
כבר למדנו בעבר. היא מקבלת כארגומנט ערך, ומחזירה לנו את \"הזהות\" שלו – ערך אחר שמייצג רק את אותו.
\n", - " בגרסת הפייתון שאנחנו משתמשים בה, מדובר בכתובת של הערך בזיכרון המחשב.
\n", - " כל אדם שיריץ את הקוד הבא יקבל ערכים שונים, אבל לעולם לא יודפסו לו 2 ערכים זהים באותה ריצה.
\n", + "\n", + " על הפונקציה
" ] @@ -570,7 +570,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "id
כבר למדנו בעבר. היא מקבלת כארגומנט ערך, ומחזירה לנו את \"הזהות\" שלו – ערך אחר שמייצג רק את אותו.
\n", + " בגרסת הפייתון שאנחנו משתמשים בה, מדובר בכתובת של הערך בזיכרון המחשב.
\n", + " כל אדם שיריץ את הקוד הבא יקבל ערכים שונים, אבל לעולם לא יודפסו לו 2 ערכים זהים באותה ריצה.
\n", " הסיבה לכך שתמיד יודפסו 4 ערכים שונים היא שכל הנתונים שמופיעים ברשימה values שונים זה מזה.\n", "\n", + "
\n", " אם ניצור מצב שבו 2 שמות מצביעים על אותו ערך בדיוק,
" ] @@ -598,8 +598,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "id
תחזיר את אותה התוצאה עבור שני הערכים:\n", "\n", - " הפונקציה הזו יכולה לסייע לנו להגיע לתובנות בנוגע לדרך שבה פייתון עובדת בכל מיני מצבים.
\n", + "\n", + " הפונקציה הזו יכולה לסייע לנו להגיע לתובנות בנוגע לדרך שבה פייתון עובדת בכל מיני מצבים.
" ] @@ -620,7 +620,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " קשה להבין, לדוגמה, מה קורה בקוד הבא:\n", "\n", + "
\n", " בדיקה בעזרת
" ] @@ -640,22 +640,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "id
תעזור לנו לראות שהרשימות הפנימיות בתוך collections_of_numbers מצביעות לאותו מקום:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -663,16 +663,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### dir" + "### dir" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " נסו לכתוב קוד של שורה אחת או יותר, שיחליף את השורה הראשונה בקוד שלמעלה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " נסו לכתוב קוד של שורה אחת או יותר, שיחליף את השורה הראשונה בקוד שלמעלה.
\n", - "
\n", " גרמו לכך שהקוד שמוסיף את הערך 100 לרשימה הראשונה לא ישפיע על שאר הרשימות.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " גם על הפונקציה
dir
כבר למדנו. ראיתם אותה לאחרונה במחברת שעסקה בדוקומנטציה.
\n", - " הפונקציהdir
תחזיר לנו את כל הפעולות שאפשר לבצע על משתנה מסוים או על טיפוס מסוים.
\n", + "\n", + " גם על הפונקציה
" ] @@ -690,7 +690,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "או שנוכל להעביר לה ממש שם של טיפוס:" + "או שנוכל להעביר לה ממש שם של טיפוס:" ] }, { @@ -706,15 +706,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### eval" + "### eval" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "dir
כבר למדנו. ראיתם אותה לאחרונה במחברת שעסקה בדוקומנטציה.
\n", + " הפונקציהdir
תחזיר לנו את כל הפעולות שאפשר לבצע על משתנה מסוים או על טיפוס מסוים.
\n", " נוכל להעביר לה כארגומנט את הערך שנרצה להבין מה הפעולות שאפשר לבצע עליו:\n", "\n", - " על
eval
אנחנו מלמדים בעיקר כדי להזהיר ממנה – זו פונקציה שאחראית למחדלי אבטחה בכל שפת תכנות שבה היא קיימת.
\n", + "\n", + " על
" ] @@ -723,7 +723,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "eval
אנחנו מלמדים בעיקר כדי להזהיר ממנה – זו פונקציה שאחראית למחדלי אבטחה בכל שפת תכנות שבה היא קיימת.
\n", " אתם לא אמורים להשתמש בה בקורס, וכדאי לזכור שכשהתשובה היאeval
, ברוב המוחלט של המקרים שאלתם את השאלה הלא נכונה.\n", "\n", + "
\n", " אחרי ההקדמה המלודרמטית, נספר לכם ש־
" ] @@ -743,8 +743,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "eval
(מלשון evaluation) פשוט מקבלת קוד כמחרוזת, ומריצה אותו בעזרת פייתון.\n", "\n", - " לעיתים קרובות הפיתוי להשתמש ב־
eval
הוא גדול.
\n", + "\n", + " לעיתים קרובות הפיתוי להשתמש ב־
" ] @@ -763,9 +763,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "eval
הוא גדול.
\n", " אפשר לתכנת, לדוגמה, את המחשבון מהתרגול בשבוע השני בצורה הפשוטה הבאה:\n", "\n", - " אבל כשחושבים על זה – המשתמש שמתבקש להכניס תרגיל מתמטי, יכול להריץ כל קוד שיתחשק לו, והקוד הזה יבוצע!
\n", - " הוא יכול לקרוא קבצים שנמצאים על מחשב או למחוק אותם, לחטט בסיסמאות, ולמעשה – לעשות ככל העולה על רוחו.
\n", + "\n", + " אבל כשחושבים על זה – המשתמש שמתבקש להכניס תרגיל מתמטי, יכול להריץ כל קוד שיתחשק לו, והקוד הזה יבוצע!
" ] @@ -774,22 +774,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## כלים שימושיים נוספים" + "## כלים שימושיים נוספים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### טווח מספרים" + "### טווח מספרים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הוא יכול לקרוא קבצים שנמצאים על מחשב או למחוק אותם, לחטט בסיסמאות, ולמעשה – לעשות ככל העולה על רוחו.
\n", " לקריאה נוספת על הסכנות, חפשו על code injection.\n", "\n", - " פעמים רבות אנחנו נתקלים במצבים שבהם אנחנו רוצים לעבור על כל המספרים מ־0 ועד ערך מסוים.
\n", + "\n", + " פעמים רבות אנחנו נתקלים במצבים שבהם אנחנו רוצים לעבור על כל המספרים מ־0 ועד ערך מסוים.
" ] @@ -816,8 +816,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " לדוגמה, כך פתרנו את התרגיל שמחשב את סכום המספרים עד מספר שהתקבל כקלט:\n", "\n", - " מטרת הפונקציה
range
היא לפתור לנו את הבעיה הזו בקלות.
\n", + "\n", + " מטרת הפונקציה
" ] @@ -836,7 +836,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "range
היא לפתור לנו את הבעיה הזו בקלות.
\n", " תנו ל־range
מספר כארגומנט, והיא תחזיר לכם iterable שמכיל את כל המספרים הטבעיים עד המספר שנתתם לה, ללא המספר האחרון:\n", "\n", + "
\n", " הפונקציה יודעת גם לקבל ערך שממנו היא תתחיל לספור:\n", "
" ] @@ -855,7 +855,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " וגם ערך דילוג, שקובע על כמה מספרים
" ] @@ -874,16 +874,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "range
תדלג בכל פעם:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -891,22 +891,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הפונקציה
range
מזכירה את פעולת החיתוך מהשבוע השלישי, שבה משתמשים בסוגריים מרובעים ובנקודתיים.
\n", - "range
, לעומת חיתוך, היא פונקציה – קוראים לה בעזרת סוגריים עגולים, ומפרידים בין הארגומנטים שנשלחים אליה בעזרת פסיקים.\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " הפונקציה
\n", - "range
מזכירה את פעולת החיתוך מהשבוע השלישי, שבה משתמשים בסוגריים מרובעים ובנקודתיים.
\n", + "range
, לעומת חיתוך, היא פונקציה – קוראים לה בעזרת סוגריים עגולים, ומפרידים בין הארגומנטים שנשלחים אליה בעזרת פסיקים.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -914,16 +914,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סידור" + "### סידור" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו בעצמכם קוד שמחשב את סכום המספרים מ־0 ועד המספר שהתקבל כקלט.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו בעצמכם קוד שמחשב את סכום המספרים מ־0 ועד המספר שהתקבל כקלט.
\n", - "
\n", " השתמשו ב־range
.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " עד כה ארגז הכלים שלנו כלל רק את פעולת הסידור ששייכת לרשימות,
sort
.
\n", - " אף שמעשית רוב פעולות הסידור מבוצעות על רשימות, לפעמים יעלה הצורך לסדר טיפוסי נתונים אחרים.
\n", + "\n", + " עד כה ארגז הכלים שלנו כלל רק את פעולת הסידור ששייכת לרשימות,
" ] @@ -941,8 +941,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "sort
.
\n", + " אף שמעשית רוב פעולות הסידור מבוצעות על רשימות, לפעמים יעלה הצורך לסדר טיפוסי נתונים אחרים.
\n", " במקרים האלה נשתמש בפונקציה המובניתsorted
:\n", "\n", - "
sorted
מקבלת iterable, ומחזירה רשימה מסודרת של האיברים ב־iterable.\n", + "\n", + "
" ] }, @@ -950,8 +950,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "sorted
מקבלת iterable, ומחזירה רשימה מסודרת של האיברים ב־iterable.\n", "\n", - " נראה דוגמה נוספת של סידור tuple.
\n", + "\n", + " נראה דוגמה נוספת של סידור tuple.
" ] @@ -970,8 +970,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " שימו לב שטיפוס הנתונים שמוחזר מ־sorted
הוא תמיד רשימה:\n", "\n", - " גם ל־
sorted
וגם לפעולהsort
שיכולה להתבצע על רשימות, יש 2 פרמטרים שלא למדנו עליהם.
\n", + "\n", + " גם ל־
" ] }, @@ -988,9 +988,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "sorted
וגם לפעולהsort
שיכולה להתבצע על רשימות, יש 2 פרמטרים שלא למדנו עליהם.
\n", " לפרמטר הראשון קוראים reverse, והוא הפשוט להבנה מבין השניים – ברגע שמועבר אליו True, הוא מחזיר את הרשימה מסודרת בסדר יורד:\n", - " הפרמטר השני, key, מסובך קצת יותר להבנה.
\n", - " כשנעביר לפרמטר הזה פונקציה, הסידור של איברי ה־iterable יתבצע לפי הערך שחוזר מהפונקציה הזו עבור כל אחד מהאיברים שצריך למיין.
\n", + "\n", + " הפרמטר השני, key, מסובך קצת יותר להבנה.
" ] @@ -1009,29 +1009,29 @@ "metadata": {}, "source": [ "
\n", + " כשנעביר לפרמטר הזה פונקציה, הסידור של איברי ה־iterable יתבצע לפי הערך שחוזר מהפונקציה הזו עבור כל אחד מהאיברים שצריך למיין.
\n", " מבולבלים? נראה, לדוגמה, את הרשימה הבאה, שמורכבת משמות אנשי הסגל של אחד מהמחזורים הקודמים:\n", "\n", - "
" ] }, @@ -1039,7 +1039,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " \n", - "\"Dafi\" \n", - "\"Efrat\" \n", - "\"Ido\" \n", - "\"Itamar\" \n", - "\"Yam\" \n", - "\n", - " \n", - " \n", + "-5 \n", - "-4 \n", - "-3 \n", - "-2 \n", - "-1 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " \n", + "\"Dafi\" \n", + "\"Efrat\" \n", + "\"Ido\" \n", + "\"Itamar\" \n", + "\"Yam\" \n", + "\n", + " \n", + "\n", "-5 \n", + "-4 \n", + "-3 \n", + "-2 \n", + "-1 \n", + "\n", + "
\n", " אם ארצה לסדר את הרשימה הזו לפי האורך (
" ] @@ -1058,8 +1058,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "len
) של שמות כל אחד מאנשי הסגל, אשתמש ב־key בצורה הבאה:\n", "\n", - " מה קרה שם בפועל?
\n", + "\n", + " מה קרה שם בפועל?
" ] @@ -1069,29 +1069,29 @@ "metadata": {}, "source": [ "
\n", " הפונקציהlen
הופעלה על כל אחד מהאיברים. התוצאות מופיעות בתרשים הבא:\n", "\n", - "
" ] }, @@ -1099,8 +1099,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " \n", - "\"Dafi\" \n", - "\"Efrat\" \n", - "\"Ido\" \n", - "\"Itamar\" \n", - "\"Yam\" \n", - "\n", - " \n", - " \n", + "4 \n", - "5 \n", - "3 \n", - "6 \n", - "3 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " \n", + "\"Dafi\" \n", + "\"Efrat\" \n", + "\"Ido\" \n", + "\"Itamar\" \n", + "\"Yam\" \n", + "\n", + " \n", + "\n", "4 \n", + "5 \n", + "3 \n", + "6 \n", + "3 \n", + "\n", - " בפועל, אנחנו מחזיקים עכשיו רשימה ראשית (שמות אנשי הסגל), ועוד רשימה משנית שבה מאוחסנים אורכי האיברים שברשימה הראשית.
\n", + "\n", + " בפועל, אנחנו מחזיקים עכשיו רשימה ראשית (שמות אנשי הסגל), ועוד רשימה משנית שבה מאוחסנים אורכי האיברים שברשימה הראשית.
" ] @@ -1110,55 +1110,54 @@ "metadata": {}, "source": [ "
\n", " פייתון תמיין את הרשימה המשנית, ובכל פעם שהיא תזיז את אחד האיברים בה, היא תזיז איתו את האיבר התואם ברשימה המקורית:\n", "\n", - "
\n", - "\n", "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " \n", - "\"Dafi\" \n", - "\"Efrat\" \n", - "\"Ido\" \n", - "\"Itamar\" \n", - "\"Yam\" \n", - "\n", - " \n", - " \n", + "4 \n", - "5 \n", - "3 \n", - "6 \n", - "3 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " \n", + "\"Dafi\" \n", + "\"Efrat\" \n", + "\"Ido\" \n", + "\"Itamar\" \n", + "\"Yam\" \n", + "\n", + " \n", + "\n", "4 \n", + "5 \n", + "3 \n", + "6 \n", + "3 \n", + "\n", - "
" ] }, @@ -1166,58 +1165,56 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "הרשימה המשנית עדיין לא מסודרת. נמשיך:\n", - "\n", + "הרשימה המשנית עדיין לא מסודרת. נמשיך:\n", "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " \n", - "\"Ido\" \n", - "\"Dafi\" \n", - "\"Efrat\" \n", - "\"Itamar\" \n", - "\"Yam\" \n", - "\n", - " \n", - " \n", + "3 \n", - "4 \n", - "5 \n", - "6 \n", - "3 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " \n", + "\"Ido\" \n", + "\"Dafi\" \n", + "\"Efrat\" \n", + "\"Itamar\" \n", + "\"Yam\" \n", + "\n", + " \n", + "\n", "3 \n", + "4 \n", + "5 \n", + "6 \n", + "3 \n", + "\n", - "
\n", - "\n", "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " \n", - "\"Ido\" \n", - "\"Dafi\" \n", - "\"Efrat\" \n", - "\"Itamar\" \n", - "\"Yam\" \n", - "\n", - " \n", - " \n", + "3 \n", - "4 \n", - "5 \n", - "6 \n", - "3 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " \n", + "\"Ido\" \n", + "\"Dafi\" \n", + "\"Efrat\" \n", + "\"Itamar\" \n", + "\"Yam\" \n", + "\n", + " \n", + "\n", "3 \n", + "4 \n", + "5 \n", + "6 \n", + "3 \n", + "\n", - "
" ] }, @@ -1225,8 +1222,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " \n", - " \n", - "0 \n", - "1 \n", - "2 \n", - "3 \n", - "4 \n", - "\n", - " \n", - "\"Ido\" \n", - "\"Yam\" \n", - "\"Dafi\" \n", - "\"Efrat\" \n", - "\"Itamar\" \n", - "\n", - " \n", - " \n", + "3 \n", - "3 \n", - "4 \n", - "5 \n", - "6 \n", - "\n", + " \n", + "\n", + "0 \n", + "1 \n", + "2 \n", + "3 \n", + "4 \n", + "\n", + " \n", + "\"Ido\" \n", + "\"Yam\" \n", + "\"Dafi\" \n", + "\"Efrat\" \n", + "\"Itamar\" \n", + "\n", + " \n", + "\n", "3 \n", + "3 \n", + "4 \n", + "5 \n", + "6 \n", + "\n", - " עכשיו הרשימה המשנית מסודרת, ואפשר להפסיק את פעולת הסידור.
\n", + "\n", + " עכשיו הרשימה המשנית מסודרת, ואפשר להפסיק את פעולת הסידור.
" ] @@ -1235,23 +1232,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הקסם הוא שאפשר להכניס ל־key
כל פונקציה, ולקבל iterable מסודר לפי ערכי ההחזרה של אותה פונקציה עבור הערכים ב־iterable.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1259,15 +1256,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### צימוד ערכים" + "### צימוד ערכים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו פונקציה שמקבלת כפרמטר את רשימת השמות של המשתתפות בכיתה.
\n", - " הפונקציה תחזיר רשימה המורכבת מאותם שמות, מסודרים לפי סדר האלף־בית.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו פונקציה שמקבלת כפרמטר את רשימת השמות של המשתתפות בכיתה.
\n", - "
\n", + " הפונקציה תחזיר רשימה המורכבת מאותם שמות, מסודרים לפי סדר האלף־בית.
\n", " סדרו נכונה גם מקרים שבהם חלק מהשמות מתחילים באות גדולה, וחלק – באות קטנה.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " הרבה פעמים נגיע למצב שבו יש לנו 2 iterables ואנחנו מעוניינים לעבור על הערכים שלהם, זה לצד זה.
\n", + "\n", + " הרבה פעמים נגיע למצב שבו יש לנו 2 iterables ואנחנו מעוניינים לעבור על הערכים שלהם, זה לצד זה.
" ] @@ -1286,7 +1283,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נניח שיש לנו רשימה של ציורים, ורשימה של הציירים שציירו אותם:\n", "\n", + "
\n", " צורה אחת לעבור על שתי הרשימות תהיה כזו:\n", "
" ] @@ -1311,8 +1308,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "אבל אפשר להסכים על כך שהדרך הזו לא נוחה במיוחד.
\n", + "\n", + "אבל אפשר להסכים על כך שהדרך הזו לא נוחה במיוחד.
" ] @@ -1331,15 +1328,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "אפשרות אחרת היא להשתמש ב־zip
, שיצמיד בין שני הערכים ויצור לנו את המבנה הבא:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1347,7 +1344,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", " אם שתי הרשימות אינן זהות באורכן,
\n", - "zip
לא יתייחס לאיברים העודפים של הרשימה הארוכה יותר.\n", "\n", + "
\n", "אחד השימושים האפשריים ל־
" ] @@ -1366,7 +1363,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "zip
הוא unpacking בתוך לולאתfor
:\n", "\n", + "
\n", "והיא אפילו לא מוגבלת ל־2 ארגומנטים בלבד:\n", "
" ] @@ -1389,21 +1386,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1411,8 +1408,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", " יש טיפוס נתונים שהיה מתאים יותר למקרה הזה מאשר 2 רשימות. מהו לדעתכם?\n", "
\n", - "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - "שימוש נפוץ ל־
zip
הוא במקרה שיש לנו שתי רשימות שמתאימות זו לזו, ויחד יכולות ליצור מילון.
\n", + "\n", + "שימוש נפוץ ל־
" ] @@ -1433,7 +1430,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "zip
הוא במקרה שיש לנו שתי רשימות שמתאימות זו לזו, ויחד יכולות ליצור מילון.
\n", "אם רשימה אחת מתאימה להיות המפתחות במילון, והאחרת להיות הערכים באותו מילון, נוכל להשתמש ב־zip
כדי לבצע את ההמרה:\n", "\n", + "
\n", " עכשיו נוכל לשאול מי צייר את המונה ליזה:\n", "
" ] @@ -1451,7 +1448,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " או לעבור על המילון ולהדפיס את הערכים, כמו שעשינו לפני כן:\n", "
" ] @@ -1470,15 +1467,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### המרת תווים למספרים ולהפך" + "### המרת תווים למספרים ולהפך" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כפי שהסברנו במחברת קבצים בשבוע שעבר, לכל תו מוצמד מספר שמזהה אותו.
\n", + "\n", + " כפי שהסברנו במחברת קבצים בשבוע שעבר, לכל תו מוצמד מספר שמזהה אותו.
" ] @@ -1507,8 +1504,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בעזרת הפונקציהord
נוכל לאחזר את הערך הזה:\n", "\n", - " ויש גם דרך לעשות את הפעולה ההפוכה!
\n", + "\n", + " ויש גם דרך לעשות את הפעולה ההפוכה!
" ] @@ -1529,22 +1526,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בעזרת הפונקציהchr
נוכל לקבל את התו לפי המספר שמייצג אותו:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1552,14 +1549,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מניית איברים" + "### מניית איברים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו תוכנית שמדפיסה זוג ערכים עבור כל מספר מ־9,760 ועד 10,100.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " כתבו תוכנית שמדפיסה זוג ערכים עבור כל מספר מ־9,760 ועד 10,100.
\n", - "
\n", " הערך הראשון יהיה המספר, והערך השני יהיה התו שאותו המספר מייצג.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", " נניח שאנחנו רוצים לעבור על כל השורות בקובץ מסוים, ולהדפיס ליד כל שורה את המספר הסידורי שלה:\n", "
" ] @@ -1590,8 +1587,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " חייבת להיות דרך טובה יותר!
\n", + "\n", + " חייבת להיות דרך טובה יותר!
" ] @@ -1610,7 +1607,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הפונקציה המובניתenumerate
מאפשרת למתכנת להצמיד מספר רץ ל־iterable:\n", "\n", + "
\n", " השימוש הנפוץ ביותר ל־
" ] @@ -1630,7 +1627,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "enumerate
הוא בלולאותfor
:\n", "\n", + "
\n", " טריק מדליק: אם בא לנו להתחיל למספר ממספר שהוא לא 0, אפשר להעביר ל־
" ] @@ -1650,23 +1647,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## דוגמאות לשימושים" + "## דוגמאות לשימושים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### מפת צופן קיסר" + "### מפת צופן קיסר" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "enumerate
את המספר הזה כפרמטר:\n", "\n", - " צופן קיסר היא שיטת הצפנה, שבה כל תו מוחלף בתו שנמצא 3 תווים אחריו באלף־בית של השפה.
\n", - " בעברית, לדוגמה, האות א' תוחלף באות ד', האות ג' באות ו' והאות ת' באות ג'.
\n", + "\n", + " צופן קיסר היא שיטת הצפנה, שבה כל תו מוחלף בתו שנמצא 3 תווים אחריו באלף־בית של השפה.
" ] @@ -1704,7 +1701,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " בעברית, לדוגמה, האות א' תוחלף באות ד', האות ג' באות ו' והאות ת' באות ג'.
\n", " נבנה מפת פענוח לצופן קיסר בעזרת הפונקציות שלמדנו במחברת:\n", "\n", + "
\n", " ורק בשביל הכיף, נבנה קוד שיאפשר לנו להשתמש במפה כדי להצפין מסרים:\n", "
" ] @@ -1756,14 +1753,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### סכימה מדורגת" + "### סכימה מדורגת" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " נבנה תוכנה קצרה שמאפשרת למשתמש להזין מספרים, מסדרת אותם בסדר הפוך, ומדפיסה עבור כל איבר את סכום האיברים עד המיקום של אותו איבר:\n", "
" ] @@ -1795,15 +1792,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### ממוצע ציונים" + "### ממוצע ציונים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " קבלו רשימת שמות תלמידים, ועבור כל תלמיד את רשימת הציונים שלו.
\n", + "\n", + " קבלו רשימת שמות תלמידים, ועבור כל תלמיד את רשימת הציונים שלו.
" ] @@ -1866,22 +1863,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים" + "## תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### אותיות או לא להיות" + "### אותיות או לא להיות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הדפיסו את שם התלמיד שממוצע הציונים שלו הוא הגבוה ביותר, לצד הציונים שלו.\n", "\n", - "כתבו תוכנה שמדפיסה את המספר הסידורי של כל אות באלף־בית האנגלי, מהסוף להתחלה.
\n", + "\n", + "כתבו תוכנה שמדפיסה את המספר הסידורי של כל אות באלף־בית האנגלי, מהסוף להתחלה.
" ] @@ -1890,7 +1887,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "השתמשו בכמה שיותר פונקציות מובנות בדרך.\n", "\n", + "
\n", "הפלט אמור להיראות כך:\n", "
" ] @@ -1911,7 +1908,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", "אנחנו הצלחנו להשתמש ב־5 פונקציות שנלמדו במחברת הזו, בקוד שאורכו 2 שורות.\n", "
" ] @@ -1920,23 +1917,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מלחמה וזהו" + "### מלחמה וזהו" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -1944,9 +1941,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " זהו תרגיל ברמת קושי גבוהה, שמערב נושאים רבים.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " זהו תרגיל ברמת קושי גבוהה, שמערב נושאים רבים.
\n", - "
\n", " הרגישו בנוח להיעזר במתרגלים שלכם.\n", "\n", - " מצאו את עשר המילים הנפוצות ביותר בספר \"מלחמה ושלום\", והדפיסו אותן למסך מהמילה הנפוצה ביותר למילה הנפוצה הכי פחות.
\n", - " ליד כל מילה הדפיסו את מספר המופעים שלה בספר.
\n", + "\n", + " מצאו את עשר המילים הנפוצות ביותר בספר \"מלחמה ושלום\", והדפיסו אותן למסך מהמילה הנפוצה ביותר למילה הנפוצה הכי פחות.
" ] diff --git a/week4/Summary.ipynb b/week4/Summary.ipynb index c171e72..924e855 100644 --- a/week4/Summary.ipynb +++ b/week4/Summary.ipynb @@ -4,33 +4,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#
\n", + " ליד כל מילה הדפיסו את מספר המופעים שלה בספר.
\n", " הספר נמצא בקובץ war-and-peace.txt בתוך התיקייה resources.\n", "תרגילים
" + "#תרגילים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "##בחירות במדינת הגמדים
" + "##בחירות במדינת הגמדים
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " במדינת הגמדים רעש מהומה, ולכן החליטו ללכת לבחירות.
\n", - " ועדת הבחירות המרכזית, בראשות דרדסבא, ערכה בחירות חשאיות והוגנות והציגה לפניכם את התוצאות בקובץ elections.txt המצורף (בתיקיית resources), על כל 353,400 בוחריה.
\n", - " הקובץ הינו רשימה של שמות המפלגות שבהן בחרו תושבי מדינת הגמדים, כאשר כל שורה מייצגת בחירה של תושב מדינת הגמדים.
\n", - " כדי לשמור על טוהר הבחירות לא נאמר לכם במפורש מהו מספר המפלגות שהגישו את רשימותיהן לוועדת הבחירות.
\n", - " עליכם הוטלה המשימה לעבור על קובץ תוצאות הבחירות ולדווח כמה קולות קיבלה כל מפלגה.
\n", + "\n", + " במדינת הגמדים רעש מהומה, ולכן החליטו ללכת לבחירות.
" ] @@ -48,10 +48,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " ועדת הבחירות המרכזית, בראשות דרדסבא, ערכה בחירות חשאיות והוגנות והציגה לפניכם את התוצאות בקובץ elections.txt המצורף (בתיקיית resources), על כל 353,400 בוחריה.
\n", + " הקובץ הינו רשימה של שמות המפלגות שבהן בחרו תושבי מדינת הגמדים, כאשר כל שורה מייצגת בחירה של תושב מדינת הגמדים.
\n", + " כדי לשמור על טוהר הבחירות לא נאמר לכם במפורש מהו מספר המפלגות שהגישו את רשימותיהן לוועדת הבחירות.
\n", + " עליכם הוטלה המשימה לעבור על קובץ תוצאות הבחירות ולדווח כמה קולות קיבלה כל מפלגה.
\n", " כתבו פונקציה שלא מקבלת פרמטרים ומחזירה את תוצאות הבחירות במילון ובו שם המפלגה ומספר הקולות שקיבלה.\n", "\n", - " אחוז החסימה במדינת הגמדים הוא אכזרי למדי ועומד על 10%.
\n", + "\n", + " אחוז החסימה במדינת הגמדים הוא אכזרי למדי ועומד על 10%.
" ] @@ -67,7 +67,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " כיון שהצביעו 353,400 גמדים – אחוז החסימה עומד על\n", - " $353,400*0.1=35,340$ קולות.
\n", + " $353,400*0.1=35,340$ קולות.
\n", " כתבו פונקציה המקבלת את מילון תוצאות הבחירות ומדפיסה אילו מפלגות עברו את אחוז החסימה ואילו לא.\n", "\n", + "
\n", "כעת כתבו פונקציה המקבלת את מילון תוצאות הבחירות ומחזירה את מספר הקולות שקיבלו רק מפלגות שעברו את אחוז החסימה.
" ] }, @@ -82,8 +82,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אחרי שסיימתם בדקו שקיבלתם את הערך הבא: 249,333\n", + "
\n", + " אחרי שסיימתם בדקו שקיבלתם את הערך הבא: 249,333\n", "
" ] }, @@ -91,11 +91,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " לאחר קבלת תוצאות האמת המפלגות פועלות להקים קואליציה. קואליציה מורכבת מ־61 מנדטים לפחות.
\n", - " מנדט שווה: $\\dfrac{votes}{120}=2.077.775\\cong2,078$ קולות.
\n", - " שימו לב, הקולות בתרגיל זה הם התוצאה של הסעיף הקודם. כלומר הקולות בניכוי הקולות עבור מפלגות שלא עברו את אחוז החסימה.
\n", - " כעת כתבו פונקציה המקבלת את מילון התוצאות ומחזירה מילון שבו שם המפלגה ממופה עם מספר המנדטים שקיבלה המפלגה.
\n", + "\n", + " לאחר קבלת תוצאות האמת המפלגות פועלות להקים קואליציה. קואליציה מורכבת מ־61 מנדטים לפחות.
" ] @@ -111,7 +111,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " מנדט שווה: $\\dfrac{votes}{120}=2.077.775\\cong2,078$ קולות.
\n", + " שימו לב, הקולות בתרגיל זה הם התוצאה של הסעיף הקודם. כלומר הקולות בניכוי הקולות עבור מפלגות שלא עברו את אחוז החסימה.
\n", + " כעת כתבו פונקציה המקבלת את מילון התוצאות ומחזירה מילון שבו שם המפלגה ממופה עם מספר המנדטים שקיבלה המפלגה.
\n", " הפעילו את פונקנצייתround
על תוצאת החלוקה (השתמשו ב־2,078) כדי לקבל את מספר המנדטים השלם.\n", "\n", + "
\n", "הדפיסו את המילון שקיבלתם. ודאו שסך המנדטים מסתכם ל־120.
" ] }, @@ -119,9 +119,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "כדי להרכיב קואליציה דרושים 61 מנדטים.
\n", - "המפלגות MidgeLandIsUs ו־NilsIsALeader לא מוכנות לשבת יחד בקואליציה.
\n", + "\n", + "כדי להרכיב קואליציה דרושים 61 מנדטים.
" ] @@ -130,27 +130,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "##
\n", + "המפלגות MidgeLandIsUs ו־NilsIsALeader לא מוכנות לשבת יחד בקואליציה.
\n", "כתבו פונקציה המקבלת את המילון המכיל את תוצאות המנדטים ומדפיסה קואליציה אפשרית עבור NilsIsALeader וקואליציה אפשרית עבור MidgeLandIsUs.\n", "Leveraging Simple Dictionaries
" + "##Leveraging Simple Dictionaries
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "###הקדמה
" + "###הקדמה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אוטומט סופי דטרמיניסטי הוא מודל מתמטי שמגדיר אוסף של מצבים, וכללי מעבר ביניהם.
\n", - " נפתח בדוגמה:
\n", - " \n", + "\n", + "אוטומט סופי דטרמיניסטי הוא מודל מתמטי שמגדיר אוסף של מצבים, וכללי מעבר ביניהם.
" ] }, @@ -158,8 +158,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " נפתח בדוגמה:
\n", + "\n", "\n", - " לפניכם מכונת מצבים שמקבלת מספר, ובודקת האם הוא זוגי.
\n", + "\n", + " לפניכם מכונת מצבים שמקבלת מספר, ובודקת האם הוא זוגי.
" ] @@ -168,9 +168,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " כל מצב מיוצג בתמונה על ידי עיגול, וכללי המעבר ביניהם מיוצגים באמצעות חצים.\n", "\n", - " המכונה מתחילה מ\"מצב התחלתי\" נתון כלשהו, במקרה שלנו \"מספר אי זוגי\".
\n", - " כל פעם שמתקבל קלט חדש, המכונה מחליטה לאיזה מצב לעבור לפי כללי המעבר הרשומים על החצים.
\n", + "\n", + " המכונה מתחילה מ\"מצב התחלתי\" נתון כלשהו, במקרה שלנו \"מספר אי זוגי\".
" ] @@ -179,11 +179,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כל פעם שמתקבל קלט חדש, המכונה מחליטה לאיזה מצב לעבור לפי כללי המעבר הרשומים על החצים.
\n", " לדוגמה, עבור הקלט 2 ואז 7 ואז 4 (274) מכונת המצבים המופיעה מעלה תבצע את הפעולות הבאות:\n", "\n", - "
- תכנס למצב ההתחלתי \"מספר אי זוגי\".
\n", - "- תקרא את הספרה הראשונה במספר – 2, ותחליט לעבור (לפי החץ) למצב \"מספר זוגי\".
\n", - "- תקרא את הספרה השנייה במספר – 7, ותחליט לעבור (לפי החץ) למצב \"מספר אי־זוגי\".
\n", - "- תקרא את הספרה השלישית במספר – 4, ותחליט לעבור (לפי החץ) למצב \"מספר זוגי\".
\n", + "\n", + "
" ] }, @@ -191,10 +191,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- תכנס למצב ההתחלתי \"מספר אי זוגי\".
\n", + "- תקרא את הספרה הראשונה במספר – 2, ותחליט לעבור (לפי החץ) למצב \"מספר זוגי\".
\n", + "- תקרא את הספרה השנייה במספר – 7, ותחליט לעבור (לפי החץ) למצב \"מספר אי־זוגי\".
\n", + "- תקרא את הספרה השלישית במספר – 4, ותחליט לעבור (לפי החץ) למצב \"מספר זוגי\".
\n", "\n", - " לכל מצב באוטומט סופי דטרמיניסטי יש \"סוג מצב\": מקבל או לא מקבל.
\n", - " מצב מקבל מסומן בעיגול כפול, כמו המצב \"מספר זוגי\" באוטומט דלעיל.
\n", - " אם בסוף הריצה הגענו למצב מקבל, סימן שהקלט תקין, ואם לא – סימן שהקלט אינו תקין.
\n", + "\n", + " לכל מצב באוטומט סופי דטרמיניסטי יש \"סוג מצב\": מקבל או לא מקבל.
" ] @@ -203,9 +203,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " מצב מקבל מסומן בעיגול כפול, כמו המצב \"מספר זוגי\" באוטומט דלעיל.
\n", + " אם בסוף הריצה הגענו למצב מקבל, סימן שהקלט תקין, ואם לא – סימן שהקלט אינו תקין.
\n", " באוטומט הדוגמה שלנו כל קלט מספרי זוגי הוא תקין, וכל מספרי אי־זוגי נחשב ללא תקין.\n", "\n", - " כל אפשרות הכלולה במצבי המעבר נקראת אות. אוסף כל האותיות הכלולות באוטומט מסוים נקרא א\"ב הקלט.
\n", - " שימו לב שבאוטומט יכולה להיות כמות גדולה של מצבים וכללי־מעבר, ובכל אוטומט יכול להיות יותר ממצב מקבל אחד.
\n", + "\n", + " כל אפשרות הכלולה במצבי המעבר נקראת אות. אוסף כל האותיות הכלולות באוטומט מסוים נקרא א\"ב הקלט.
" ] @@ -214,16 +214,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + " שימו לב שבאוטומט יכולה להיות כמות גדולה של מצבים וכללי־מעבר, ובכל אוטומט יכול להיות יותר ממצב מקבל אחד.
\n", " כמו כן, \"אות\" בא\"ב יכולה לכלול יותר מתו אחד.\n", "תרגיל
" + "###תרגיל
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כתבו תוכנה שקוראת קובץ ויוצרת ממנו אוטומט סופי דטרמיניסטי.
\n", - " בקובץ ישנו כל המידע הדרוש לבניית האוטומט, ורשימת קלטים. דוגמה לקובץ שכזה מופיעה מטה.
\n", + "\n", + " כתבו תוכנה שקוראת קובץ ויוצרת ממנו אוטומט סופי דטרמיניסטי.
" ] @@ -232,7 +232,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " בקובץ ישנו כל המידע הדרוש לבניית האוטומט, ורשימת קלטים. דוגמה לקובץ שכזה מופיעה מטה.
\n", " הדפיסו עבור כל קלט האם לאחר הרצתו האוטומט הגיע למצב מקבל או למצב לא מקבל.\n", "\n", + "
\n", " הקובץ שהתוכנה שלכם אמורה לקרוא ונועד לתאר את האוטומט המופיע למעלה נראה כך:\n", "
" ] @@ -262,7 +262,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " על התוכנה שבניתם להדפיס במקרה הזה:\n", "
" ] @@ -280,19 +280,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###הסבר עבור הדוגמה
" + "###הסבר עבור הדוגמה
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הפסקה הראשונה תמיד תראה כך:
\n", - " הקובץ תמיד יפתח במילהDefinitions:.
\n", - " שורה אחריה תמיד תופיע המילהStates:, ואחריה כל המצבים הקיימים במכונת המצבים, מופרדים בפסיק.
\n", - " שורה אחריה תמיד תופיע המילהStart:, ואחריה המצב ההתחלתי של המכונה.
\n", - " שורה אחריה תמיד תופיע המילהAccepting:, ואחריה כל המצבים שמוגדרים כמצבים מקבלים במכונת המצבים, מופרדים בפסיק.
\n", + "\n", + " הפסקה הראשונה תמיד תראה כך:
" ] }, @@ -300,12 +300,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הקובץ תמיד יפתח במילהDefinitions:.
\n", + " שורה אחריה תמיד תופיע המילהStates:, ואחריה כל המצבים הקיימים במכונת המצבים, מופרדים בפסיק.
\n", + " שורה אחריה תמיד תופיע המילהStart:, ואחריה המצב ההתחלתי של המכונה.
\n", + " שורה אחריה תמיד תופיע המילהAccepting:, ואחריה כל המצבים שמוגדרים כמצבים מקבלים במכונת המצבים, מופרדים בפסיק.
\n", "\n", - " הפסקה השנייה תמיד תראה כך:
\n", - " הפסקה תמיד תפתח במילהTransitions:, ואחריה רשימה של כללי מעבר.
\n", - " כל כלל מעבר מורכב מהמצב ממנו יוצאים, המצב אליו מגיעים ומה הקלט ש\"מפעיל\" את המעבר.
\n", - " השורה תכתב באופן הבא, כאשר X הוא המצב ממנו יוצאים, Z הוא המצב אליו מגיעים ו־Y היא רשימת הקלטים שמפעילה את מצב המעבר:
\n", - " X: Y -> Z
\n", + "\n", + " הפסקה השנייה תמיד תראה כך:
" ] }, @@ -313,9 +313,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הפסקה תמיד תפתח במילהTransitions:, ואחריה רשימה של כללי מעבר.
\n", + " כל כלל מעבר מורכב מהמצב ממנו יוצאים, המצב אליו מגיעים ומה הקלט ש\"מפעיל\" את המעבר.
\n", + " השורה תכתב באופן הבא, כאשר X הוא המצב ממנו יוצאים, Z הוא המצב אליו מגיעים ו־Y היא רשימת הקלטים שמפעילה את מצב המעבר:
\n", + " X: Y -> Z
\n", "\n", - " הפסקה השלישית תמיד תראה כך:
\n", - " הפסקה תמיד תפתח במילהInputs:, ואחריה רשימה של קלטים תקינים.
\n", + "\n", + " הפסקה השלישית תמיד תראה כך:
" ] @@ -324,10 +324,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הפסקה תמיד תפתח במילהInputs:, ואחריה רשימה של קלטים תקינים.
\n", " כל שורת קלט תופיע בשורה נפרדת בקובץ, ותכלול את רצף הקלטים שיועברו לאוטומט אחד אחרי השני, כאשר הם מופרדים בפסיק.\n", "\n", - " עבור הקלט הראשון, האוטומט יתחיל מהמצב ההתחלתי q0. האות 1 תשאיר אותו שם, כך גם 3, כך גם 1. מצב לא מקבל.
\n", - " עבור הקלט השני, האוטומט יתחיל מהמצב ההתחלתי q0. האות 2 תעביר אותו ל־q1, האות 7 תעביר אותו ל־q0, האות 4 תעביר אותו חזרה ל־q1. מצב מקבל.
\n", - " עבור הקלט השלישי, האוטומט יתחיל מהמצב ההתחלתי q0. האות 2 תעביר אותו ל־q1, האות 2 תשאיר אותו ב־q1 בכל המופעים הבאים שלה. מצב מקבל.
\n", + "\n", + " עבור הקלט הראשון, האוטומט יתחיל מהמצב ההתחלתי q0. האות 1 תשאיר אותו שם, כך גם 3, כך גם 1. מצב לא מקבל.
" ] }, @@ -335,14 +335,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "###
\n", + " עבור הקלט השני, האוטומט יתחיל מהמצב ההתחלתי q0. האות 2 תעביר אותו ל־q1, האות 7 תעביר אותו ל־q0, האות 4 תעביר אותו חזרה ל־q1. מצב מקבל.
\n", + " עבור הקלט השלישי, האוטומט יתחיל מהמצב ההתחלתי q0. האות 2 תעביר אותו ל־q1, האות 2 תשאיר אותו ב־q1 בכל המופעים הבאים שלה. מצב מקבל.
\n", "דוגמה נוספת
" + "###דוגמה נוספת
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " זוהי דוגמה לקובץ שמתאר את האוטומט המופיע כאן.\n", "
" ] diff --git a/week5/1_Modules.ipynb b/week5/1_Modules.ipynb index 0896d4d..c37b487 100644 --- a/week5/1_Modules.ipynb +++ b/week5/1_Modules.ipynb @@ -4,29 +4,29 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# מודולים" + "# מודולים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " מתכנתים העוסקים בקביעות במלאכתם, יזכו לעיתים תכופות להיתקל באתגרים בתחומים שונים.
\n", + "\n", + " מתכנתים העוסקים בקביעות במלאכתם, יזכו לעיתים תכופות להיתקל באתגרים בתחומים שונים.
" ] }, @@ -34,7 +34,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", "\n", + "
\n", " דוגמה טובה לאתגר נפוץ שכזה היא יצירת מידע אקראי:\n", "
" ] @@ -43,10 +43,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- מתכנת שיוצר משחק קלפים יצטרך לכתוב קוד לשליפת קלף אקראי מחפיסת הקלפים.
\n", - "- מתכנת שמתקשה להחליט אם הוא רוצה להיות בפריז, ברומא או בקוטב הצפוני, יכתוב תוכנית שתבחר עבורו את היעד באקראיות.
\n", - "- מתכנת שרוצה לבנות סימולציות למצבים מהחיים האמיתיים, יצטרך פעמים רבות להשתמש במידע אקראי.
\n", + "\n", + "
" ] }, @@ -54,7 +54,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מתכנת שיוצר משחק קלפים יצטרך לכתוב קוד לשליפת קלף אקראי מחפיסת הקלפים.
\n", + "- מתכנת שמתקשה להחליט אם הוא רוצה להיות בפריז, ברומא או בקוטב הצפוני, יכתוב תוכנית שתבחר עבורו את היעד באקראיות.
\n", + "- מתכנת שרוצה לבנות סימולציות למצבים מהחיים האמיתיים, יצטרך פעמים רבות להשתמש במידע אקראי.
\n", "\n", + "
\n", " דוגמה טובה נוספת היא עבודה עם תאריכים:\n", "
" ] @@ -63,10 +63,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- מתכנת שרוצה לדעת בעוד כמה זמן מגיע תאריך מסוים (יום הולדת, לדוגמה).
\n", - "- מתכנת שרוצה לבדוק מה יהיה התאריך בעוד 100,000,000 שניות.
\n", - "- מתכנת שקיבל מסמך עם תאריכי הלידה של כל אוכלוסיית ישראל, ורוצה לדעת מהו החודש שבו נולדים הכי הרבה תינוקות בישראל.
\n", + "\n", + "
" ] }, @@ -74,9 +74,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- מתכנת שרוצה לדעת בעוד כמה זמן מגיע תאריך מסוים (יום הולדת, לדוגמה).
\n", + "- מתכנת שרוצה לבדוק מה יהיה התאריך בעוד 100,000,000 שניות.
\n", + "- מתכנת שקיבל מסמך עם תאריכי הלידה של כל אוכלוסיית ישראל, ורוצה לדעת מהו החודש שבו נולדים הכי הרבה תינוקות בישראל.
\n", "\n", - " פתירת האתגרים הללו עשויה להיות משימה מורכבת, ולטמון בחובה בעיות ומקרי קצה רבים.
\n", - " תארו לעצמכם כמה זמן היה נחסך לו היה מישהו פותר את הבעיות הנפוצות הללו עבור כל המתכנתים!
\n", + "\n", + " פתירת האתגרים הללו עשויה להיות משימה מורכבת, ולטמון בחובה בעיות ומקרי קצה רבים.
" ] }, @@ -84,17 +84,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## הגדרה" + "## הגדרה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " תארו לעצמכם כמה זמן היה נחסך לו היה מישהו פותר את הבעיות הנפוצות הללו עבור כל המתכנתים!
\n", "\n", - " כרעיון, מודול הוא פיסת תוכנה עצמאית המשרתת מטרה מוגדרת.
\n", - " המטרה יכולה להיות, לדוגמה, טיפול בתאריכים, יצירת נתונים אקראיים או תקשורת עם אתרי אינטרנט.
\n", - " בפייתון, מודול הוא קובץ המאגד הגדרות ופקודות, שיחדיו יוצרות אוסף כלים בתחום מסוים.
\n", + "\n", + " כרעיון, מודול הוא פיסת תוכנה עצמאית המשרתת מטרה מוגדרת.
" ] }, @@ -102,22 +102,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## שימוש" + "## שימוש" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### יבוא" + "### יבוא" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " המטרה יכולה להיות, לדוגמה, טיפול בתאריכים, יצירת נתונים אקראיים או תקשורת עם אתרי אינטרנט.
\n", + " בפייתון, מודול הוא קובץ המאגד הגדרות ופקודות, שיחדיו יוצרות אוסף כלים בתחום מסוים.
\n", "\n", - " ניקח כדוגמה את המודול
random
, שמטרתו לעזור לנו ליצור מידע אקראי.
\n", + "\n", + " ניקח כדוגמה את המודול
" ] @@ -135,9 +135,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "random
, שמטרתו לעזור לנו ליצור מידע אקראי.
\n", " לפני שנוכל להשתמש ביכולותיו של המודול, נצטרך לבקש מפייתון לטעון אותו בעזרת מילת המפתחimport
:\n", "\n", - " פעולה זו טוענת את המודול ומאפשרת לנו להשתמש בו בהמשך הקוד. נהוג להגיד שייבאנו את המודול
random
.
\n", - " עכשיו, כשהמודול יובא, אפשר להשתמש בו בקוד התוכנית שלנו באופן שיענה על הצורך ליצירת דברים אקראיים.
\n", + "\n", + " פעולה זו טוענת את המודול ומאפשרת לנו להשתמש בו בהמשך הקוד. נהוג להגיד שייבאנו את המודול
" ] @@ -146,10 +146,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "random
.
\n", + " עכשיו, כשהמודול יובא, אפשר להשתמש בו בקוד התוכנית שלנו באופן שיענה על הצורך ליצירת דברים אקראיים.
\n", " כדי להבין איך להשתמש במודול ומהן יכולותיו, נוכל לקרוא מידע נוסף על אודותיו במגוון דרכים:\n", "\n", - "
- בעזרת התיעוד באתר פייתון, שאליו אפשר להגיע אם כותבים
\n", - "python documentation randomבמנועי חיפוש.- בעזרת הפונקציה dir – נוכל לכתוב
\n", - "dir(random)
.- בג'ופיטר, אם נכתוב בתא קוד
\n", + "random.
ונלחץ Tab ↹.\n", + "
" ] }, @@ -157,16 +157,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### דוגמאות לשימוש" + "### דוגמאות לשימוש" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- בעזרת התיעוד באתר פייתון, שאליו אפשר להגיע אם כותבים
\n", + "python documentation randomבמנועי חיפוש.- בעזרת הפונקציה dir – נוכל לכתוב
\n", + "dir(random)
.- בג'ופיטר, אם נכתוב בתא קוד
\n", "random.
ונלחץ Tab ↹.\n", - " במשחק הפוקימון \"פוקימון אדום\" אפשר לבחור בתור הפוקימון ההתחלתי את בלבזאור, את סקווירטל או את צ'רמנדר.
\n", - " על הפוקימון הטוב ביותר לבחירה ניטשים ויכוחים רבים עוד מאז שחרורו של המשחק ב־1996.
\n", + "\n", + " במשחק הפוקימון \"פוקימון אדום\" אפשר לבחור בתור הפוקימון ההתחלתי את בלבזאור, את סקווירטל או את צ'רמנדר.
" ] @@ -175,9 +175,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " על הפוקימון הטוב ביותר לבחירה ניטשים ויכוחים רבים עוד מאז שחרורו של המשחק ב־1996.
\n", " כדי לא להיקלע לעין הסערה, נבנה תוכנה שתבחר את הפוקימון עבורנו באופן אקראי.\n", "\n", - " התיעוד של המודול
random
, כולל פונקציה בשם choice, שבאמצעותה נוכל לבחור איבר אקראי מתוך iterable.
\n", - " השימוש בתיעוד מומלץ במיוחד בהקשרי מודולים, שכן ההסברים שם בהירים, ופעמים רבות מובאות שם דוגמאות לשימוש בפונקציות של המודול.
\n", + "\n", + "התיעוד של המודול
" ] @@ -199,16 +199,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "random
, כולל פונקציה בשם choice, שבאמצעותה נוכל לבחור איבר אקראי מתוך iterable.
\n", + " השימוש בתיעוד מומלץ במיוחד בהקשרי מודולים, שכן ההסברים שם בהירים, ופעמים רבות מובאות שם דוגמאות לשימוש בפונקציות של המודול.
\n", " נייבא אתrandom
ואז נשתמש ב־choice:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -216,23 +216,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " לא היינו יכולים להשתמש ב־
random.choice
לולא היינו מייבאים אתrandom
.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " לא היינו יכולים להשתמש ב־
\n", - "random.choice
לולא היינו מייבאים אתrandom
.
\n", " מרגע שייבאנו את המודול – נוכל להשתמש בו לאורך כל הקוד.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -240,14 +240,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### יתרונות" + "### יתרונות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " השתמשו בפונקציה הנמצאת במודול
random
כדי לדמות הטלת קובייה בעלת 20 פאות (D20).
\n", - " הגרילו מספר בין 1 ל־20, הפעם בעזרת פונקציה שהיא לאchoice
.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " השתמשו בפונקציה הנמצאת במודול
\n", - "random
כדי לדמות הטלת קובייה בעלת 20 פאות (D20).
\n", + " הגרילו מספר בין 1 ל־20, הפעם בעזרת פונקציה שהיא לאchoice
.
\n", " השתמשו במקורות המידע שצוינו כדי למצוא את הפונקציה המתאימה למשימה.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", " אלו, בין היתר, היתרונות של שימוש במודולים הקיימים בפייתון:\n", "
" ] @@ -256,18 +256,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- \n", - " פישוט: מודול לרוב יפתור לנו בעיה אחת, קטנה ומוגדרת היטב.\n", + "
\n", + "
" ] @@ -276,8 +276,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- \n", + "פישוט: מודול לרוב יפתור לנו בעיה אחת, קטנה ומוגדרת היטב.\n", "
\n", - "- \n", - " הפרדה: המודול מופרד מהקוד שלנו, ישאיר את הקוד שלנו נקי ויעזור לנו להתמקד בבעיה שאנחנו מעוניינים לפתור. \n", + "
- \n", + "הפרדה: המודול מופרד מהקוד שלנו, ישאיר את הקוד שלנו נקי ויעזור לנו להתמקד בבעיה שאנחנו מעוניינים לפתור. \n", "
\n", - "- \n", - " מִחזוּר: מודול מאפשר לנו להשתמש בקוד שכתבנו בפרויקטים רבים, מבלי לכתוב את הקוד מחדש בכל פרויקט. \n", + "
- \n", + "מִחזוּר: מודול מאפשר לנו להשתמש בקוד שכתבנו בפרויקטים רבים, מבלי לכתוב את הקוד מחדש בכל פרויקט. \n", "
\n", - "- \n", - " רמת גימור: המודולים הרשמיים של פייתון מתוחזקים ברמה גבוהה, יש בהם מעט באגים והם מכסים מקרי קצה רבים. \n", + "
- \n", + "רמת גימור: המודולים הרשמיים של פייתון מתוחזקים ברמה גבוהה, יש בהם מעט באגים והם מכסים מקרי קצה רבים. \n", "
\n", "\n", - " רוב התוכנות שבהן אתם משתמשים נעזרות במספר לא מועט של מודולים.
\n", + "\n", + " רוב התוכנות שבהן אתם משתמשים נעזרות במספר לא מועט של מודולים.
" ] @@ -286,14 +286,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### תרגיל ביניים: יצירת סיסמה" + "### תרגיל ביניים: יצירת סיסמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " כרגע נתמקד בשימוש במודולים שמגיעים עם פייתון, אך בעתיד נשתמש במודולים שיצרו מתכנתים אחרים, ואף ניצור מודולים בעצמנו.\n", "\n", + "
\n", " איש דג החרב מגדיר \"מחולל סיסמאות חזקות\" כך:\n", "
" ] @@ -302,10 +302,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- בקריאה לפונקציית המחולל, המחולל יחזיר סיסמה חזקה.
\n", - "- אורכה של סיסמה חזקה הוא בין 12 ל־20 תווים.
\n", - "- לפחות בחלק מהסיסמאות שמייצר המחולל יהיו גם אותיות גדולות, גם אותיות קטנות וגם מספרים.
\n", + "\n", + "
" ] }, @@ -313,7 +313,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- בקריאה לפונקציית המחולל, המחולל יחזיר סיסמה חזקה.
\n", + "- אורכה של סיסמה חזקה הוא בין 12 ל־20 תווים.
\n", + "- לפחות בחלק מהסיסמאות שמייצר המחולל יהיו גם אותיות גדולות, גם אותיות קטנות וגם מספרים.
\n", "\n", + "
\n", " כתבו מחולל סיסמאות חזקות.\n", "
" ] @@ -322,16 +322,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -339,15 +339,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### יבוא מתוך מודול" + "### יבוא מתוך מודול" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " על אף שזהו תרגיל נחמד, לעולם לא נשתמש ב־
random
לצורכי אבטחת מידע.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " על אף שזהו תרגיל נחמד, לעולם לא נשתמש ב־
\n", - "random
לצורכי אבטחת מידע.
\n", " להרחבה, קראו על יתרונותיו של המודולsecrets
.\n", "\n", - " עצרת של המספר $n$ (המסומנת כ־$n!$) היא מכפלת כל המספרים השלמים החיוביים עד $n$, כולל.
\n", + "\n", + " עצרת של המספר $n$ (המסומנת כ־$n!$) היא מכפלת כל המספרים השלמים החיוביים עד $n$, כולל.
" ] @@ -366,9 +366,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נחשב את העצרת של 6 באמצעות המודולmath
:\n", "\n", - " במקרה שהצגנו, אין לנו באמת צורך בכל הפונקציות הנמצאות במודול
math
, אלא רק בפונקציה factorial.
\n", - " תעלול נחמד שאפשר לעשות הוא לייבא רק את factorial באמצעות מילת המפתחfrom
:
\n", + "\n", + " במקרה שהצגנו, אין לנו באמת צורך בכל הפונקציות הנמצאות במודול
" ] }, @@ -386,8 +386,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "math
, אלא רק בפונקציה factorial.
\n", + " תעלול נחמד שאפשר לעשות הוא לייבא רק את factorial באמצעות מילת המפתחfrom
:
\n", "\n", - " כדאי לשים לב שלאחר שייבאנו בעזרת
from
נשתמש ישירות ב־factorial, מבלי להזכיר את השייכות שלה למודולmath
.
\n", + "\n", + " כדאי לשים לב שלאחר שייבאנו בעזרת
" ] @@ -406,9 +406,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "from
נשתמש ישירות ב־factorial, מבלי להזכיר את השייכות שלה למודולmath
.
\n", " אפשר גם לייבא יותר משם אחד מאותו מודול, במכה אחת:\n", "\n", - " באופן כללי, העדיפו לייבא את המודול כולו ולא חלקים מתוכו.
\n", - " זה יעזור לכם להימנע מיצירת מקרים מבלבלים כמו זה:
\n", + "\n", + " באופן כללי, העדיפו לייבא את המודול כולו ולא חלקים מתוכו.
" ] }, @@ -428,7 +428,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " זה יעזור לכם להימנע מיצירת מקרים מבלבלים כמו זה:
\n", "\n", + "
\n", " אם ממשיכים בכיוון, פייתון מאפשרת לנו לעשות את הדבר המזעזע הבא:\n", "
" ] @@ -446,8 +446,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " יבוא בעזרת כוכבית יגרום לכך שכל מה שמוגדר במודול \"יישפך\" לתוך התוכנית שלנו.
\n", + "\n", + " יבוא בעזרת כוכבית יגרום לכך שכל מה שמוגדר במודול \"יישפך\" לתוך התוכנית שלנו.
" ] @@ -468,8 +468,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " זה יאפשר לנו להשתמש בכל התוכן שלmath
בלי להזכיר את שם המודול:\n", "\n", - " פרקטיקה זו נחשבת מאוד לא מנומסת, ואתם מתבקשים לא להשתמש בה, אלא אם כן אלו ההוראות הכתובות בתיעוד של המודול.
\n", + "\n", + " פרקטיקה זו נחשבת מאוד לא מנומסת, ואתם מתבקשים לא להשתמש בה, אלא אם כן אלו ההוראות הכתובות בתיעוד של המודול.
" ] @@ -478,10 +478,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ישנן לא מעט סיבות הגיוניות מאחורי איסור זה:\n", "\n", - "
- זה מקשה על מתכנת שקורא את הקוד להבין איפה הוגדרו ceil, floor, e ו־pow.
\n", - "- אנחנו \"מזהמים\" את הסביבה שלנו בהגדרות רבות שלעולם לא נשתמש בהן.
\n", - "- חלק מהכלים שבהם תשתמשו בעתיד לא ידעו לזהות את השמות הללו, כיוון שלא ייבאתם אותם מפורשות.
\n", + "\n", + "
" ] }, @@ -489,18 +489,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### שינוי שם ביבוא" + "### שינוי שם ביבוא" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- זה מקשה על מתכנת שקורא את הקוד להבין איפה הוגדרו ceil, floor, e ו־pow.
\n", + "- אנחנו \"מזהמים\" את הסביבה שלנו בהגדרות רבות שלעולם לא נשתמש בהן.
\n", + "- חלק מהכלים שבהם תשתמשו בעתיד לא ידעו לזהות את השמות הללו, כיוון שלא ייבאתם אותם מפורשות.
\n", "\n", - " המודול
turtle
הוא דרך פופולרית ללמד ילדים תכנות באמצעים גרפיים.
\n", - " תכנות ב־turtle הוא מעין משחק: ישנו צב שהולך במרחב, ומשאיר צבע בכל מקום שאליו הוא מגיע.
\n", - " אפשר להורות לצב בכמה מעלות להסתובב לכל כיוון, ולאיזה מרחק ללכת בכיוון שאליו הוא מופנה.
\n", - " כך, בסוף מסלול הטיול של הצב, מתקבל ציור מלא חן.
\n", + "\n", + " המודול
" ] @@ -509,8 +509,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "turtle
הוא דרך פופולרית ללמד ילדים תכנות באמצעים גרפיים.
\n", + " תכנות ב־turtle הוא מעין משחק: ישנו צב שהולך במרחב, ומשאיר צבע בכל מקום שאליו הוא מגיע.
\n", + " אפשר להורות לצב בכמה מעלות להסתובב לכל כיוון, ולאיזה מרחק ללכת בכיוון שאליו הוא מופנה.
\n", + " כך, בסוף מסלול הטיול של הצב, מתקבל ציור מלא חן.
\n", " הרעיון נוצר כחלק משפת התכנות Logo בשנת 1967.\n", "\n", - " נראה דוגמה לתוצר של ריצת תוכנית שכזו, שבה אנחנו משרטטים 100 ריבועים בהיסט של מעלה אחת בכל פעם.
\n", + "\n", + " נראה דוגמה לתוצר של ריצת תוכנית שכזו, שבה אנחנו משרטטים 100 ריבועים בהיסט של מעלה אחת בכל פעם.
" ] @@ -538,16 +538,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " אנחנו ממליצים לשחק עם המודול קצת (זה כיף!) ולראות אם אתם מצליחים לצייר כוכב, לדוגמה :)\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -555,8 +555,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הרצת קוד של
turtle
תפתח לכם חלון חדש בו יצויר פלט התוכנית.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " הרצת קוד של
\n", - "turtle
תפתח לכם חלון חדש בו יצויר פלט התוכנית.
\n", " כדי להמשיך להריץ את התאים במחברת, סגרו את החלון.\n", "\n", - " כדי לשנות את השם שבו אנחנו מתייחסים למודול, ניעזר במילת המפתח
as
.
\n", + "\n", + " כדי לשנות את השם שבו אנחנו מתייחסים למודול, ניעזר במילת המפתח
" ] @@ -584,8 +584,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "as
.
\n", " לדוגמה:\n", "\n", - " כך אפשר לקצר את שם המודול שאנחנו מייבאים, ולהימנע מסרבול מיותר.
\n", + "\n", + " כך אפשר לקצר את שם המודול שאנחנו מייבאים, ולהימנע מסרבול מיותר.
" ] @@ -594,13 +594,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " למרות זאת, יבוא מודול תחת שם אחר נחשב פרקטיקה לא מנומסת, שעלולה לבלבל קוראים שבקיאים בשמות המודולים הקיימים.\n", "\n", + "
\n", " ישנם שני מקרים יוצאי דופן, שבהם השימוש ב־
\n", - "\n", - "as
נחשב רצוי:\n", "\n", - "
- כאשר מבקשים מאיתנו להשתמש ב־
\n", - "as
במסמכי התיעוד של המודול.- כאשר אנחנו רוצים להתנסות בדברים ולחסוך זמן, נקצר את השמות של המודולים, הפונקציות או הקבועים שאותם אנחנו מייבאים.
\n", + "\n", + "
" ] }, @@ -608,16 +607,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### נימוסים והליכות" + "### נימוסים והליכות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- כאשר מבקשים מאיתנו להשתמש ב־
\n", + "as
במסמכי התיעוד של המודול.- כאשר אנחנו רוצים להתנסות בדברים ולחסוך זמן, נקצר את השמות של המודולים, הפונקציות או הקבועים שאותם אנחנו מייבאים.
\n", "\n", - " לשימוש במודולים יש כללי סגנון שמוסכמים על רוב המתכנתים.
\n", - " הם מופיעים במסמך בשם PEP8, שמטרתו להגדיר איך נראה קוד פייתון המסוגנן כראוי.
\n", + "\n", + " לשימוש במודולים יש כללי סגנון שמוסכמים על רוב המתכנתים.
" ] @@ -626,12 +625,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " הם מופיעים במסמך בשם PEP8, שמטרתו להגדיר איך נראה קוד פייתון המסוגנן כראוי.
\n", " הנה כמה כללים שראוי שתעקבו אחריהם:\n", "\n", - "
- יבוא המודולים תמיד יתבצע בראש הקוד, לפני כל דבר אחר.
\n", - "- כאשר מייבאים יותר ממודול אחד, סדר היבוא צריך להיות מילוני – לפי שם המודול שיובא.
\n", - "- טכנית, אפשר לייבא יותר ממודול אחד בשורה, אם נפריד את שמות המודולים בפסיק. מעשית זה לא מנומס.
\n", - "- כאשר משתמשים ב־
\n", - "from
ליבוא של יותר משם אחד – השמות צריכים להיות מסודרים בסדר מילוני.- יש להימנע משימוש ביבוא בעזרת כוכבית.
\n", + "\n", + "
" ] }, @@ -639,14 +638,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### דוגמאות נוספות" + "### דוגמאות נוספות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- יבוא המודולים תמיד יתבצע בראש הקוד, לפני כל דבר אחר.
\n", + "- כאשר מייבאים יותר ממודול אחד, סדר היבוא צריך להיות מילוני – לפי שם המודול שיובא.
\n", + "- טכנית, אפשר לייבא יותר ממודול אחד בשורה, אם נפריד את שמות המודולים בפסיק. מעשית זה לא מנומס.
\n", + "- כאשר משתמשים ב־
\n", + "from
ליבוא של יותר משם אחד – השמות צריכים להיות מסודרים בסדר מילוני.- יש להימנע משימוש ביבוא בעזרת כוכבית.
\n", "\n", + "
\n", " מה התאריך היום?\n", "
" ] @@ -666,7 +665,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "
\n", " נשתמש במודול
" ] @@ -688,18 +687,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## סיכום" + "## סיכום" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "calendar
כדי להדפיס את לוח השנה של החודש הנוכחי:\n", "\n", - "
- מודולים הם חלקי תוכנה שמטרתם לפתור בעיה מעולם תוכן מסוים.
\n", - "- אפשר לייבא מודולים ולהשתמש במה שהם מציעים כדי להשיג את מטרותינו במהירות ובקלות.
\n", - "- המודולים שמגיעים עם פייתון מתוחזקים היטב, ויחסכו לנו באגים והתעסקות עם מקרי קצה.
\n", - "- לפני שניגש לפתור בעיה מורכבת, ננסה למצוא בתיעוד של פייתון פתרון בדמות מודול קיים.
\n", + "\n", + "
" ] }, @@ -707,15 +706,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## מונחים" + "## מונחים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- מודולים הם חלקי תוכנה שמטרתם לפתור בעיה מעולם תוכן מסוים.
\n", + "- אפשר לייבא מודולים ולהשתמש במה שהם מציעים כדי להשיג את מטרותינו במהירות ובקלות.
\n", + "- המודולים שמגיעים עם פייתון מתוחזקים היטב, ויחסכו לנו באגים והתעסקות עם מקרי קצה.
\n", + "- לפני שניגש לפתור בעיה מורכבת, ננסה למצוא בתיעוד של פייתון פתרון בדמות מודול קיים.
\n", "\n", - "
- מודול
- יחידה עצמאית של קוד המיועדת לטיפול במטרה מסוימת, ושקוד חיצוני יכול להשתמש בה.
\n", + "
בשפות תכנות אחרות מוכר גם כספרייה.\n", + "
" @@ -725,15 +724,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## תרגילים" + "## תרגילים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- מודול
- יחידה עצמאית של קוד המיועדת לטיפול במטרה מסוימת, ושקוד חיצוני יכול להשתמש בה.
\n", "
בשפות תכנות אחרות מוכר גם כספרייה.- יבוא
- הצהרה בעזרת
\n", "import
על כך שאנחנו הולכים להשתמש במודול מסוים בקוד שלנו.- PEP8
- מסמך תקינה המתאר לפרטים מהי הדרך הנכונה לסגנן קוד פייתון.
\n", "\n", - " בתרגילים הבאים השתמשו באינטרנט כדי למצוא מודולים ופונקציות שיסייעו לכם לפתור את התרגיל.
\n", + "\n", + " בתרגילים הבאים השתמשו באינטרנט כדי למצוא מודולים ופונקציות שיסייעו לכם לפתור את התרגיל.
" ] @@ -742,15 +741,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### זו הדרך" + "### זו הדרך" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נסו להימנע מחיפוש ומקריאה של פתרונות לתרגיל המסוים המופיע במחברת (כמו חיפושים הכוללים \"חפיסת קלפים\").\n", "\n", - " כתבו פונקציה שמקבלת נתיב לתיקייה, ומחזירה את רשימת כל הקבצים שמתחילים ברצף האותיות \"deep\" באותה תיקייה.
\n", + "\n", + " כתבו פונקציה שמקבלת נתיב לתיקייה, ומחזירה את רשימת כל הקבצים שמתחילים ברצף האותיות \"deep\" באותה תיקייה.
" ] @@ -759,14 +758,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### משחק קלפים משונה" + "### משחק קלפים משונה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " בדקו שהפעלת הפונקציה על התיקייה images מחזירה שני קבצים.\n", "\n", + "
\n", " בחפיסת קלפים רגילה, שבה 52 קלפים, יש לכל קלף שתי תכונות:\n", "
" ] @@ -775,12 +774,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- \n", - " ערך: מספר שבין 1 ל־13.\n", + "
\n", + "
" ] @@ -789,7 +788,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- \n", + "ערך: מספר שבין 1 ל־13.\n", "
\n", - "- \n", - " צורה: תלתן (Club), יהלום (Diamond), לב (Heart) או עלה (Spade). \n", + "
- \n", + "צורה: תלתן (Club), יהלום (Diamond), לב (Heart) או עלה (Spade). \n", "
\n", "\n", + "
\n", " כל צירוף של ערך וצורה מופיע בחפיסה בדיוק פעם אחת.\n", "
" ] @@ -798,11 +797,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- צרו חפיסת קלפים מלאה.
\n", - "- טרפו את הקלפים.
\n", - "- חלקו אותם בין 4 שחקנים.
\n", - "- הדפיסו לאיזה שחקן סכום הקלפים הגבוה ביותר.
\n", + "\n", + "
" ] }, @@ -810,15 +809,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### It's the final?" + "### It's the final?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- צרו חפיסת קלפים מלאה.
\n", + "- טרפו את הקלפים.
\n", + "- חלקו אותם בין 4 שחקנים.
\n", + "- הדפיסו לאיזה שחקן סכום הקלפים הגבוה ביותר.
\n", "\n", - " כתבו פונקציה שמקבלת תאריך עתידי בתצורה YYYY-MM-DD, ומדפיסה את מספר הימים שנשארו עד שנגיע לתאריך המיוחל.
\n", + "\n", + " כתבו פונקציה שמקבלת תאריך עתידי בתצורה YYYY-MM-DD, ומדפיסה את מספר הימים שנשארו עד שנגיע לתאריך המיוחל.
" ] @@ -827,18 +826,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### אין לי וִנִגְרֶט" + "### אין לי וִנִגְרֶט" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " לדוגמה, אם התאריך היום הוא 2020-05-04 וקיבלנו כקלט 2020-05-25, הפונקציה תחזיר 21.\n", "\n", - " כתבו תוכנה שמקבלת כקלט מהמשתמש שני תאריכים בתצורה: YYYY-MM-DD.
\n", - " התוכנה תגריל תאריך חדש שנמצא בין שני התאריכים שהמשתמש הזין כקלט.
\n", - " לדוגמה, עבור הקלטים 1912-06-23 ו־1954-06-07, פלט אפשרי הוא 1939-09-03.
\n", - " כיוון שאני הולך למכולת רק בימי שני ואני צרכן כבד של רוטב ויניגרט, אם התאריך נופל על יום שני, הדפיסו: \"אין לי ויניגרט!\"
\n", + "\n", + " כתבו תוכנה שמקבלת כקלט מהמשתמש שני תאריכים בתצורה: YYYY-MM-DD.
" ] diff --git a/week5/2_Functions_Part_2.ipynb b/week5/2_Functions_Part_2.ipynb index f925ed1..1abe234 100644 --- a/week5/2_Functions_Part_2.ipynb +++ b/week5/2_Functions_Part_2.ipynb @@ -4,28 +4,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "" + "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# פונקציות – חלק 2" + "# פונקציות – חלק 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## הקדמה" + "## הקדמה" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " התוכנה תגריל תאריך חדש שנמצא בין שני התאריכים שהמשתמש הזין כקלט.
\n", + " לדוגמה, עבור הקלטים 1912-06-23 ו־1954-06-07, פלט אפשרי הוא 1939-09-03.
\n", + " כיוון שאני הולך למכולת רק בימי שני ואני צרכן כבד של רוטב ויניגרט, אם התאריך נופל על יום שני, הדפיסו: \"אין לי ויניגרט!\"
\n", " רמז: קראו על EPOCH.\n", "\n", + "
\n", " עד כה למדנו להכיר את עולמן של הפונקציות מקרוב:\n", "
" ] @@ -34,10 +34,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- פונקציות הן כלי שימושי שמאפשר לנו לחלק את הקוד לתתי־משימות מוגדרות, ולשמור עליו מסודר וקל לתחזוק.
\n", - "- לפונקציה יש \"קלט\" שהוא הפרמטרים שלה, ו\"פלט\" שהוא ערך ההחזרה שלה.
\n", - "- אפשר לקרוא לפונקציה בציון שמה, סוגריים, ורשימת הארגומנטים שרוצים להעביר לפרמטרים שלה.
\n", + "\n", + "
" ] }, @@ -45,7 +45,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- פונקציות הן כלי שימושי שמאפשר לנו לחלק את הקוד לתתי־משימות מוגדרות, ולשמור עליו מסודר וקל לתחזוק.
\n", + "- לפונקציה יש \"קלט\" שהוא הפרמטרים שלה, ו\"פלט\" שהוא ערך ההחזרה שלה.
\n", + "- אפשר לקרוא לפונקציה בציון שמה, סוגריים, ורשימת הארגומנטים שרוצים להעביר לפרמטרים שלה.
\n", "\n", + "
\n", " במחברת זו נרכוש כלים נוספים שיאפשרו לנו גמישות רבה יותר בהגדרת פונקציות ובשימוש בהן.\n", "
" ] @@ -54,23 +54,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## שימוש מתקדם בפונקציות" + "## שימוש מתקדם בפונקציות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### העברת ארגומנטים בעזרת שם" + "### העברת ארגומנטים בעזרת שם" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כאשר אנחנו קוראים לפונקציה, יישלחו לפי הסדר הארגומנטים שנעביר אל הפרמטרים שמוגדרים בכותרת הפונקציה.
\n", - " מצב כזה נקרא positional arguments (\"ארגומנטים לפי מיקום\").
\n", + "\n", + " כאשר אנחנו קוראים לפונקציה, יישלחו לפי הסדר הארגומנטים שנעביר אל הפרמטרים שמוגדרים בכותרת הפונקציה.
" ] @@ -97,8 +97,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " מצב כזה נקרא positional arguments (\"ארגומנטים לפי מיקום\").
\n", " נסתכל על פונקציה שמקבלת טווח (סוף והתחלה, בסדר הזה) ומחזירה רשימה של כל המספרים השלמים בטווח:\n", "\n", - " לפעמים נרצה לשנות את סדר הארגומנטים שאנחנו שולחים לפונקציה.
\n", + "\n", + " לפעמים נרצה לשנות את סדר הארגומנטים שאנחנו שולחים לפונקציה.
" ] @@ -116,11 +116,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נעשה זאת בקריאה לפונקציה, על־ידי העברת שם הארגומנט ולאחר מכן העברת הערך שאנחנו רוצים להעביר אליו: \n", "\n", - " בשורה הזו הפכנו את סדר הארגומנטים.
\n", - " כיוון שבקריאה כתבנו את שמות הפרמטרים התואמים לכותרת הפונקציה, הערכים נשלחו למקום הנכון.
\n", - " השיטה הזו נקראת keyword arguments (\"ארגומנטים לפי שם\"), ובה אנחנו מעבירים את הארגומנטים שלנו לפי שמות הפרמטרים בכותרת הפונקציה.
\n", - " אנחנו משתמשים בשיטה הזו אפילו כשאנחנו לא רוצים לשנות את סדר הארגומנטים, אלא רק לעשות קצת סדר בקוד.
\n", + "\n", + " בשורה הזו הפכנו את סדר הארגומנטים.
" ] @@ -156,16 +156,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כיוון שבקריאה כתבנו את שמות הפרמטרים התואמים לכותרת הפונקציה, הערכים נשלחו למקום הנכון.
\n", + " השיטה הזו נקראת keyword arguments (\"ארגומנטים לפי שם\"), ובה אנחנו מעבירים את הארגומנטים שלנו לפי שמות הפרמטרים בכותרת הפונקציה.
\n", + " אנחנו משתמשים בשיטה הזו אפילו כשאנחנו לא רוצים לשנות את סדר הארגומנטים, אלא רק לעשות קצת סדר בקוד.
\n", " נבחן, לדוגמה, את המקרה של הפונקציהrandom.randrange
– נעים יותר לראות קריאה לפונקציה עם שמות הפרמטרים:\n", "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -173,15 +173,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### פרמטרים עם ערכי ברירת מחדל" + "### פרמטרים עם ערכי ברירת מחדל" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " למרות השימוש בסימן
=
, לא מדובר פה בהשמה במובן הקלאסי שלה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " למרות השימוש בסימן
\n", - "=
, לא מדובר פה בהשמה במובן הקלאסי שלה.
\n", " זוהי צורת כתיבה מיוחדת בקריאה לפונקציות שהמטרה שלה היא לסמן \"העבר לפרמטר ששמו כך־וכך את הערך כך־וכך\".\n", "\n", - " נזכר בפונקציה
get
של מילון, שמאפשרת לקבל ממנו ערך לפי מפתח מסוים.
\n", + "\n", + " נזכר בפונקציה
" ] @@ -209,8 +209,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get
של מילון, שמאפשרת לקבל ממנו ערך לפי מפתח מסוים.
\n", " אם המפתח שאנחנו מחפשים לא קיים במילון, הפונקציה מחזירה None:\n", "\n", - " נממש את הפונקציה
get
בעצמנו. לשם הנוחות, ייראה השימוש שונה במקצת:
\n", + "\n", + " נממש את הפונקציה
" ] }, @@ -236,8 +236,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get
בעצמנו. לשם הנוחות, ייראה השימוש שונה במקצת:
\n", "\n", - " המימוש שלנו לא מושלם. הפעולה המקורית,
get
על מילון, פועלת בצורה מתוחכמת יותר.
\n", + "\n", + " המימוש שלנו לא מושלם. הפעולה המקורית,
" ] @@ -258,12 +258,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get
על מילון, פועלת בצורה מתוחכמת יותר.
\n", " אפשר להעביר לה פרמטר נוסף, שקובע מה יחזור אם המפתח שהעברנו בפרמטר הראשון לא נמצא במילון:\n", "\n", - " שימו לב להתנהגות המיוחדת של הפעולה
get
!
\n", - " אם המפתח שהעברנו בארגומנט הראשון לא קיים במילון, היא מחזירה את הערך שכתוב בארגומנט השני.
\n", - " אפשר להעביר לה ארגומנט אחד, ואפשר להעביר לה שני ארגומנטים. היא מתפקדת כראוי בשני המצבים.
\n", - " זו לא פעם ראשונה שאנחנו רואים פונקציות כאלו. למעשה, בשבוע שעבר למדנו על פעולות builtins רבות שמתנהגות כך:
\n", - "range
,enumerate
ו־round
, כולן יודעות לקבל מספר משתנה של ארגומנטים.\n", + "\n", + " שימו לב להתנהגות המיוחדת של הפעולה
" ] }, @@ -271,10 +271,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get
!
\n", + " אם המפתח שהעברנו בארגומנט הראשון לא קיים במילון, היא מחזירה את הערך שכתוב בארגומנט השני.
\n", + " אפשר להעביר לה ארגומנט אחד, ואפשר להעביר לה שני ארגומנטים. היא מתפקדת כראוי בשני המצבים.
\n", + " זו לא פעם ראשונה שאנחנו רואים פונקציות כאלו. למעשה, בשבוע שעבר למדנו על פעולות builtins רבות שמתנהגות כך:
\n", + "range
,enumerate
ו־round
, כולן יודעות לקבל מספר משתנה של ארגומנטים.\n", "\n", - " נניח לפעולה
get
בינתיים. אל דאגה, נחזור אליה בקרוב.
\n", - " בזמן שאנחנו נחים מפעולות על מילונים יום האהבה מתקרב, וחנות הוורדים הקרובה מעוניינת להעלות את מחירי כל מוצריה בשקל אחד.
\n", - " התבקשנו לבנות עבורם פונקציה שמקבלת רשימת מחירים, ומחזירה רשימה שבה כל איבר גדול ב־1 מרשימת המחירים המקורית.
\n", + "\n", + " נניח לפעולה
" ] @@ -300,11 +300,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get
בינתיים. אל דאגה, נחזור אליה בקרוב.
\n", + " בזמן שאנחנו נחים מפעולות על מילונים יום האהבה מתקרב, וחנות הוורדים הקרובה מעוניינת להעלות את מחירי כל מוצריה בשקל אחד.
\n", + " התבקשנו לבנות עבורם פונקציה שמקבלת רשימת מחירים, ומחזירה רשימה שבה כל איבר גדול ב־1 מרשימת המחירים המקורית.
\n", " ניגש לעבודה:\n", "\n", - " בתוך זמן קצר הפונקציה שבנינו הופכת ללהיט היסטרי בחנויות הוורדים.
\n", - " מנהל קרטל הוורדים הבין־לאומי ג'וזפה ורדי יוצר איתנו קשר, ומבקש לשכלל התוכנה כך שיוכל להעלות את מחירי המוצרים כרצונו.
\n", - " כדי לעמוד בדרישה, נבנה פונקציה שמקבלת רשימה, ובנוסף אליה את המחיר שיתווסף לכל איבר ברשימה זו.
\n", - " כך, אם הקורא לפונקציה יעביר כארגומנט השני את הערך 2, כל איבר ברשימה יגדל ב־2.
\n", + "\n", + " בתוך זמן קצר הפונקציה שבנינו הופכת ללהיט היסטרי בחנויות הוורדים.
" ] @@ -331,10 +331,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " מנהל קרטל הוורדים הבין־לאומי ג'וזפה ורדי יוצר איתנו קשר, ומבקש לשכלל התוכנה כך שיוכל להעלות את מחירי המוצרים כרצונו.
\n", + " כדי לעמוד בדרישה, נבנה פונקציה שמקבלת רשימה, ובנוסף אליה את המחיר שיתווסף לכל איבר ברשימה זו.
\n", + " כך, אם הקורא לפונקציה יעביר כארגומנט השני את הערך 2, כל איבר ברשימה יגדל ב־2.
\n", " נממש בקלילות:\n", "\n", - " ורדי פוצח בשירה מרוב אושר, ומבקש שכלול אחרון לפונקציה, אם אפשר.
\n", - " אם הקורא לפונקציה העביר לה רק את רשימת המחירים, העלו את כל המחירים בשקל, כברירת מחדל.
\n", - " אם כן הועבר הארגומנט השני, העלו את המחיר לפי הערך שצוין באותו ארגומנט.
\n", + "\n", + " ורדי פוצח בשירה מרוב אושר, ומבקש שכלול אחרון לפונקציה, אם אפשר.
" ] }, @@ -342,7 +342,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " אם הקורא לפונקציה העביר לה רק את רשימת המחירים, העלו את כל המחירים בשקל, כברירת מחדל.
\n", + " אם כן הועבר הארגומנט השני, העלו את המחיר לפי הערך שצוין באותו ארגומנט.
\n", "\n", + "
\n", " הפעם אנחנו מתחבטים קצת יותר, מגרדים בראש, קוראים כמה מדריכי פייתון ומגיעים לבסוף לתשובה הבאה:\n", "
" ] @@ -370,9 +370,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " כשאנחנו רוצים להגדיר פרמטר עם ערך ברירת מחדל, נוכל לקבוע את ערך ברירת המחדל שלו בכותרת הפונקציה.
\n", - " אם יועבר ארגומנט שכזה לפונקציה – פייתון תשתמש בערך שהועבר.
\n", + "\n", + " כשאנחנו רוצים להגדיר פרמטר עם ערך ברירת מחדל, נוכל לקבוע את ערך ברירת המחדל שלו בכותרת הפונקציה.
" ] @@ -381,9 +381,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " אם יועבר ארגומנט שכזה לפונקציה – פייתון תשתמש בערך שהועבר.
\n", " אם לא – יילקח ערך ברירת המחדל שהוגדר בכותרת הפונקציה. \n", "\n", - " במקרה שלנו הגדרנו את הפרמטר
increment_by
עם ערך ברירת המחדל 1.
\n", - " קריאה לפונקציה עם ארגומנט אחד בלבד (רשימת המחירים) תגדיל את כל המחירים ב־1, שהרי הוא ערך ברירת המחדל.
\n", + "\n", + " במקרה שלנו הגדרנו את הפרמטר
" ] @@ -392,7 +392,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "increment_by
עם ערך ברירת המחדל 1.
\n", + " קריאה לפונקציה עם ארגומנט אחד בלבד (רשימת המחירים) תגדיל את כל המחירים ב־1, שהרי הוא ערך ברירת המחדל.
\n", " קריאה לפונקציה עם שני ארגומנטים (רשימת המחירים, סכום ההעלאה) תגדיל את כל המחירים בסכום ההעלאה שהועבר.\n", "\n", + "
\n", " חשוב להבין שקריאה לפונקציה עם ערכים במקום ערכי ברירת המחדל, לא תשנה את ערך ברירת המחדל בקריאות הבאות: \n", "
" ] @@ -411,23 +411,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -435,8 +435,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " ממשו את פונקציית
get
המלאה. הפונקציה תקבל מילון, מפתח ו\"ערך לשעת חירום\".
\n", - " החזירו את הערך השייך למפתח שהתקבל. אחרת – החזירו את הערך לשעת החירום שהועבר לפונקציה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " ממשו את פונקציית
\n", - "get
המלאה. הפונקציה תקבל מילון, מפתח ו\"ערך לשעת חירום\".
\n", + " החזירו את הערך השייך למפתח שהתקבל. אחרת – החזירו את הערך לשעת החירום שהועבר לפונקציה.
\n", " אם לא הועבר ערך לשעת חירום והמפתח לא נמצא במילון, החזירו None. \n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", - " נדגים את אותו עיקרון עם כמה ערכי ברירת מחדל.
\n", + "\n", + " נדגים את אותו עיקרון עם כמה ערכי ברירת מחדל.
" ] @@ -465,9 +465,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " אם הדרישה הייתה, לדוגמה, להוסיף לפונקציה גם אפשרות להנחה במחירי הפרחים, היינו יכולים לממש זאת כך:\n", "\n", - " אך מה יקרה כשנרצה לתת רק הנחה?
\n", - " במקרה כזה, כשנרצה \"לדלג\" מעל אחד מערכי ברירת המחדל, נצטרך להעביר את שמות הפרמטרים בקריאה לפונקציה.
\n", + "\n", + " אך מה יקרה כשנרצה לתת רק הנחה?
" ] @@ -487,7 +487,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " במקרה כזה, כשנרצה \"לדלג\" מעל אחד מערכי ברירת המחדל, נצטרך להעביר את שמות הפרמטרים בקריאה לפונקציה.
\n", " בדוגמה הבאה אנחנו מעלים את המחיר ב־1 (כי זו ברירת המחדל), ומורידים אותו ב־5: \n", "\n", + "
\n", " זה אמנם עניין של סגנון, אבל יש יופי וסדר בציון שמות הפרמטרים גם כשלא חייבים:\n", "
" ] @@ -505,16 +505,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מספר משתנה של ארגומנטים" + "### מספר משתנה של ארגומנטים" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " הפונקציה הפייתונית
max
, למשל, מתנהגת באופן משונה.
\n", - " היא יודעת לקבל כל מספר שהוא של ארגומנטים, ולהחליט מי מהם הוא הגדול ביותר.
\n", + "\n", + " הפונקציה הפייתונית
" ] @@ -532,8 +532,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "max
, למשל, מתנהגת באופן משונה.
\n", + " היא יודעת לקבל כל מספר שהוא של ארגומנטים, ולהחליט מי מהם הוא הגדול ביותר.
\n", " ראו בעצמכם!\n", "\n", - " נוכל גם אנחנו לממש פונקציה שמקבלת מספר משתנה של פרמטרים די בקלות.
\n", + "\n", + " נוכל גם אנחנו לממש פונקציה שמקבלת מספר משתנה של פרמטרים די בקלות.
" ] @@ -560,9 +560,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נתחיל מלממש פונקציה טיפשית למדי, שמקבלת מספר משתנה של פרמטרים ומדפיסה אותם:\n", "\n", - " מה התרחש בדוגמה האחרונה, בעצם?
\n", - " כשפרמטר מוגדר בכותרת הפונקציה עם הסימן כוכבית, אפשר לשלוח אל אותו פרמטר מספר בלתי מוגבל של ארגומנטים.
\n", + "\n", + " מה התרחש בדוגמה האחרונה, בעצם?
" ] @@ -571,7 +571,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " כשפרמטר מוגדר בכותרת הפונקציה עם הסימן כוכבית, אפשר לשלוח אל אותו פרמטר מספר בלתי מוגבל של ארגומנטים.
\n", " הערך שייכנס לפרמטר יהיה מסוגtuple
, שאיבריו הם כל האיברים שהועברו כארגומנטים.\n", "\n", + "
\n", " לצורך ההדגמה, נבנה פונקציה שמקבלת פרמטרים ומדפיסה אותם בזה אחר זה:\n", "
" ] @@ -598,22 +598,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "\n", - " \n", - "\n", - "\n", - "" ] }, @@ -621,7 +621,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " שחקו עם הפונקציה
silly_function2
וודאו שהבנתם מה מתרחש בה.
\n", + "\n", + "\n", "\n", + "\n", + "\n", + "\n", + "\n", - "\n", + " שחקו עם הפונקציה
\n", - "silly_function2
וודאו שהבנתם מה מתרחש בה.
\n", " כשתסיימו, נסו לממש את הפונקציהmax
בעצמכם.\n", "\n", - "\n", + "\n", - " חשוב!
\n", + "\n", + "\n", + "\n", + "חשוב!
\n", - "
\n", " פתרו לפני שתמשיכו!\n", "\n", + "
\n", " נממש את
" ] @@ -650,8 +650,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "max
:\n", "\n", - " כותרת הפונקציה יכולה לכלול משתנים נוספים לפני הכוכבית.
\n", + "\n", + " כותרת הפונקציה יכולה לכלול משתנים נוספים לפני הכוכבית.
" ] @@ -673,8 +673,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " נראה לדוגמה פונקציה שמקבלת גובה הנחה ואת מחירי כל המוצרים שקנינו, ומחזירה את הסכום הסופי שעלינו לשלם:\n", "\n", - " אף שבמבט ראשון הפונקציה
get_final_price
עשויה להיראות מגניבה, כדאי להיזהר משימוש מוגזם בתכונה הזו של פייתון.
\n", + "\n", + " אף שבמבט ראשון הפונקציה
" ] @@ -683,7 +683,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "get_final_price
עשויה להיראות מגניבה, כדאי להיזהר משימוש מוגזם בתכונה הזו של פייתון.
\n", " הדוגמה הזו אמנם מדגימה גמישות יוצאת דופן של פייתון, אבל ככלל היא דוגמה גרועה מאוד לשימוש בכוכבית.\n", "\n", + "
\n", " שימו לב כמה נוח יותר להבין את המימוש הבא ל־
" ] @@ -705,17 +705,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### תרגול ביניים: סולל דרך" + "### תרגול ביניים: סולל דרך" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "get_final_price
, וכמה נוח יותר להבין את הקריאה לפונקציה הזו:\n", "\n", - " כתבו פונקציה בשם
create_path
שיכולה לקבל מספר בלתי מוגבל של ארגומנטים.
\n", - " הפרמטר הראשון יהיה אות הכונן שבו הקבצים מאוחסנים (לרוב \"C\"), והפרמטרים שאחריו יהיו שמות של תיקיות וקבצים.
\n", - " שרשרו אותם בעזרת התו\\
כדי ליצור מהם מחרוזת המייצגת נתיב במחשב. אחרי האות של הכונן שימו נקודתיים.
\n", + "\n", + " כתבו פונקציה בשם
" ] @@ -724,7 +724,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "create_path
שיכולה לקבל מספר בלתי מוגבל של ארגומנטים.
\n", + " הפרמטר הראשון יהיה אות הכונן שבו הקבצים מאוחסנים (לרוב \"C\"), והפרמטרים שאחריו יהיו שמות של תיקיות וקבצים.
\n", + " שרשרו אותם בעזרת התו\\
כדי ליצור מהם מחרוזת המייצגת נתיב במחשב. אחרי האות של הכונן שימו נקודתיים.
\n", " הניחו שהקלט שהמשתמש הכניס הוא תקין.\n", "\n", + "
\n", " הנה כמה דוגמאות לקריאות לפונקציה ולערכי ההחזרה שלה:\n", "
" ] @@ -733,12 +733,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "
- הקריאה
\n", - "create_path(\"C\", \"Users\", \"Yam\")
תחזיר \"C:\\Users\\Yam\"- הקריאה
\n", - "create_path(\"C\", \"Users\", \"Yam\", \"HaimonLimon.mp4\")
תחזיר \"C:\\Users\\Yam\\HaimonLimon.mp4\"- הקריאה
\n", - "create_path(\"D\", \"1337.png\")
תחזיר \"D:\\1337.png\"- הקריאה
\n", - "create_path(\"C\")
תחזיר \"C:\"- הקריאה
\n", + "create_path()
תגרום לשגיאה\n", + "
" ] }, @@ -746,14 +746,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### מספר משתנה של ארגומנטים עם שמות" + "### מספר משתנה של ארגומנטים עם שמות" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "- הקריאה
\n", + "create_path(\"C\", \"Users\", \"Yam\")
תחזיר \"C:\\Users\\Yam\"- הקריאה
\n", + "create_path(\"C\", \"Users\", \"Yam\", \"HaimonLimon.mp4\")
תחזיר \"C:\\Users\\Yam\\HaimonLimon.mp4\"- הקריאה
\n", + "create_path(\"D\", \"1337.png\")
תחזיר \"D:\\1337.png\"- הקריאה
\n", + "create_path(\"C\")
תחזיר \"C:\"- הקריאה
\n", "create_path()
תגרום לשגיאה\n", + "
\n", " בתחילת המחברת למדנו כיצד מעבירים לפונקציות ארגומנטים בעזרת שם:\n", "
" ] @@ -775,10 +775,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - " אבל מה אם נרצה להעביר לפונקציה שלנו מספר בלתי מוגבל של ארגומנטים לפי שם?
\n", - " נביא כדוגמה את הפעולהformat
על מחרוזות.
\n", - "format
היא פונקציה גמישה בכל הנוגע לכמות ולשמות של הארגומנטים שמועברים לה לפי שם.
\n", + "\n", + " אבל מה אם נרצה להעביר לפונקציה שלנו מספר בלתי מוגבל של ארגומנטים לפי שם?
" ] @@ -809,8 +809,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " נביא כדוגמה את הפעולהformat
על מחרוזות.
\n", + "format
היא פונקציה גמישה בכל הנוגע לכמות ולשמות של הארגומנטים שמועברים לה לפי שם.
\n", " נראה שתי דוגמאות לשימוש בה, שימוש שבמבט ראשון עשוי להיראות קסום:\n", "\n", - " נכתוב גם אנחנו פונקציה שמסוגלת לקבל מספר בלתי מוגבל של ארגומנטים לפי שם.
\n", + "\n", + " נכתוב גם אנחנו פונקציה שמסוגלת לקבל מספר בלתי מוגבל של ארגומנטים לפי שם.
" ] @@ -833,9 +833,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " ניעזר תחילה בידידתנו הוותיקה,silly_function
, כדי לראות איך הקסם קורה:\n", "\n", - " ההתנהגות הזו מתרחשת כיוון שהשתמשנו בשתי כוכביות לפני שם המשתנה.
\n", - " השימוש בשתי כוכביות מאפשר לנו להעביר מספר בלתי מוגבל של ארגומנטים עם שם, באופן שמזכיר קצת את השימוש בכוכבית שראינו קודם.
\n", + "\n", + " ההתנהגות הזו מתרחשת כיוון שהשתמשנו בשתי כוכביות לפני שם המשתנה.
" ] @@ -844,8 +844,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", + " השימוש בשתי כוכביות מאפשר לנו להעביר מספר בלתי מוגבל של ארגומנטים עם שם, באופן שמזכיר קצת את השימוש בכוכבית שראינו קודם.
\n", " המשתנה שבו נשמרים הנתונים הוא מסוג מילון, ובו המפתחות יהיו שמות הארגומנטים שהועברו, והערכים – הערכים שהועברו לאותם שמות.\n", "\n", - " אחרי שהבנו איך הסיפור הזה עובד, בואו ננסה ליצור פונקציה מעניינת יותר.
\n", + "\n", + " אחרי שהבנו איך הסיפור הזה עובד, בואו ננסה ליצור פונקציה מעניינת יותר.
" ] @@ -868,8 +868,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " הפונקציה שנכתוב תקבל כארגומנטים כמה גרם מכל רכיב צריך כדי להכין סושי, ותדפיס לנו מתכון:\n", "\n", - " בדוגמה זו השתמשנו בעובדה שהפרמטר שמוגדר בעזרת שתי כוכביות הוא בהכרח מילון.
\n", + "\n", + " בדוגמה זו השתמשנו בעובדה שהפרמטר שמוגדר בעזרת שתי כוכביות הוא בהכרח מילון.
" ] @@ -878,15 +878,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "
\n", " עברנו על כל המפתחות והערכים שבו בעזרת הפעולהitems
, והדפסנו את המתכון, רכיב אחר רכיב.\n", "\n", - "\n", - " \n", - "\n", - "\n", - "\n", + "
\n", + "