为什么我最后无法打印板子?(井字棋蟒蛇)

我必须为一个项目制作一个 Tictactoe,虽然我知道代码不好,但我看不出错误是什么,该值被分配给字典,如果我打印最后一次播放的密钥正确显示是 X 还是 O,但该值未在电路板的最后一次打印中表示。


def tateti():

juego_terminado = False

first_player = 'X'

second_player = 'O'

turn = 0

tablero = {'ArribaIzquierda' : ' ','ArribaCentro' : ' ', 'ArribaDerecha' : ' ', 

'CentroIzquierda' : ' ', 'CentroCentro' : ' ', 'CentroDerecha' : ' ',

'AbajoIzquierda' : ' ', 'AbajoCentro' : ' ','AbajoDerecha' : ' '}


#Loop principal

    #Instrucciones

print('Para jugar, usa el numepad como si fuera el tablero de tateti\no elegi una posicion en el tablero con las primeras dos iniciales de la fila\ny la primer letra de la posicion dentro de la fila.\nPor ejemplo para ponerla arriba al centro es: arc (AR-riba C-entro). \n\n')

print('TA TE TI')

while juego_terminado == False:

    abd = tablero['AbajoDerecha']

    arc = tablero['ArribaCentro']

    ard = tablero['ArribaDerecha']

    cei = tablero['CentroIzquierda']

    cec = tablero['CentroCentro']

    ced = tablero['CentroDerecha']

    ari = tablero['ArribaIzquierda']

    abi = tablero['AbajoIzquierda']

    abc = tablero['AbajoCentro']

    #Separando los turnos

    if turn % 2 == 0:

        player = first_player

    else:

        player = second_player

    

    print('|{}|{}|{}|\n- - - -\n|{}|{}|{}|\n- - - -\n|{}|{}|{}|'.format(ari, arc, ard, cei, cec, ced, abi, abc, abd))

    #Pedirle al jugador donde quiero poner su figura

    jugada = str(input('¿Donde queres poner la {}?: '.format(player)))


    #Asignando cruz o cicedulo al dicecionario

    if jugada == 'ari' or jugada == '7':

        if tablero['ArribaIzquierda'] == ' ': 

            tablero['ArribaIzquierda'] = player

        else:

            print('Este posición ya fue ocupada, por favor elegi otra')

            continue

    elif jugada == 'arc' or jugada == '8':

        if  tablero['ArribaCentro'] == ' ':   

            tablero['ArribaCentro'] = player

        else:

            print('Este posición ya fue ocupada, por favor elegi otra')

            continue

一只甜甜圈
浏览 123回答 1
1回答

忽然笑

您正在将新的X或O分配给tablero['algo']。如果游戏没有在这里结束,您可以将 的内容分配tablero给ari、等,但仅在下arc一个循环开始时才分配。因此,如果游戏在该移动之后结束,您将打印旧的ari、arc等,这些尚未更新以反映最新的移动。当然,还有许多其他问题需要修复(可以避免大量重复),但游戏确实可以正常运行。一些建议:我会使用一个简单的列表来处理董事会。tablero = [" "] * 9创建一个包含九个空格字符的列表。这允许很多简化。例如,要打印电路板,您可以简单地执行以下操作print('|{6}|{7}|{8}|\n- - - -\n|{3}|{4}|{5}|\n- - - -\n|{0}|{1}|{2}|'.format(*tablero))请注意,列表的第一个元素由 索引0,因此我们需要考虑到这一点。完成此操作后,您可以创建另一个列表来处理快捷方式:casillas = ["abi", "abc", "abd", "cei", "cec", "ced", "ari", "arc", "ard"]现在处理输入要容易得多,因为您可以重用相同的代码而不是大量if/elif语句:jugada = input('¿Donde queres poner la {}?: '.format(player)) # input() already returns a strtry: # let's see if player entered a whole number&nbsp; &nbsp; casilla = int(jugada) - 1 # remember, field 1 is numbered internally as 0except ValueError: # apparently not&nbsp; &nbsp; try: # let's see if player entered a valid shortcut&nbsp; &nbsp; &nbsp; &nbsp; casilla = casillas.index(jugada)&nbsp; &nbsp; except ValueError: # apparently not&nbsp; &nbsp; &nbsp; &nbsp; casilla = 9 # let's choose an invalid value, we'll detect that later现在我们在 中有一个数字casilla,让我们看看它是否在范围内,如果是的话,让我们填充棋盘(如果可以的话):if 0 <= casilla <= 8:&nbsp; &nbsp; if tablero[casilla] == ' ':&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; tablero[casilla] = player&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; print('Este posición ya fue ocupada, por favor elegi otra')&nbsp; &nbsp; &nbsp; &nbsp; continueelse:&nbsp; &nbsp; print('Jugada invalida, por favor realice una jugada valida')&nbsp;&nbsp; &nbsp; continue获胜条件也可以简化:if tablero[0] == tablero[1] == tablero[2] != " " or \&nbsp; &nbsp;tablero[3] == tablero[4] == tablero[4] != " " or \&nbsp; &nbsp;tablero[6] == tablero[7] == tablero[8] != " " or \&nbsp; &nbsp;... etc. ...:&nbsp; &nbsp;juego_terminado = True通过理解,这可以进一步缩短:if any(tablero[i] == tablero[j] == tablero[k] != " "&nbsp;&nbsp; &nbsp;for i,j,k in ((0,1,2), (3,4,5), (6,7,8), (0,3,6), (1,4,7), (2,5,8), (0,4,8), (2,4,6))):&nbsp; &nbsp; juego_terminado = True我还没有实际测试过,所以如果您遇到问题,请告诉我。
打开App,查看更多内容
随时随地看视频慕课网APP