1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
您正在將新的X或O分配給tablero['algo']。如果游戲沒有在這里結(jié)束,您可以將 的內(nèi)容分配tablero給ari、等,但僅在下arc一個(gè)循環(huán)開始時(shí)才分配。
因此,如果游戲在該移動(dòng)之后結(jié)束,您將打印舊的ari、arc等,這些尚未更新以反映最新的移動(dòng)。
當(dāng)然,還有許多其他問題需要修復(fù)(可以避免大量重復(fù)),但游戲確實(shí)可以正常運(yùn)行。
一些建議:
我會(huì)使用一個(gè)簡(jiǎn)單的列表來處理董事會(huì)。tablero = [" "] * 9創(chuàng)建一個(gè)包含九個(gè)空格字符的列表。這允許很多簡(jiǎn)化。例如,要打印電路板,您可以簡(jiǎn)單地執(zhí)行以下操作
print('|{6}|{7}|{8}|\n- - - -\n|{3}|{4}|{5}|\n- - - -\n|{0}|{1}|{2}|'.format(*tablero))
請(qǐng)注意,列表的第一個(gè)元素由 索引0,因此我們需要考慮到這一點(diǎn)。
完成此操作后,您可以創(chuàng)建另一個(gè)列表來處理快捷方式:
casillas = ["abi", "abc", "abd", "cei", "cec", "ced", "ari", "arc", "ard"]
現(xiàn)在處理輸入要容易得多,因?yàn)槟梢灾赜孟嗤拇a而不是大量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
現(xiàn)在我們?cè)?中有一個(gè)數(shù)字casilla,讓我們看看它是否在范圍內(nèi),如果是的話,讓我們填充棋盤(如果可以的話):
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
獲勝條件也可以簡(jiǎn)化:
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
通過理解,這可以進(jìn)一步縮短:
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
我還沒有實(shí)際測(cè)試過,所以如果您遇到問題,請(qǐng)告訴我。
- 1 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報(bào)