【问题标题】:Optimizing multiple repetitive if statements working with arrays优化使用数组的多个重复 if 语句
【发布时间】:2019-06-29 18:42:14
【问题描述】:

我正在开发一个小程序来与计算机玩tictactoe,但是在检查谁是获胜者时,我创建了一个函数来检查代表棋盘的数组中是否有任何穿过的'X'或'O'板垂直,水平和交叉。只是通过查看代码,我可以看到很多重复,我只是在寻找有关如何优化它的建议。

我已经尝试将'X's 和'O's 的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

程序可以工作,只是想找到优化代码的方法。

【问题讨论】:

    标签: python arrays optimization conditional-statements


    【解决方案1】:

    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')作为参数的函数来替换重复的代码。只需为每个玩家调用一次该函数。

    【讨论】:

      【解决方案2】:

      我建议使用间接方式来识别您想要组合的索引并循环遍历组列表以形成通用条件。

      例如:

      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!!!") 
      

      【讨论】:

        猜你喜欢
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多