בעיה מוזרה בקוד שבניתי לאיקס עיגול

בחלק הראשון של השאלה החלטתי ללכת על 2 פונקציות (X ו- O) שמטרת הפונקציה היא לבדוק אם אחד מתנאי הניצחון מתקיימים, ואם כן להחזיר לי True (הפונקציה בהתחלה מוגדרת False) אבל משום מה, לא משנה איפה אני ממקם אותם, הפונקציה תמיד מחזירה לי True.
רק כשבאחד מתתי הרשימות אין בכלל X או O הפונקציה מחזירה לי False.
ניסיתי גם להריץ את הקוד ב Python tutor אבל גם כשאין מצב של ניצחון בכלל הפונקציה מחזירה לי True.
לדוג:

[[‘O’, ‘-’, ‘-’], [‘O’, ‘-’, ‘-’], [’-’, ‘-’, ‘O’]]

אין פה שום ניצחון, אבל משום מה הפונקציה מחזירה לי תמיד שכן.
החלק המוזר גם הוא שגם ב- 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’:

יש למישהו מושג למה זה קורה?

שים לב להתנהגות המוזרה של דברים מהסגנון “a” and “b” == “b”. זה לא מחזיר את מה שאתה מתכוון שזה יחזיר

הייתי ממליץ לרשום לעצמך את הפלט שמתקבל בין כל and ולראות מה קורה (:

נדחף לשאלה האם חובה שהפונקציות שרשומות בתרגיל יהיו הפונקציות הקיימות אצלי או שאפשר לעבוד אחרת?

כן עכשיו הבנתי את הטעות שלי, כנראה שתופעת לוואי של לעשות תרגילים באמצע הלילה היא ליפול על טעויות של שבוע 1…
תודה!

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

ניסיתי להריץ את כל הקוד ב python tutor אבל הוא ארוך מדי בשביל שאוכל להריץ אותו שם, וכשאני מריץ כל אחד מהפונקציות החיצוניות בנפרד אני מקבל שהן תקינות
גם ממה שאפשר לראות, ההתרעה שולחת אותי בחזרה לפונקציה מהסעיף הראשון שאמורה לבדוק אם X זכה באחת מהדרכים שיש ולהחזיר True אם הוא זכה, ובקוד השתמשתי בה כך שכל עוד הפונקציה של X והפונקציה של X מחזירות False אני רוצה שהקוד ימשיך לעבוד.
איזשהו רעיון איך לתקן את זה?
@orpazf @aviadamar

אכווין: איזה עוד דברים בקוד שלך נקראים board?

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

עשיתי עכשיו שינוי קל שהפונקציה הראשית תרוץ על העתק של הלוח (פשוט כי אני רוצה שהלוח יתאפס בסוף המשחק) שלא שינתה את ההתראה, חוץ מזה הצלחתי להריץ את הקוד ב python tutor (רק בשביל לבדוק למה יש לי את ההתראה הזאת, לא העתקתי את 2 הפונקציות שאחראיות על התור של X או O שבאות אחרי השורה שבה הקוד נתקע לי) ושם הוא הצליח לרוץ בלי בעיה ונעצר רק בשורה שבה מוגדר לי התור של O (התור הראשון) כיוון שלא יכולתי להעתיק את הפונקציה,
לא ברור לי למה לי הקוד נעצר שם אבל ב python tutor הוא כן הצליח לעבור את החסימה הזאת

בקיצור, קראת לפונקציה ולמשתנה באותו שם (board) וזה בלבל את פייתון

בדקתי את עצמי 3 פעמים ויש משתנה אחד בשם board וזה הלוח הריק שאיתו מתחיל המשחק, לכל הפונקציות יש שם אחר

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

הצלחתי למצוא את הטעות שלי, לא שמתי לב שב- 2 מקומות בפונקציה לא שמתי לתתי פונקציות משתנים.
תודה על העזרה!