初学者算法/嵌套if语句Python 3.3

时间:2013-10-05 02:44:27

标签: python

好的,所以我还有一个关于我正在建设的井字游戏的问题。 :P我正在研究的是编码A.I.这是无与伦比的,所以我现在所知道的是,如果计算机首先启动,它将按照必要的步骤来获胜或抽奖,但是,我不知道如何使用算法,主要是minimax() ,(因为这是我制作的第一个实际程序)并且我不太完全确定如何简化所有if语句。

我对A.I.的代码到目前为止如下:

 if strategy == False:
    slot[0] = computer_team
    if slot[1] == user_team or slot [2] == user_team and (slot[3] != user_team) \
       and (slot[3] != computer_team):
        slot[3] = computer_team
        if slot[6] == user_team and (slot[4] != user_team) and (slot[4] != computer_team):
            slot[4] = computer_team
        else:
            return
    if slot[3] == user_team or slot[4] == user_team or slot[6] == user_team \
           and (slot[1] != user_team) and (slot[1] != computer_team):
        slot[1] = computer_team
        if slot[2] == user_team and (slot[4] != user_team) and (slot[4] != computer_team):
            slot[4] = computer_team
        elif slot[2] == user_team and slot[4] == user_team and (slot[6] != user_team) \
            and (slot[6] != computer_team):
            slot[6] = computer_team
            if slot[4] == user_team and (slot[5] != user_team) and (slot[5] != computer_team):
                slot[5] = computer_team
            elif slot[7] == user_team and slot[5] == computer_team and (slot[8] != user_team) and (slot[8] != computer_team):
                    slot[8] = computer_team
        else:
            return
    else:
        return

我发现的一个问题是,一旦if语句嵌套到目前为止它们就会停止执行(在这种情况下,最后一个elif插槽[7])。我知道这段代码效率低下,但这是我知道怎么做的唯一方法。 (我不确定我将如何用于语句或范围)。因此,如果您有任何关于算法的建议或如何简化这个问题,那么我很高兴听到。 C:

编辑:所有的插槽都是指我的电路板,它是:

def draw_board():
'''Opted to use lists so that the numbers can be replaced with either
    X or O later on and so that testing whether the game is over is simpler'''
print (" " + str(slot[0]) + " | " + str(slot[1]) + " | " + str(slot[2]))
print ("-----------")
print (" " + str(slot[3]) + " | " + str(slot[4]) + " | " + str(slot[5]))
print ("-----------")
print (" " + str(slot[6]) + " | " + str(slot[7]) + " | " + str(slot[8]))
print ("\n")

并且user_team / computer_team拥有" X"或者" O",取决于玩家选择使用哪一个。

2 个答案:

答案 0 :(得分:0)

您可能需要查看

http://www.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html

它会逐步为您打造井字游戏的解决方案。请注意,它首先介绍一个类似于您在此处所做的基于表的实现,然后开始使用基于树的解决方案。

答案 1 :(得分:0)

我发现了其他一些“错误”,但要回答你的问题......

看起来你的问题就在这里:

elif slot[2] == user_team and slot[4] == user_team and (slot[6] != user_team) \
and (slot[6] != computer_team):

当你按照你提供的模式4, 2, 3, 7时,董事会看起来像是:

 O | O | X
-----------
 X | X | O
-----------
 O | X | 8

以上条件不满足。例如,你写的内容是:

if Slot2 = User, Slot4 = User, Slot6 != User, and Slot6 != Computer either... 

董事会上写着:

Slot2 = User, Slot4 = User, Slot6 != User, and Slot6 = Computer

我刚从第192行删除了and (slot[6] != computer_team),现在看起来效果很好。

让我知道这是否解决了你的第一个问题(可能有很多问题)(整个问题还有其他几点,但是如果你按照它进行工作,你会发现它们都很及时)。

这很扎实 - 干得好。