זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/python/lessons/22-code-sharing
זה נושא דיון מלווה לערך המקורי ב- https://www.tocode.co.il/bundles/python/lessons/22-code-sharing
@ynonp שאלת לגבי דרך להעביר ערך חזרה ללא שינוי פונקציית scan_board שאינה מחזירה ערך.
האם התכוונת לשימוש ב-raise
להעביר Exception עם מסר כמו זה שרצינו להחזיר?
לכאורה ניתן רק בקוד של מחלקת AIPlayer ליצר את פונקציית ה-callback שתועבר ל-scan_board, כך שתזרוק exception ולעטוף את הקריאה ל-scan_board ב-try/except כדי להוציא את המסר להחזרה מה-exception.
דרך נוספת יכולה להיות עם שימוש במשתנה מחלקה, אליו יוכנס הערך להחזרה, וממנו ישלף אחרי ש-scan_board תסתיים.
יעבוד כשיש רק מופע אחד מהמחלקה הזו (או שיש מזהה ייחודי לכול מופע בו נשתמש כמפתח חד-חד ערכי במילון מחלקתי) ובצורה פחות יעילה (כי רץ על כל הלוח ללא יכולת לעצור את הלולאה שמפעילה אותו)
class AIPlayer:
_next_move = None
def next_move(self, board):
def foreach_cell(i, j):
if AIPlayer._next_move is not None:
return None
if board[i][j] == '.':
AIPlayer._next_move = f"({j}, {i})"
return f"({j}, {i})"
AIPlayer._next_move = None
scan_board(
board,
foreach_cell,
lambda: None,
)
return AIPlayer._next_move
לייק 1