крестики-нолики с цифрами в питоне

У меня есть H.W, и это крестики-нолики с цифрами. Отображается доска 3 x 3, и игрок 1 берет нечетные числа 1, 3, 5, 7, 9, а игрок 2 берет четные числа 0, 2, 4, 6, 8. Игроки по очереди записывают свои числа. Нечетные числа начинаются. Используйте каждое число только один раз. Победителем становится тот, кто первым заполнит линию, которая в сумме составляет 15. В строке могут быть как нечетные, так и четные числа.

и я добрался до сюда

board = [0,1,2,
         3,4,5,
         6,7,8]


def tic_tac_toe ():

 print ('|' ,board[0],'|',board[1] ,'|', board[2],'|')

 print ('--------------------')

 print ('|' ,board[3],'|',board[4] ,'|', board[5],'|')

 print ('--------------------')

 print ('|' ,board[6],'|',board[7] ,'|', board[8],'|')


def move(x1,x2):

 board[x2] = x1

     tic_tac_toe()



def odd (x):

    while  (x%2==0):

        x = int(input ('enter an odd number')

        move(x,x2)

    if (x%2!=0):

        move (x ,x2)        



def even (x) :

     while  (x%2!=0):

        x = int(input ('enter an even number')

        move(x,x2)


     if (x%2==0):

        move (x ,x2)        


def winner ():

    if (board[0]+board [1]+board[2]==15 or

        board[0]+board [3]+board[6]==15 or

        board[1]+board [4]+board[7]==15 or

        board[3]+board [4]+board[5]==15 or

        board[2]+board [5]+board[8]==15 or

        board[6]+board [7]+board[8]==15):

        print ('you are the winner')

def turn(s):

    print ('its '+ s +' turn')

    x = int (input ('enter the number: '))
    x1 = int (input ('enter the places number: '))            


print('Tic Tac Toe')

print ('player A should enter even numbers only'+' and player B should enter odd 
numbers only')

print ('the player with the ood numbers start')

tic_tac_toe ()

while (true):

    turn(B)

    odd(x1)
    break    

теперь моя проблема заключается в том, что я хочу создать функцию, которая проверяет, есть ли победитель каждый раз, когда игрок вводит число, и я хочу, чтобы она знала разницу между введенными числами и числом, которое уже есть (числа позиции) и я действительно новичок в программировании, поэтому, пожалуйста, извините меня, если в коде много ошибок


person nadia    schedule 08.02.2018    source источник
comment
Я дам вам подсказку, как узнать, есть ли число на доске или нет. Вы можете использовать ключевое слово in. Например. if number in board: print "Number [{}] has already been used.".format(number)   -  person Chuk Ultima    schedule 08.02.2018
comment
чтобы ответить на ваш вопрос, после функции, которая меняет ходы (я полагаю, это turn(s), вы должны поместить функцию winner(). Теперь у вас должна быть переменная типа player = 'a', которая после хода и проверки есть ли победитель, меняет местами на другой Кроме того, в odd() и even() вы меняете доску, даже если введенное число неверно, потому что вы написали дополнительную функцию move(x, x2) до условий if(x%2 ....   -  person Shinra tensei    schedule 08.02.2018
comment
также ничего не изменится, потому что переменные, введенные в turn(s), не возвращаются, поэтому они неизвестны в функциях odd() и even()   -  person Shinra tensei    schedule 08.02.2018


Ответы (2)


попробуй это:

Я добавил массив журналов доски, чтобы отслеживать, какие позиции содержат пользовательский ввод, а затем в функции победителя перекрестно ссылаюсь на указанный массив для проверки критериев победы.

board = [0,1,2,
     3,4,5,
     6,7,8]
boardLog = [0, 0, 0,
        0, 0, 0,
        0, 0, 0]

player = 'a' #with this we'll know which player's turn it is

def tic_tac_toe ():
    print ('|' ,board[0],'|',board[1] ,'|', board[2],'|')
    print ('--------------------')
    print ('|' ,board[3],'|',board[4] ,'|', board[5],'|')
    print ('--------------------')
    print ('|' ,board[6],'|',board[7] ,'|', board[8],'|')

def move(x1,x2):
    board[x2] = x1
    boardLog[x2] = 1
    tic_tac_toe()

def odd (x, x2):
    while  (x%2==0):
        x = int(input ('enter an odd number'))
    #Nothing here because if we get out of the while is because it's a valid number (we're not checking numbers out of range or anything)
    move (x ,x2)      

def even (x ,x2) :
    while  (x%2!=0):
        x = int(input ('enter an even number'))
    #Same here
    move (x ,x2)        

def winner():
    if (boardLog[0] + boardLog[1] + boardLog[2] == 3):
      if (board[0]+board [1]+board[2]==15):
          print ('you are the winner')
          return True
    if (boardLog[0] + boardLog[3] + boardLog[6] == 3):
      if (board[0]+board [3]+board[6]==15):
          print ('you are the winner')
          return True
    if (boardLog[1] + boardLog[4] + boardLog[7] == 3):
      if (board[1]+board [4]+board[7]==15):
          print ('you are the winner')
          return True
    if (boardLog[3] + boardLog[4] + boardLog[5] == 3):
      if (board[3]+board [4]+board[5]==15):
          print ('you are the winner')
          return True
    if (boardLog[2] + boardLog[5] + boardLog[8] == 3):
      if (board[2]+board [5]+board[8]==15):
          print ('you are the winner')
          return True
    if (boardLog[6] + boardLog[7] + boardLog[8] == 3):
      if (board[6]+board [7]+board[8]==15):
          print ('you are the winner')
          return True

    else: return False

def turn(s):
    print ('its '+ s +' turn')
    x = int (input ('enter the number: '))
    x1 = int (input ('enter the places number: '))
    if player == 'a':
        even(x, x1)
    else: odd(x, x1)          

print('Tic Tac Toe')
print ('player A should enter even numbers only'+' and player B should enter odd numbers only')
print ('the player with the ood numbers start')
tic_tac_toe ()
while (True):
    turn(player)
    if winner(): break
    else:
        if player == 'a': player = 'b'
person Dylan    schedule 08.02.2018

Я думаю, что это близко к тому, что вы хотите. Обратите внимание на комментарии. Также знайте, что я не проверял это, я просто немного поправил ваш код. Любые вопросы, не стесняйтесь спрашивать.

board = [0, 0, 0,
         0, 0, 0,
         0, 0, 0]
player = 'a' #with this we'll know which player's turn it is

def tic_tac_toe ():
    print ('|' ,board[0],'|',board[1] ,'|', board[2],'|')
    print ('--------------------')
    print ('|' ,board[3],'|',board[4] ,'|', board[5],'|')
    print ('--------------------')
    print ('|' ,board[6],'|',board[7] ,'|', board[8],'|')

def move(x1,x2):
    board[x2] = x1
    tic_tac_toe()

def odd (x, x2):
    while  (x%2==0):
        x = int(input ('enter an odd number'))
    #Nothing here because if we get out of the while is because it's a valid number (we're not checking numbers out of range or anything)
    move (x ,x2)      

def even (x ,x2) :
    while  (x%2!=0):
        x = int(input ('enter an even number'))
    #Same here
    move (x ,x2)        

def winner ():
    if (board[0]+board [1]+board[2]==15 or
        board[0]+board [3]+board[6]==15 or
        board[1]+board [4]+board[7]==15 or
        board[3]+board [4]+board[5]==15 or
        board[2]+board [5]+board[8]==15 or
        board[6]+board [7]+board[8]==15):
        print ('you are the winner')
        return true #To know if we need to stop the game
    else: return false

def turn(s):
    print ('its '+ s +' turn')
    x = int (input ('enter the number: '))
    x1 = int (input ('enter the places number: '))
    if player == 'a':
        even(x, x1)
    else: odd(x, x1)          

print('Tic Tac Toe')
print ('player A should enter even numbers only'+' and player B should enter odd numbers only')
print ('the player with the ood numbers start')
tic_tac_toe ()
while (true):
    turn(player)
    if winner(): break
    else:
        if player == 'a': player = 'b'
        else: player = 'a'    
person Shinra tensei    schedule 08.02.2018
comment
Спасибо, это действительно мне очень помогло, но я все еще нахожу проблему с функцией победителя, потому что она подсчитывает количество мест, а не только числа, введенные игроками. - person nadia; 08.02.2018
comment
вот как вы объявили исходную матрицу, я думал, вы хотели, чтобы она начиналась со значений [0, 1, 2, 3, ... ] - person Shinra tensei; 09.02.2018