Skip to content

Commit 1dd18d2

Browse files
committed
Fix the notebooks a bit
1 parent 1687122 commit 1dd18d2

File tree

5 files changed

+308
-25
lines changed

5 files changed

+308
-25
lines changed

week1/2_Arithmetics.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@
335335
"name": "python",
336336
"nbconvert_exporter": "python",
337337
"pygments_lexer": "ipython3",
338-
"version": "3.7.4"
338+
"version": "3.7.6"
339339
}
340340
},
341341
"nbformat": 4,

week8/4_Exceptions_Part_2.ipynb

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@
747747
"\n",
748748
"\n",
749749
"for i in range(1, 9):\n",
750-
" print(get_day(i))"
750+
" print(get_day_by_number(i))"
751751
]
752752
},
753753
{
@@ -813,7 +813,7 @@
813813
" try:\n",
814814
" return ADDRESS_BOOK[name]\n",
815815
" except KeyError as err:\n",
816-
" with open('errors.txt', 'w') as errors:\n",
816+
" with open('errors.txt', 'a') as errors:\n",
817817
" errors.write(str(err))\n",
818818
" raise KeyError(str(err))\n",
819819
"\n",
@@ -842,7 +842,7 @@
842842
" try:\n",
843843
" return ADDRESS_BOOK[name]\n",
844844
" except KeyError as err:\n",
845-
" with open('errors.txt', 'w') as errors:\n",
845+
" with open('errors.txt', 'a') as errors:\n",
846846
" errors.write(str(err))\n",
847847
" raise\n",
848848
"\n",
@@ -972,22 +972,9 @@
972972
},
973973
{
974974
"cell_type": "code",
975-
"execution_count": 339,
976-
"metadata": {},
977-
"outputs": [
978-
{
979-
"ename": "DrunkUserError",
980-
"evalue": "Kipik must not drriiiive!!! @_@\nBAC: 0.05",
981-
"output_type": "error",
982-
"traceback": [
983-
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
984-
"\u001b[1;31mDrunkUserError\u001b[0m Traceback (most recent call last)",
985-
"\u001b[1;32m<ipython-input-339-c133afbec7d4>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 22\u001b[1;33m \u001b[0mstart_driving\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Kipik\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m0.05\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
986-
"\u001b[1;32m<ipython-input-339-c133afbec7d4>\u001b[0m in \u001b[0;36mstart_driving\u001b[1;34m(username, blood_alcohol_content)\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mstart_driving\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0musername\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mblood_alcohol_content\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mblood_alcohol_content\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m0.024\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 18\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mDrunkUserError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0musername\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mblood_alcohol_content\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 19\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
987-
"\u001b[1;31mDrunkUserError\u001b[0m: Kipik must not drriiiive!!! @_@\nBAC: 0.05"
988-
]
989-
}
990-
],
975+
"execution_count": null,
976+
"metadata": {},
977+
"outputs": [],
991978
"source": [
992979
"class DrunkUserError(Exception):\n",
993980
" \"\"\"Exception raised for errors in the input.\"\"\"\n",
@@ -1230,7 +1217,7 @@
12301217
"source": [
12311218
"def get_nth_char(string, n):\n",
12321219
" try:\n",
1233-
" return string[n + 1]\n",
1220+
" return string[n - 1]\n",
12341221
" except (IndexError, TypeError) as e:\n",
12351222
" print(e)\n",
12361223
" return ''"
@@ -1248,7 +1235,7 @@
12481235
"metadata": {},
12491236
"source": [
12501237
"<p style=\"text-align: right; direction: rtl; float: right; clear: both;\">\n",
1251-
" נתכנת פונקציה שמקבלת נתיב לקובץ ולטקסט, וכותבת את הטקסט לקובץ.\n",
1238+
" נתכנת פונקציה שמקבלת נתיב לקובץ וטקסט, וכותבת את הטקסט לקובץ.\n",
12521239
"</p>"
12531240
]
12541241
},
@@ -1293,7 +1280,7 @@
12931280
" return False\n",
12941281
"\n",
12951282
"\n",
1296-
"write_textfile(\"fo\", \"class\")"
1283+
"write_textfile(\"not_worms.txt\", \"What the holy hand grenade was that?\")"
12971284
]
12981285
},
12991286
{
@@ -1320,13 +1307,13 @@
13201307
" try:\n",
13211308
" with open(filepath, 'w', encoding='utf-8') as f:\n",
13221309
" f.write(text)\n",
1323-
" except (FileNotFoundError, IsADirectoryError, PermissionError) as e:\n",
1310+
" except (ValueError, OSError) as e:\n",
13241311
" print(e)\n",
13251312
" return False\n",
13261313
" return True\n",
13271314
"\n",
13281315
"\n",
1329-
"write_textfile(\"fo\", \"class\")"
1316+
"write_textfile(\"not_worms.txt\", \"What the holy hand grenade was that?\")"
13301317
]
13311318
},
13321319
{

week8/5_Summary.ipynb

Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
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

Comments
 (0)