בחלק הראשון של השאלה החלטתי ללכת על 2 פונקציות (X ו- O) שמטרת הפונקציה היא לבדוק אם אחד מתנאי הניצחון מתקיימים, ואם כן להחזיר לי True (הפונקציה בהתחלה מוגדרת False) אבל משום מה, לא משנה איפה אני ממקם אותם, הפונקציה תמיד מחזירה לי True.
רק כשבאחד מתתי הרשימות אין בכלל X או O הפונקציה מחזירה לי False.
ניסיתי גם להריץ את הקוד ב Python tutor אבל גם כשאין מצב של ניצחון בכלל הפונקציה מחזירה לי True.
לדוג:
אין פה שום ניצחון, אבל משום מה הפונקציה מחזירה לי תמיד שכן.
החלק המוזר גם הוא שגם ב- X וגם ב- O הפונקציה נעצרת לי על התנאי השני.
תנאי ראשון:
if board[0][0] and board[1][0] and board[2][0] == ‘X’:
תנאי שני:
elif board[0][1] and board[1][1] and board[2][1] == ‘X’:
יש למישהו מושג למה זה קורה?
orpazf
שים לב להתנהגות המוזרה של דברים מהסגנון “a” and “b” == “b”. זה לא מחזיר את מה שאתה מתכוון שזה יחזיר
aviadamar
הייתי ממליץ לרשום לעצמך את הפלט שמתקבל בין כל and ולראות מה קורה (:
PureDream
נדחף לשאלה האם חובה שהפונקציות שרשומות בתרגיל יהיו הפונקציות הקיימות אצלי או שאפשר לעבוד אחרת?
DrorBiton
כן עכשיו הבנתי את הטעות שלי, כנראה שתופעת לוואי של לעשות תרגילים באמצע הלילה היא ליפול על טעויות של שבוע 1…
תודה!
DrorBiton
אני אנצל את הפוסט לעוד שאלה, עד לשלב האחרון הצלחתי לבנות את כל הקודים שיעבדו לפי בקשת התרגיל.
עכשיו בחלק האחרון שהמשחק צריך לעבוד באופן מלא השתמשתי ברוב הקודים הקודמים שלי כך שיחזירו ערך של True / False או שיחזירו לי את הלוח בחזרה לאחר שינוי (תור O או X), וככה אני רוצה שהפונקציה הסופית תשתמש בהם.
עכשיו כשאני מריץ את הקוד הסופי אני מקבל את ההודעה הבאה:
ניסיתי להריץ את כל הקוד ב python tutor אבל הוא ארוך מדי בשביל שאוכל להריץ אותו שם, וכשאני מריץ כל אחד מהפונקציות החיצוניות בנפרד אני מקבל שהן תקינות
גם ממה שאפשר לראות, ההתרעה שולחת אותי בחזרה לפונקציה מהסעיף הראשון שאמורה לבדוק אם X זכה באחת מהדרכים שיש ולהחזיר True אם הוא זכה, ובקוד השתמשתי בה כך שכל עוד הפונקציה של X והפונקציה של X מחזירות False אני רוצה שהקוד ימשיך לעבוד.
איזשהו רעיון איך לתקן את זה? @orpazf@aviadamar
Yam
אכווין: איזה עוד דברים בקוד שלך נקראים board?
DrorBiton
מחוץ לפונקציות, פעם אחת, רק הלוח הריק.
שאר הפונקציות מתחלקות ל-2, פונקציות שאמורות להחזיר חיובי / שלילי (אם X זכה, אם O זכה ואם המשחק נגמר)
ועוד 2 פונקציות שכל אחת מהן מייצגת את התור של X או O שבודקות אם התור תקין ובהתאם מחזירות את הלוח חזרה עם השינוי.
בפונקציה הראשית אני מנסה פשוט שכל עוד המשחק לא נגמר, אז כל עוד X או O לא זכו המשחק ימשיך בהתאם להנחיות (מהלך זוגי או לא זוגי וכו).
עשיתי עכשיו שינוי קל שהפונקציה הראשית תרוץ על העתק של הלוח (פשוט כי אני רוצה שהלוח יתאפס בסוף המשחק) שלא שינתה את ההתראה, חוץ מזה הצלחתי להריץ את הקוד ב python tutor (רק בשביל לבדוק למה יש לי את ההתראה הזאת, לא העתקתי את 2 הפונקציות שאחראיות על התור של X או O שבאות אחרי השורה שבה הקוד נתקע לי) ושם הוא הצליח לרוץ בלי בעיה ונעצר רק בשורה שבה מוגדר לי התור של O (התור הראשון) כיוון שלא יכולתי להעתיק את הפונקציה,
לא ברור לי למה לי הקוד נעצר שם אבל ב python tutor הוא כן הצליח לעבור את החסימה הזאת
Yam
בקיצור, קראת לפונקציה ולמשתנה באותו שם (board) וזה בלבל את פייתון
DrorBiton
בדקתי את עצמי 3 פעמים ויש משתנה אחד בשם board וזה הלוח הריק שאיתו מתחיל המשחק, לכל הפונקציות יש שם אחר
Yam
יתכן שאתה מעביר לפרמטר board ארגומנט שהוא פונקציה?
כי זה מה שהשגיאה שלך אומרת – אתה מנסה להתייחס לפונקציה (במקרה הזה, מה ששמור על board) עם סוגריים מרובעים
DrorBiton
הצלחתי למצוא את הטעות שלי, לא שמתי לב שב- 2 מקומות בפונקציה לא שמתי לתתי פונקציות משתנים.
תודה על העזרה!