Код Python работает в 2.7, но не в 3.5
Моя курсовая работа заключается в создании крестиков-ноликов в Python, мой преподаватель помог мне заставить его работать в 2.7, однако он должен быть в 3.5.
Во-первых, в 2.7 код ниже печатает список 3x3, однако в 3.5 он просто печатает список вниз, а не 3x3. мой учитель сказал, что, может быть, поставить end = ' '
в конце, но это тоже не работает.
def printBoard( board ):
counter = 0
for y in range(3):
for x in range(3):
print (board[counter]),
counter += 1
print
print
Вторая проблема - на 2.7 это позволяет мне продолжать вводить числа до тех пор, пока доска не заполнится X или O, на 3.5 это позволяет вводить только один раз, а затем программа заканчивается?
value = input("input number between 1 and 9")
value = int(value)
if value == 1:
alist[0] = player1
printBoard( alist )
value = input("input number between 1 and 9")
if value == 2:
alist[1] = player1
printBoard( alist )
value = input("input number between 1 and 9")
И т. д.
2 ответа:
end=' '
(вы можете использоватьfrom __future__ import print_function
в начале кода):print(board[counter], end=' ')
input
возвращает строку в Python 3.x. (не вычисляет входную строку). Вам нужно преобразовать значение вint
каждый раз, когда вы использовалиinput
:value = input("input number between 1 and 9") value = int(value)
Альтернативно, вместо сравнивая входные данные с целочисленным литералом
1
или2
, сравните входную строку со строками:'1'
,'2'
без преобразования строки в целое число. (Но для этого необходимо использоватьraw_input
в Python 2.7 вместоinput
)
print()
. В противном случае ничего не печатается.
Я предполагаю, что
board
- это что-то вроде[['*', '*', '*'], ['*', '*', '*'], ['*', '*', '*']]
. Это означает, что у вас есть простой способ распечатать это с помощью одного вызоваprint()
.Это объединяет каждую строку в новую строку, производя каждую строку как часть генератора. Этот генератор распаковывается с помощьюprint(*(''.join(row) for row in board), sep='\n')
*
и отправляется вprint()
, где каждая строка разделяется новой строкой.Для вашего второго выпуска задача проста: вы бросаете
int()
для первогоvalue
, но не для последующих. Тем не менее, это то, что вы должны сделать. делайте с петлей. Это предотвратит именно такую ошибку. Если вы обнаружите, что пишете много кода с помощью Ctrl+V , ты делаешь что-то не так. Если каждый блок немного отличается, с увеличенным числом, вы бы сделали это с чем-то вродеfor i in range(n):
, что позволяет выполнять один и тот же код с увеличенным числом на каждой итерации.Однако я бы рекомендовал простой цикл
while
, который проверяет, завершена ли игра:while True: move = request_move() do_move('X', move) if game_complete(): break request_move() do_move('O', move) if game_complete(): break
Вы бы тогда напишите соответствующие функции для запроса координат перемещения, ввода перемещений на доску и проверки, завершена ли игра.