亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

PHP
一只甜甜圈 2023-11-09 21:15:24
我必須為一個項目制作一個 Tictactoe,雖然我知道代碼不好,但我看不出錯誤是什么,該值被分配給字典,如果我打印最后一次播放的密鑰正確顯示是 X 還是 O,但該值未在電路板的最后一次打印中表示。def tateti():juego_terminado = Falsefirst_player = 'X'second_player = 'O'turn = 0tablero = {'ArribaIzquierda' : ' ','ArribaCentro' : ' ', 'ArribaDerecha' : ' ', 'CentroIzquierda' : ' ', 'CentroCentro' : ' ', 'CentroDerecha' : ' ','AbajoIzquierda' : ' ', 'AbajoCentro' : ' ','AbajoDerecha' : ' '}#Loop principal    #Instruccionesprint('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
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

您正在將新的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 str


try: # let's see if player entered a whole number

    casilla = int(jugada) - 1 # remember, field 1 is numbered internally as 0

except ValueError: # apparently not

    try: # let's see if player entered a valid shortcut

        casilla = casillas.index(jugada)

    except ValueError: # apparently not

        casilla = 9 # let's choose an invalid value, we'll detect that later

現在我們在 中有一個數字casilla,讓我們看看它是否在范圍內,如果是的話,讓我們填充棋盤(如果可以的話):


if 0 <= casilla <= 8:

    if tablero[casilla] == ' ': 

        tablero[casilla] = player

    else:

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

        continue

else:

    print('Jugada invalida, por favor realice una jugada valida') 

    continue

獲勝條件也可以簡化:


if tablero[0] == tablero[1] == tablero[2] != " " or \

   tablero[3] == tablero[4] == tablero[4] != " " or \

   tablero[6] == tablero[7] == tablero[8] != " " or \

   ... etc. ...:

   juego_terminado = True

通過理解,這可以進一步縮短:


if any(tablero[i] == tablero[j] == tablero[k] != " " 

   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))):

    juego_terminado = True

我還沒有實際測試過,所以如果您遇到問題,請告訴我。


查看完整回答
反對 回復 2023-11-09
  • 1 回答
  • 0 關注
  • 160 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號