|
| 1 | +{ |
| 2 | + "cells": [ |
| 3 | + { |
| 4 | + "cell_type": "markdown", |
| 5 | + "metadata": {}, |
| 6 | + "source": [ |
| 7 | + "<img src=\"images/logo.jpg\" style=\"display: block; margin-left: auto; margin-right: auto;\" alt=\"לוגו של מיזם לימוד הפייתון. נחש מצויר בצבעי צהוב וכחול, הנע בין האותיות של שם הקורס: לומדים פייתון. הסלוגן המופיע מעל לשם הקורס הוא מיזם חינמי ללימוד תכנות בעברית.\">" |
| 8 | + ] |
| 9 | + }, |
| 10 | + { |
| 11 | + "cell_type": "markdown", |
| 12 | + "metadata": {}, |
| 13 | + "source": [ |
| 14 | + "# <span style=\"text-align: right; direction: rtl; float: right; clear: both;\"> תרגילים </span> " |
| 15 | + ] |
| 16 | + }, |
| 17 | + { |
| 18 | + "cell_type": "markdown", |
| 19 | + "metadata": {}, |
| 20 | + "source": [ |
| 21 | + "## <span style=\"text-align: right; direction: rtl; float: right; clear: both;\">תרגיל מחשמל</span>" |
| 22 | + ] |
| 23 | + }, |
| 24 | + { |
| 25 | + "cell_type": "markdown", |
| 26 | + "metadata": {}, |
| 27 | + "source": [ |
| 28 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 29 | + " בהנדסת חשמל, \"שער לוגי\" הוא רכיב בסיסי ולו כניסה אחת או יותר, ויציאה אחת בלבד.<br>\n", |
| 30 | + " הכניסות בשער הלוגי משמשות בתור הקלט שלו, והיציאה בתור הפלט שלו.<br>\n", |
| 31 | + " כל כניסה יכול לקבל את הערך \"אמת\" או \"שקר\".<br>\n", |
| 32 | + " השער הלוגי יבצע פעולה לוגית בהתאם לכניסות שלו, ויחזיר ערך חדש – שגם הוא אמת או שקר.\n", |
| 33 | + "</p>" |
| 34 | + ] |
| 35 | + }, |
| 36 | + { |
| 37 | + "cell_type": "markdown", |
| 38 | + "metadata": {}, |
| 39 | + "source": [ |
| 40 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 41 | + " שער לוגי שוודאי יצא לכם לשמוע עליו הוא <dfn>AND</dfn>.<br>\n", |
| 42 | + " לשער הלוגי AND שתי כניסות. פלט השער יהיה <var>True</var> רק אם הקלט בשתי הכניסות הוא <var>True</var>.<br> \n", |
| 43 | + " שער לוגי אחר שוודאי יצא לכם לשמוע עליו הוא <dfn>NOT</dfn>.<br>\n", |
| 44 | + " לשער הלוגי NOT כניסה אחת. פלט השער יהיה <var>True</var> אם הקלט בכניסה הוא <var>False</var>, או <var>False</var> אם הקלט בכניסה הוא <var>True</var>. \n", |
| 45 | + "</p>" |
| 46 | + ] |
| 47 | + }, |
| 48 | + { |
| 49 | + "cell_type": "markdown", |
| 50 | + "metadata": {}, |
| 51 | + "source": [ |
| 52 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 53 | + " שערים עם כניסה אחת נקראים שערים אוּנָרִיִּים (unary), ושערים עם שתי כניסות נקראים שערים בִּינָרִיִּים (binary).<br>\n", |
| 54 | + "</p>" |
| 55 | + ] |
| 56 | + }, |
| 57 | + { |
| 58 | + "cell_type": "markdown", |
| 59 | + "metadata": {}, |
| 60 | + "source": [ |
| 61 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 62 | + " חיבור של מספר שערים לוגיים אחד לשני יצור רכיב לוגי.<br>\n", |
| 63 | + " בדוגמה הבאה, לדוגמה, הקלטים (מלמעלה למטה) <var>True</var>, <var>False</var>, <var>False</var>, <var>True</var> יניבו <var>True</var>.\n", |
| 64 | + "</p>" |
| 65 | + ] |
| 66 | + }, |
| 67 | + { |
| 68 | + "cell_type": "markdown", |
| 69 | + "metadata": {}, |
| 70 | + "source": [ |
| 71 | + "<figure>\n", |
| 72 | + " <img src=\"images/circuit_example.svg\" style=\"width: 250px; margin-right: auto; margin-left: auto; text-align: center;\" alt=\"דוגמה למעגל אלקטרוני. שער AND מצויר בצורת חצי אליפסה פחוסה לא סגורה, המחוברת משמאל למלבן שצלעו הימנית לא סגורה. שער OR מצויר כמו שער AND, רק שצלעו השמאלית נכנסת מעט פנימה בצורה מעוגלת. לשני השערים הלוגיים נכנסים 2 קווים משמאל, ומימינם יוצא קו אחד. המעגל נראה כך: בטור השמאלי, ישנו שער OR למעלה ושער AND למטה. בטור הימני ישנו שער OR. הפלט של העמודה השמאלית נכנס כקלט לעמודה הימנית.\"/>\n", |
| 73 | + " <figcaption style=\"margin-top: 2rem; text-align: center; direction: rtl;\">\n", |
| 74 | + " דוגמה לרכיב לוגי.\n", |
| 75 | + " </figcaption>\n", |
| 76 | + "</figure>" |
| 77 | + ] |
| 78 | + }, |
| 79 | + { |
| 80 | + "cell_type": "markdown", |
| 81 | + "metadata": {}, |
| 82 | + "source": [ |
| 83 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 84 | + " צרו את המחלקות <var>LogicGate</var>, <var>UnaryGate</var>, <var>BinaryGate</var> ו־<var>Connector</var>.<br>\n", |
| 85 | + " כמו כן, צרו את המחלקות <var>AndGate</var>, <var>NotGate</var>, <var>OrGate</var>, <var>NandGate</var> ו־<var>XorGate</var>.<br>\n", |
| 86 | + " במידת הצורך, קראו עוד על שערים לוגיים.\n", |
| 87 | + "</p>" |
| 88 | + ] |
| 89 | + }, |
| 90 | + { |
| 91 | + "cell_type": "markdown", |
| 92 | + "metadata": {}, |
| 93 | + "source": [ |
| 94 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 95 | + "לאחר שכתבתם את הקוד, ודאו שהקוד הבא, שמדמה את המעגל מהאיור למעלה, מדפיס רק True:\n", |
| 96 | + "</p>" |
| 97 | + ] |
| 98 | + }, |
| 99 | + { |
| 100 | + "cell_type": "code", |
| 101 | + "execution_count": null, |
| 102 | + "metadata": {}, |
| 103 | + "outputs": [], |
| 104 | + "source": [ |
| 105 | + "circuit = Connector(gate=OrGate, input_gates=[OrGate, AndGate])\n", |
| 106 | + "print(circuit.send_inputs([False, False, False, False]) == False)\n", |
| 107 | + "print(circuit.send_inputs([False, False, False, True]) == False)\n", |
| 108 | + "print(circuit.send_inputs([False, False, True, False]) == False)\n", |
| 109 | + "print(circuit.send_inputs([False, False, True, True]) == True)\n", |
| 110 | + "print(circuit.send_inputs([False, True, False, False]) == True)\n", |
| 111 | + "print(circuit.send_inputs([False, True, False, True]) == True)\n", |
| 112 | + "print(circuit.send_inputs([False, True, True, False]) == True)\n", |
| 113 | + "print(circuit.send_inputs([False, True, True, True]) == True)\n", |
| 114 | + "print(circuit.send_inputs([True, False, False, False]) == True)" |
| 115 | + ] |
| 116 | + }, |
| 117 | + { |
| 118 | + "cell_type": "markdown", |
| 119 | + "metadata": {}, |
| 120 | + "source": [ |
| 121 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 122 | + " בונוס: ודאו גם שהקוד הבא עובד ומחזיר <var>False</var>:\n", |
| 123 | + "</p>" |
| 124 | + ] |
| 125 | + }, |
| 126 | + { |
| 127 | + "cell_type": "markdown", |
| 128 | + "metadata": {}, |
| 129 | + "source": [ |
| 130 | + "<figure>\n", |
| 131 | + " <img src=\"images/complex_circuit.svg\" style=\"width: 400px; margin-right: auto; margin-left: auto; text-align: center;\" alt=\"החידוש באיור זה הוא שער NOT, שמצויר כמשולש שבקודקודו הימני מצויר עיגול קטן.\"/>\n", |
| 132 | + " <figcaption style=\"margin-top: 2rem; text-align: center; direction: rtl;\">\n", |
| 133 | + " דוגמה לרכיב לוגי מורכב יותר.\n", |
| 134 | + " </figcaption>\n", |
| 135 | + "</figure>" |
| 136 | + ] |
| 137 | + }, |
| 138 | + { |
| 139 | + "cell_type": "code", |
| 140 | + "execution_count": null, |
| 141 | + "metadata": {}, |
| 142 | + "outputs": [], |
| 143 | + "source": [ |
| 144 | + "first_connector = Connector(\n", |
| 145 | + " gate=OrGate, input_gates=[OrGate, AndGate],\n", |
| 146 | + ")\n", |
| 147 | + "second_connector = Connector(\n", |
| 148 | + " gate=OrGate,\n", |
| 149 | + " input_gates=[first_connector],\n", |
| 150 | + ")\n", |
| 151 | + "circuit = Connector(\n", |
| 152 | + " gate=OrGate,\n", |
| 153 | + " input_gates=[second_connector, NotGate],\n", |
| 154 | + ")\n", |
| 155 | + "\n", |
| 156 | + "inputs = (False, False, False, True, False, True)\n", |
| 157 | + "print(circuit.send_inputs(inputs) == False)" |
| 158 | + ] |
| 159 | + }, |
| 160 | + { |
| 161 | + "cell_type": "markdown", |
| 162 | + "metadata": {}, |
| 163 | + "source": [ |
| 164 | + "## <span style=\"text-align: right; direction: rtl; float: right; clear: both;\">ימצי</span>" |
| 165 | + ] |
| 166 | + }, |
| 167 | + { |
| 168 | + "cell_type": "markdown", |
| 169 | + "metadata": {}, |
| 170 | + "source": [ |
| 171 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 172 | + " כתבו מחלקה המייצגת קובייה.<br>\n", |
| 173 | + " לכל קובייה יש צבע, מספר פאות וערכים שמופיעים על הפאות.<br>\n", |
| 174 | + " הטלה של קובייה תבחר באופן אקראי ערך מאחת מפאות הקובייה ותחזיר אותה.\n", |
| 175 | + "</p>\n", |
| 176 | + "\n", |
| 177 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 178 | + " על כל פאה של \"קובייה מספרית\" מופיע מספר שערכו בין 1 למספר הפאות בקובייה. כל מספר יופיע פעם אחת בלבד על הקובייה.<br>\n", |
| 179 | + " ב\"קובייה לא מאוזנת\", ישנו גם ערך שנקרא \"סיכוי הטלה\", שמפרט עבור כל פאה מה הסיכוי שתצא בהטלה.\n", |
| 180 | + "</p>\n", |
| 181 | + "\n", |
| 182 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 183 | + " צבע הקובייה חייב להיות מורכב מאותיות בלבד, משקלה של הקובייה חייב להיות חיובי וכמות הפאות חייבת להיות תואמת למספר הערכים המופיעים על הפאות.<br>\n", |
| 184 | + "</p>\n" |
| 185 | + ] |
| 186 | + }, |
| 187 | + { |
| 188 | + "cell_type": "markdown", |
| 189 | + "metadata": {}, |
| 190 | + "source": [ |
| 191 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 192 | + " במשחק \"Yamtzee\" יש שק גדול שמכיל המון \"קוביות אורך\", ושק גדול נוסף של קוביות לא מאוזנות בצבעים שונים שנקראות \"קוביית אות\".<br>\n", |
| 193 | + " 10% מהקוביות בכל שק הן אדומות, 25% הן ירוקות ו־65% הן כחולות.<br>\n", |
| 194 | + " קוביית אורך היא קובייה מספרית עם 10 פאות. אם הקובייה מורה 1, זורקים אותה שוב עד שיוצא מספר אחר.<br>\n", |
| 195 | + " קוביית אות היא קובייה לא מאוזנת עם 26 פאות, כאשר בכל פאה אות מהא\"ב הלטיני. סיכוי ההטלה עבור כל אחד מהערכים הוא לפי <a href=\"https://en.wikipedia.org/wiki/Letter_frequency\">התדירות של האות</a>.<br>\n", |
| 196 | + "</p>" |
| 197 | + ] |
| 198 | + }, |
| 199 | + { |
| 200 | + "cell_type": "markdown", |
| 201 | + "metadata": {}, |
| 202 | + "source": [ |
| 203 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 204 | + " בתחילת המשחק, המשתמש בוחר כמה משתתפים ייקחו חלק במשחק, ומה הניקוד שאליו צריך להגיע כדי שהמשחק יסתיים.<br>\n", |
| 205 | + "</p>\n", |
| 206 | + "\n", |
| 207 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 208 | + " כל שחקן בתורו מטיל את קוביית האורך, ומטיל כמות קוביות אות הזהה למספר שיצא בקוביית האורך.<br>\n", |
| 209 | + " לדוגמה, אם קוביית האורך שהטלתי מורה 3, עליי להטיל 3 קוביות אות.\n", |
| 210 | + "</p>" |
| 211 | + ] |
| 212 | + }, |
| 213 | + { |
| 214 | + "cell_type": "markdown", |
| 215 | + "metadata": {}, |
| 216 | + "source": [ |
| 217 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 218 | + " המשתתף צריך להשתמש בקוביות האות שיצאו לו כדי ליצור מילה תקנית בשפה האנגלית שאורכה 2 אותיות לפחות.<br>\n", |
| 219 | + " הוא יכול לסדר את הקוביות מחדש ולבחור שלא להשתמש בחלק מהן, אבל הוא לא יכול להשתמש באותה קוביית אות פעמיים.<br>\n", |
| 220 | + " למרות זאת, יכול לקרות מצב שיותר מקוביית אות אחת תציג את אותה אות.\n", |
| 221 | + "</p>" |
| 222 | + ] |
| 223 | + }, |
| 224 | + { |
| 225 | + "cell_type": "markdown", |
| 226 | + "metadata": {}, |
| 227 | + "source": [ |
| 228 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 229 | + " אם המשתמש הצליח, עבור כל אות שבה השתמש הוא זוכה ב־$\\lfloor{\\frac{12}{\\lceil{f}\\rceil^{\\frac{3}{4}}}}\\rfloor$ נקודות, כאשר f זו תדירות האות בא\"ב האנגלי מעוגלת כלפי מעלה.<br>\n", |
| 230 | + " במילים: 12 חלקי הביטוי הבא: הסיכוי שהאות תצא מעוגל כלפי מעלה, בחזקת 1.5 ואז להוציא מזה שורש. כל זה – מעוגל כלפי מטה.<br>\n", |
| 231 | + " לדוגמה, עבור המילה \"zone\" השחקן ינוקד 17 לפי החישוב הבא:\n", |
| 232 | + "</p>" |
| 233 | + ] |
| 234 | + }, |
| 235 | + { |
| 236 | + "cell_type": "markdown", |
| 237 | + "metadata": {}, |
| 238 | + "source": [ |
| 239 | + "| ניקוד | תדירות | אות |\n", |
| 240 | + "|:----------|:----------|------:|\n", |
| 241 | + "| 12 | 0.077%\t | z |\n", |
| 242 | + "| 2 | 7.507% | o |\n", |
| 243 | + "| 2 | 6.749%\t | n |\n", |
| 244 | + "| 1 | 12.702%\t| e |" |
| 245 | + ] |
| 246 | + }, |
| 247 | + { |
| 248 | + "cell_type": "markdown", |
| 249 | + "metadata": {}, |
| 250 | + "source": [ |
| 251 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 252 | + " קוביית אורך אדומה נותנת למשתתף שהטיל אותה עוד קוביית אות במתנה.<br>\n", |
| 253 | + " קוביית אות אדומה מאפשרת למשתתף להשתמש באות שמופיעה על הקובייה כמה פעמים שירצה.<br>\n", |
| 254 | + " קוביות ירוקות נותנות למשתתף את האפשרות לבחור אם להטילן מחדש.<br>\n", |
| 255 | + "</p>" |
| 256 | + ] |
| 257 | + }, |
| 258 | + { |
| 259 | + "cell_type": "markdown", |
| 260 | + "metadata": {}, |
| 261 | + "source": [ |
| 262 | + "<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n", |
| 263 | + " ממשו את Yamtzee.<br>\n", |
| 264 | + " השתמשו ב־<a href=\"https://raw.githubusercontent.com/dwyl/english-words/master/words.txt\">words.txt</a> כדי לוודא אם המילים שהכניס המשתמש תקינות.\n", |
| 265 | + "</p>" |
| 266 | + ] |
| 267 | + } |
| 268 | + ], |
| 269 | + "metadata": { |
| 270 | + "kernelspec": { |
| 271 | + "display_name": "Python 3", |
| 272 | + "language": "python", |
| 273 | + "name": "python3" |
| 274 | + }, |
| 275 | + "language_info": { |
| 276 | + "codemirror_mode": { |
| 277 | + "name": "ipython", |
| 278 | + "version": 3 |
| 279 | + }, |
| 280 | + "file_extension": ".py", |
| 281 | + "mimetype": "text/x-python", |
| 282 | + "name": "python", |
| 283 | + "nbconvert_exporter": "python", |
| 284 | + "pygments_lexer": "ipython3", |
| 285 | + "version": "3.7.6" |
| 286 | + } |
| 287 | + }, |
| 288 | + "nbformat": 4, |
| 289 | + "nbformat_minor": 2 |
| 290 | +} |
0 commit comments