如何用if与for循环重写含zip()的3*3矩阵评分函数
改写后的代码
import numpy as np def grade(state): for s in ['o','x']: if s == 'o': # 检查行全为'o' if (state == s).all(axis=1).any(): return -1 # 检查列全为'o' if (state == s).all(axis=0).any(): return -2 # 检查主对角线全为'o' if (np.diagonal(state) == s).all(): return -3 # 检查副对角线全为'o' if (np.diagonal(np.rot90(state)) == s).all(): return -4 elif s == 'x': # 检查行全为'x' if (state == s).all(axis=1).any(): return 1 # 检查列全为'x' if (state == s).all(axis=0).any(): return 2 # 检查主对角线全为'x' if (np.diagonal(state) == s).all(): return 3 # 检查副对角线全为'x' if (np.diagonal(np.rot90(state)) == s).all(): return 4 return 0
说明
- 严格遵循指定的代码结构,遍历
['o','x']并分分支处理 - 修复了原代码中误用未定义变量
symbol的问题,统一替换为当前遍历的字符s - 完全匹配需求的返回规则:
- 'o'匹配行/列/主对角线/副对角线分别返回-1/-2/-3/-4
- 'x'匹配行/列/主对角线/副对角线分别返回1/2/3/4
- 无匹配情况返回0
- 保留原逻辑的优先级:行匹配优先于列,其次是主对角线,最后是副对角线,一旦匹配到立即返回结果
内容的提问来源于stack exchange,提问作者Phoenix
相关产品推荐
相关产品推荐

