תיקונים למחברות – שבוע 8

תגיות:

אתקן, תודה! :slight_smile:

אני לא יודע אם זו טעות, במידה ולא - אשמח להבהרה בנושא.
בתרגיל לדוגמה (שחמט), כאשר מלך רוצה לזוז למשבצת כלשהי, הוא יכול לזוז לכל משבצת חוקית שלא מאויימת ולגיטימית לפי סט המהלכים האפשריים שלו (כל הכיוונים, צעד אחד בלבד).
הקוביות שעליהן המלך מאיים, כפי שמוסבר בדוגמא, הם כל המהלכים האפשריים ע״י המלך, גם אם בפועל לא יוכל לזוז לשם. הדגמת את המימוש שלך באמצעות הדוגמא עם הרץ והמלכים, אך משהו בדוגמא שם לא ממש מובן לי -
האם בכלל אפשרי שהמלך הלבן (שנמצא ב-d3) יזוז ל-c3? שהרי הקוביה c3 מוסרת מהמהלכים האפשריים שלו משום שהיא חלק מהקוביות המאויימות ע״י כלי האויב (כשננסה להזיז את המלך ל-c3, הפעולה is_target_possible תחזיר false כי היא מתחשבת ב-get_squares_threatens של המלך השחור).

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

בין אם כן או לא, יש כמה דברים שמתחשבים בהם במשחק אמיתי שויתרנו עליהם פה מראש, וע’פ הגדרת התרגיל (כמו הצרחה למשל).

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

לייק 1

אנסה לחדד את הנקודה דבורה:
המקרה שאני מציג הוא מקרה שים הכליל במכוון בתרגיל - מצב שבו מלך יכול לזוז למשבצת מסויימת למרות שהיא מאויימת ע״י מלך אחר במשחק, אם היא מוגנת ע״י כלי עמית.
בסוף, לא הצלחתי להבין איך המקרה הזה מטופל, כי לפי הקוד נראה שהוא לא מטופל (אולי לא הבנתי את התיעוד כמו שצריך והכוונה היא שהמקרה לא מטופל בכוונה, כדי להימנע משימוש ברקורסיה).

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

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

לא את זה נראה לי שדווקא הבנת מצוין. תנסה לעבור על הקוד כדי לראות בדיוק מה קורה כשהמקרה הזה כלול (יש סיבה טובה).

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

הדוגמא המתוארת ה"עלולה לקרות" שהמלך הלבן יזוז ל-C3 זה דוגמא למשהו שהיה קורה (לכאורה, אם לא היה נתקע ברקורסיה) אילולא הוספנו את הקטע קוד? ואנחנו באמת לא רוצים שזה יהיה אפשרי, לכן הקטע קוד הזה

והנה, עכשיו זה לא יקרה יותר וככה טוב, עכשיו המלך יוכל ללכת לכל משבצת מסביבו חוץ מאשר C3

לייק 1

אז איזה נכון - התמונה או התיאור?
שורה 1 אמורה להיות (לפי התיאור) - צריח, פרש, רץ, מלכה, מלך, גנו, גמל, גמל, רץ, פרש, צריח
או (לפי התמונה מויקיפדיה) - צריח, פרש, רץ, רץ, מלכה, מלך, גנו, גמל, גמל, פרש, צריח

תודה

אולי אני טועה, אבל לדעתי החוקים כן מאפשרים למצב הזה לקרות - מלך יכול לזוז למשבצת שבה הוא מאויים ע״י כלי אחר, אם בהזזת הכלי הזה הוא נחשף למט.
נראה לי שאנחנו כבר טוחנים מים ונראה שכולנו הבנו (ומי שיקרא יבין גם הוא אני מקווה).

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

2 לייקים

אבל דווקא עכשיו עם הפונקציה הזאת של המלך, זה המלך השחור יחזיר את כל המשבצות סביבו (כולל C3) בתור מאוימות על ידיו, ולכן כאשר המלך הלבן בודק האם C3 נמצא ברשימת המאוימים יתקבל TRUE ולכן הוא לא יוחזר כאופציה ולידית

לייק 1

עוד פעם - חוקי המשחק המקוריים מאפשרים את זה, לא הפונקציה :slight_smile:
אתה צודק.

לייק 1

עדכון - לא ניתן לגשת ולהוריד למחברות משבוע ראשון עד שבוע 8
נראה כשגיאה של GitHub

לייק 1

למה התיקונים של מחברת 2 לא מופיעים כאן גם כן? :frowning_face:

תרגיל “החמישי זה נובמבר?”

  • בפונקציה get_month_name הדוקומנציה לא נכונה. רשום:

Return the number of the month and return its name

אבל היא מחזירה רק את שם החודש ולא שם ומספר.

  • בפונקציה get_month_ordinary_number רשום:

Return the month ordinary number by its name.

אין דבר כזה ordinary וכנראה הכוונה הייתה ordinal אבל גם זה לא נכון כי לא חוזר 1st, 2nd, 3rd.

אולי גם צריך להוסיף s לreturn, לא?

תודה, תיקנתי

לא הפעם :slight_smile:

The docstring is a phrase ending in a period. It prescribes the function or method’s effect as a command (“Do this”, “Return that”), not as a description; e.g. don’t write “Returns the pathname …”.

מקור

לייק 1

מחברת 3, Exceptions.
בחלק שבו אתה מדגים שהקוד המקורי הכולל התייחסות לחריגות לא כולל את OSError:

הקוד עובד, ולא מעלה OSError למרות הכל. כאשר אתה מתקן את הקוד ומוסיף except נוסף, הקוד לא מגיע לשם ועדיין מתייחס ל-except הראשון.
יכול להיות שמדובר בהבדל שבין גרסאות פייתון, יכול להיות גם שמדובר בעניין של מערכת ההפעלה - עובד על MacOS.

לייק 1

איזה קטע :slight_smile: כנראה באמת הבדל בין מערכות הפעלה.
יכול לנסות למצוא תו/סדרת תווים שמספיק תג’עג’ע אותו?

אוקיי, מבין שהוא מסווג את זה בצורה די ספציפית:
אם יש נתיב כזה אך אין קובץ כזה - תחזיר OSError.
אם אין נתיב כזה - תחזיר FileNotFoundError.
לא יודע אם שווה לציין את זה במחברת, אבל טוב לדעת! :crazy_face:

2 לייקים

מחברת 4, ב-מיקוד החריגה בקוד שבא מיד לאחר מכן:
שורה אחרונה במקום:
print(get_day(i))
אמור לבוא:
print(get_day_by_number(i))