#python
#python
Вопрос:
Это все, что я написал. Я знаю, что Increment.count равен 9, поскольку я ввел операторы печати и все проверил, но когда я устанавливаю Increment.count равным 9, по какой-то причине игра не заканчивается. Способ закончить игру — посмотреть, заполнено ли все места на доске, и никто еще не выиграл.
import random
board_layout = [
' ', ' ', ' ',
' ', ' ', ' ',
' ', ' ', ' '
]
class Increment:
count = 0
def __init__(self):
Increment.count = 1
def board():
print(board_layout[0] '|' board_layout[1] '|' board_layout[2])
print('-' ' ' '-' ' ' '-')
print(board_layout[3] '|' board_layout[4] '|' board_layout[5])
print('-' ' ' '-' ' ' '-')
print(board_layout[6] '|' board_layout[7] '|' board_layout[8])
def human_turn():
position = ' '
position = input('Enter a position from 1-9n')
position = int(position) - 1
board_layout[position] = 'O'
Increment.count = 1
board()
def computer_turn():
while True:
try:
position = random.randint(1, 9)
if is_board_empty(position):
board_layout[position] = 'X'
board()
Increment.count = 1
break
except:
pass
def is_board_empty(position):
return board_layout[position] == ' '
def is_winner():
if board_layout[0] != ' ' and board_layout[1] != ' ' and board_layout[2] != ' ' and
board_layout[0] == board_layout[1] == board_layout[2]:
board()
print(board_layout[0] ' won!')
return board_layout[0]
elif board_layout[3] != ' ' and board_layout[4] != ' ' and board_layout[5] != ' ' and
board_layout[3] == board_layout[4] == board_layout[5]:
board()
print(board_layout[3] ' won!')
return board_layout[3]
elif board_layout[6] != ' ' and board_layout[7] != ' ' and board_layout[8] != ' ' and
board_layout[6] == board_layout[7] == board_layout[8]:
board()
print(board_layout[6] ' won!')
return board_layout[6]
elif board_layout[0] != ' ' and board_layout[3] != ' ' and board_layout[6] != ' ' and
board_layout[0] == board_layout[3] == board_layout[6]:
board()
print(board_layout[0] ' won!')
return board_layout[0]
elif board_layout[1] != ' ' and board_layout[4] != ' ' and board_layout[7] != ' ' and
board_layout[1] == board_layout[4] == board_layout[7]:
board()
print(board_layout[1] ' won!')
return board_layout[1]
elif board_layout[2] != ' ' and board_layout[5] != ' ' and board_layout[8] != ' ' and
board_layout[2] == board_layout[5] == board_layout[8]:
board()
print(board_layout[2] ' won!')
return board_layout[2]
elif board_layout[0] != ' ' and board_layout[4] != ' ' and board_layout[8] != ' ' and
board_layout[0] == board_layout[4] == board_layout[8]:
board()
print(board_layout[0] ' won!')
return board_layout[0]
elif board_layout[2] != ' ' and board_layout[4] != ' ' and board_layout[6] != ' ' and
board_layout[2] == board_layout[4] == board_layout[6]:
board()
print(board_layout[2] ' won!')
return board_layout[2]
elif Increment.count == 9:
print('draw')
while is_winner() is None and Increment.count != 9:
human_turn()
print('n')
computer_turn()
print('n')
if Increment.count == 9 and is_winner is None:
print('draw')
Комментарии:
1. Привет, @James, не могли бы вы предоставить сценарий с входными данными, которые приводят к вашей проблеме… Спасибо!
2. На доске девять квадратов, поэтому и первый, и последний ход будут человеческими. Вы проверяете цикл while только после поворота компьютера. Increment.count будет четным числом только после поворота компьютера.
Ответ №1:
Похоже, что пока компьютер делает свой последний ход, плата заполнена, и компьютер переходит в бесконечный цикл, поэтому нам придется изменить компьютерный код, чтобы исправить это.
замените это
def computer_turn():
while True:
try:
position = random.randint(1, 9)
if is_board_empty(position):
board_layout[position] = 'X'
board()
Increment.count = 1
break
except:
pass
с
def computer_turn():
while True:
try:
if Increment.count == 9: # If the board is already full
break
position = random.randint(1, 9)
if is_board_empty(position):
board_layout[position] = 'X'
board()
Increment.count = 1
break
except:
pass