优化多个重复if语句与数组一起使用

时间:2019-06-29 18:42:14

标签: python arrays optimization conditional-statements

我正在开发一个小程序来在计算机上玩tictactoe,但是当涉及到检查谁是获胜者时,我做了一个函数,用于检查代表板的阵列上是否有任何'X'或'O'板垂直,水平和交叉。仅通过查看代码,我就可以看到很多重复,而我只是在寻找有关如何优化代码的建议。

我已经尝试将'X'和'O'的if语句组合在一起,但是由于需要每个人将不同的消息打印到输出中,因此无法将它们组合在一起。第一条if语句检查每一行中是否有所有X值,第二条垂直检查,第三和第四条检查值全盘检查。

for i in range(3):
    if myDict[0][i] == 'X' and myDict[1][i] == 'X' and myDict[2][i] == 'X':
        print('You Lose!!!')
        DisplayBoard(myDict)
        return False
    elif myDict[i][0] == 'X' and myDict[i][1] == 'X' and myDict[i][2] == 'X':
        print('You Lose!!!')
        DisplayBoard(myDict)
        return False
if myDict[0][0] == 'X' and myDict[1][1] == 'X' and myDict[2][2] == 'X':
    print('You Lose!!!')
    DisplayBoard(myDict)
    return False
elif myDict[0][2] == 'X' and myDict[1][1] == 'X' and myDict[2][0] == 'X':
    print('You Lose!!!')
    DisplayBoard(myDict)
    return False

for i in range(3):
    if myDict[0][i] == 'O' and myDict[1][i] == 'O' and myDict[2][i] == 'O':
        print('You Win!!!')
        DisplayBoard(myDict)
        return False
    elif myDict[i][0] == 'O' and myDict[i][1] == 'O' and myDict[i][2] == 'O':
        print('You Win!!!')
        DisplayBoard(myDict)
        return False
if myDict[0][0] == 'O' and myDict[1][1] == 'O' and myDict[2][2] == 'O':
    print('You Win!!!')
    DisplayBoard(myDict)
    return False
elif myDict[0][2] == 'O' and myDict[1][1] == 'O' and myDict[2][0] == 'O':
    print('You Win!!!')
    DisplayBoard(myDict)
    return False
return True

该程序有效,只是想找到优化代码的方法。

2 个答案:

答案 0 :(得分:0)

myDict[0][i] == 'X' and myDict[1][i] == 'X' and myDict[2][i] == 'X'

可以替换为

all(myDict[j][i]=='X' for j in range(3))


这对if / elif语句可以与or组合。


您还可以通过编写将播放器('X''O')作为参数的函数来替换重复的代码。只需为每个玩家调用一次该功能。

答案 1 :(得分:0)

我建议使用间接方式来标识要合并的索引,并在组列表中循环以形成广义条件。

例如:

axes = [ [(0,0),(0,1),(0,2)], [(1,0),(1,1),(1,2)], [(2,0),(2,1),(2,2)],
         [(0,0),(1,0),(2,0)], [(0,1),(1,1),(2,1)], [(0,2),(1,2),(2,2)],
         [(0,0),(1,1),(2,2)], [(0,2),(1,1),(2,0)] ]

winner = "O"
for axis in axes:
    p = "".join(myDict[r][c] for r,c in axis)
    if p = "OOO": winner = "O"
    if p = "XXX": winner = "X" 
if winner == "O": print("You Win!!!")
if winner == "X": print("You Lose!!!")