如何解决python eclipse上的打印字符串错误

时间:2013-11-03 07:46:43

标签: python eclipse

我不知道为什么我会从控制台收到此错误:

<<
print stirngp[state[i][j]]
                ^
SyntaxError: invalid syntax
<<

此外,似乎IDE在下面的代码行中放置了红色

line = raw_input("Enter:")

我不确定我做错了什么,下面的代码如下所示

def isTerminal(state):
    stateT = zip(*state)
    for i in range(3):
        if all(state[i][0] == j for j in state[i]) and state[i][0] != 0:
                return state[i][0]
        if all(stateT[i][0] == j for j in stateT[i]) and stateT[i][0] != 0:
            return stateT[i][0]

    if (state[0][0] == state[1][1] == state[2][2]) or \
       (state[0][2] == state[1][1] == state[2][0]):
        if state[1][1] != 0:
            return state[1][1]

    for i in range(3):
        if 0 in state[i]:
            return None

    return 0

def succ(state):
 #   print state
    countX = 0
    countO = 0
    for i in range(3):
        for j in range(3):
            if state[i][j] == 1: countX = countX + 1
            if state[i][j] == -1: countO = countO + 1
    if countX > countO:
        player = "MIN"
    else:
        player = "MAX"

    succList = []
    v = {"MIN":-1,"MAX":1}
    for i in range(3):
        for j in range(3):
            if state[i][j] == 0:
                succ = [k[:] for k in state]
                succ[i][j] = v[player]
                succList = succList + [succ]
  #  print succList
    return succList

def nextplay(player):
    if player == "MIN":
        return "MAX"
    else:
        return "MIN"

def minimax(state,alpha,beta,player):
    value = isTerminal(state)
    if value != None:
#        print "TERMINAL:", state, value, player
        return value
    if player == "MIN":
        for y in succ(state):
            beta = min(beta, minimax(y,alpha,beta,"MAX"))
            if beta <= alpha: return alpha
        return beta
    if player == "MAX":
        for y in succ(state):
            alpha = max(alpha, minimax(y,alpha,beta,"MIN"))
            if alpha >= beta: return beta
        return alpha

def printing(state):
    p = {-1:"O",0:".",1:"X"}
    for i in range(3):
        for j in range(3):
            print p[state[i][j]],
        print ""
    print ""

def main():
    state = [[0,0,0],
             [0,0,0],
             [0,0,0]]

    val = isTerminal(state)
    while val == None:
        line = raw_input("Enter:")
        x = line.split(",")
        a = int(x[0]); b = int(x[1])
        state[a][b] = 1
        if isTerminal(state) != None:
            printing(state)
            return

        # determine which successive state is better
        succList = succ(state)
        succValList = []
        for i in succList:
            succValList = succValList + [(minimax(i,-1,1,"MAX"),i)]
        succValList.sort(key=lambda x:x[0])

        state = succValList[0][1] # can also randomly choose other states of the same minimax value
        printing(state)
        val = isTerminal(state)


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

据我所知,您无法在Python 3中使用raw_input()。它已被更改为input() http://docs.python.org/dev/whatsnew/3.0.html

什么是stringp?它是现有的清单吗? 如果是,则state[i][j]必须返回一个整数,以便您可以在stringp[]的索引处检索项目