שאלה בנוגע למחזורות וערך החזרה

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

אני משתמש בבדיקה:

if vicrory == ‘X’ or ‘O’ :
do somthing

ומה שקורה הוא שגם במקרה שהערך הוא N התנאי נכנס.
הדבר הפסיק רק שעברתי לתנאי של

if vicrory != ‘N’ ’ :

למה? (זו גם חלק מהסיבה שעברתי להחזיר N ולא מחרוזת ריקה כי ממש לא הצלחתי להבין מה קורה בבדיקות שלי)

הסיבה לכך היא באיך שהגדרת את התנאי
if vicrory == ‘X’ or ‘O’

בעצם מה שקורה פה זה שיש לך בדיקה האם ויקטורי הוא איקס או האם יש לך תו O.
החלק אחרי ה- or שלך ישתערך לביטוי שהוא True תמיד. בעצם ה-if שלך תמיד מתקיים.
לכן אתה תמיד תיכנס לתוך התנאי הזה ותבצע את do something, גם כאשר הערך של ויקטורי הוא N.

4 לייקים

גם אם אוסיף סוגריים (X or O) ?

בוא תגיד לי מה קורה כאשר הביטוי הוא: if vicrory == (‘X’ or ‘O’)
כיצד הוא נבדק, מה סדר הפעולות שמתרחש?

לייק 1

אה נכון, זה אותו דבר - זה בודק שזה ערך בוליאני וזה תמיד יהיה נכון. תודה
איזה שטות…