我有一个井字游戏的运行时错误,因为我没有在这个程序中使用任何函数,请看一次代码



运行此代码时出错我已经用函数做过了,但这次我想不用函数做但是存在某种错误我甚至不知道我们能做这种像一样的井字游戏

from IPython.display import clear_output
import random
print('WELCOME TO TIC TAC TOEn')
board= [' '] * 10
player2 = ' '
player_1 = None
player_2 = None
turn = player_1
clear_output()
print('     |   |  ')
print('   '+board[7]+' | '+board[8]+' | '+board[9])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[4]+' | '+board[5]+' | '+board[6])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[1]+' | '+board[2]+' | '+board[3])
print('     |   |  ')
marker = ''
while not (marker == 'X' or marker == 'O'):
marker = input('player 1 do you want to be X or On').upper()

if marker == "X":
player1 = "X"
player2 = "O"
else:
player1 = "O"
player2 = "X"

if random.randint(0,1) == 0:
print('player 1 will go first')
turn=player_1
else:
print('player 2 will go first')
turn=player_2

win_check = False
if ((board[7]==player1 and board[8]==player1 and board[9]==player1) or #horizontal check
(board[4]==player1 and board[5]==player1 and board[6]==player1) or #horizontal check
(board[1]==player1 and board[2]==player1 and board[3]==player1) or #horizontal check
(board[1]==player1 and board[4]==player1 and board[7]==player1) or #vertical check
(board[2]==player1 and board[5]==player1 and board[8]==player1) or #vertical check
(board[3]==player1 and board[6]==player1 and board[9]==player1) or #vertical check
(board[1]==player1 and board[5]==player1 and board[9]==player1) or #diagonal check
(board[3]==player1 and board[5]==player1 and board[7]==player1)):
win_check=True
elif ((board[7]==player2 and board[8]==player2 and board[9]==player2) or #horizontal check
(board[4]==player2 and board[5]==player2 and board[6]==player2) or #horizontal check
(board[1]==player2 and board[2]==player2 and board[3]==player2) or #horizontal check
(board[1]==player2 and board[4]==player2 and board[7]==player2) or #vertical check
(board[2]==player2 and board[5]==player2 and board[8]==player2) or #vertical check
(board[3]==player2 and board[6]==player2 and board[9]==player2) or #vertical check
(board[1]==player2 and board[5]==player2 and board[9]==player2) or #diagonal check
(board[3]==player2 and board[5]==player2 and board[7]==player2)):
win_check=False

board_check = True
for i in range(1,10):
if board[i] == ' ':
board_check = True
else:
board_check = False
position = 0
gameon = True
while gameon == True:
if turn == player_1:
while position not in [1,2,3,4,5,6,7,8,9] or not board[i] == ' ':
position = int(input("Enter the position (1-9)"))
board[position] = player1
if win_check == True:
print("player1 WON!!")
print('     |   |  ')
print('   '+board[7]+' | '+board[8]+' | '+board[9])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[4]+' | '+board[5]+' | '+board[6])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[1]+' | '+board[2]+' | '+board[3])
print('     |   |  ')              
gameon = False
break
else:
if board_check == False:
print('     |   |  ')
print('   '+board[7]+' | '+board[8]+' | '+board[9])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[4]+' | '+board[5]+' | '+board[6])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[1]+' | '+board[2]+' | '+board[3])
print('     |   |  ')
print('game is Draw')
else:
turn = player_2

else:
while position not in [1,2,3,4,5,6,7,8,9] or  not board[i] == ' ':
position = int(input("Enter the position (1-9)"))
board[position] = player2
print("player2 WON!!")
print('     |   |  ')
print('   '+board[7]+' | '+board[8]+' | '+board[9])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[4]+' | '+board[5]+' | '+board[6])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[1]+' | '+board[2]+' | '+board[3])
print('     |   |  ')
if win_check == True:
print("player2 WON!!")
print('     |   |  ')
print('   '+board[7]+' | '+board[8]+' | '+board[9])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[4]+' | '+board[5]+' | '+board[6])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[1]+' | '+board[2]+' | '+board[3])
print('     |   |  ')
gameon = False
else:
if board_check == False:
print('     |   |  ')
print('   '+board[7]+' | '+board[8]+' | '+board[9])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[4]+' | '+board[5]+' | '+board[6])
print('     |   |  ')
print('---------------')
print('     |   |  ')
print('   '+board[1]+' | '+board[2]+' | '+board[3])
print('     |   |  ')
print('game is Draw')
else:
turn = player_1

replay = input('Do you wnt to play again? Y or N').lower()
if replay == 'y':
continue
else:
break


如果你能帮忙,对我这个初学者来说会很有用在python编程中在这段代码中,我无法退出while循环,它没有显示任何结果

在代码中,win_checkboard_check应该是函数,这样您就可以在每次转弯时重新检查状态。

试试这个代码:

def win_check():
if ((board[7]==player1 and board[8]==player1 and board[9]==player1) or #horizontal check
(board[4]==player1 and board[5]==player1 and board[6]==player1) or #horizontal check
(board[1]==player1 and board[2]==player1 and board[3]==player1) or #horizontal check
(board[1]==player1 and board[4]==player1 and board[7]==player1) or #vertical check
(board[2]==player1 and board[5]==player1 and board[8]==player1) or #vertical check
(board[3]==player1 and board[6]==player1 and board[9]==player1) or #vertical check
(board[1]==player1 and board[5]==player1 and board[9]==player1) or #diagonal check
(board[3]==player1 and board[5]==player1 and board[7]==player1)):
return True
elif ((board[7]==player2 and board[8]==player2 and board[9]==player2) or #horizontal check
(board[4]==player2 and board[5]==player2 and board[6]==player2) or #horizontal check
(board[1]==player2 and board[2]==player2 and board[3]==player2) or #horizontal check
(board[1]==player2 and board[4]==player2 and board[7]==player2) or #vertical check
(board[2]==player2 and board[5]==player2 and board[8]==player2) or #vertical check
(board[3]==player2 and board[6]==player2 and board[9]==player2) or #vertical check
(board[1]==player2 and board[5]==player2 and board[9]==player2) or #diagonal check
(board[3]==player2 and board[5]==player2 and board[7]==player2)):
return False

def board_check():
for i in range(1,10):
if board[i] == ' ':
return True
return False

在游戏循环中,将这些称为功能:

if win_check() .......
if board_check() .......

最新更新