2016-08-19 6 views
-4

Несмотря видеть много сообщений об ошибке в питон отступа и опробовать множество решений, я все еще получаю эту ошибку:Python 3 IndentationError

import random 
import copy 
import sys 
the_board = [" "]*10 
def printboard(board): 
    print(board[7] + " " + "|" + board[8] + " " + "|" + board[9]) 
    print("--------") 
    print(board[4] + " " + "|" + board[5] + " " + "|" + board[6]) 
    print("--------") 
    print(board[1] + " " + "|" + board[2] + " " + "|" + board[3]) 

def choose_player(): 
    while True: 
     player = input("What do you want to be; X or O?") 
     if player == "X": 
      print("You chose X") 
      comp = "O" 
      break 
     elif player == "O": 
      print("You chose O") 
      comp = "X" 
      break 
     else: 
      print("Invalid Selection") 
      continue 
    return [player, comp] 


def virtual_toss(): 
    print("Tossing to see who goes first.....") 
    x = random.randint(0,1) 
    if x== 0: 
     print("AI goes first") 
     move = "comp" 
    if x == 1: 
     print("Human goes first") 
     move = "hum" 
    return move 
def win(board,le): 
    if (board[7] == le and board[8] == le and board[9]==le) or (board[4] == le and board[5]==le and board[6] == le)or (board[1] == le and board[2]==le and board[3] == le)or (board[7] == le and board[5]==le and board[3] == le)or (board[9] == le and board[5]==le and board[1] == le)or (board[7] == le and board[4]==le and board[1] == le)or (board[8] == le and board[5]==le and board[2] == le)or (board[9] == le and board[6]==le and board[3] == le): 
     return True 
    else: 
     return False 
def make_move(board,number,symbol): 
    board[number] = symbol 
def board_full(board): 
    count = 0 
    for item in board: 
     if item in ["X","O"]: 
      count+= 1 
    if count ==9 : 
     return True 
    else: 
     return False 
def valid_move(board,num): 
    if board[num] == " ": 
     return True 
    else: 
     return False 
def player_move(board): 
    number = int(input("Enter the number")) 
    return number 
def copy_board(board): 
    copied_board = copy.copy(board) 
    return copied_board 
def check_corner(board): 
    if (board[7] == " ") or (board[9] == " ") or (board[1] == " ") or (board[3] == " "): 
     return True 
    else: 
     return False 
def check_center(board): 
    if (board[5] == " "): 
     return True 
    else: 
     return False 


while True: 
    count = 0 
    loop_break = 0 
    print("welcome to TIC TAC TOE") 
    pla,comp = choose_player() 
    turn = virtual_toss() 
    while True: 
     printboard(the_board) 
     if turn == "hum": 
      if board_full() == True: 
       again = input ("Game is a tie. Want to try again? Y for yes and N for No") 
       if again == "Y": 
        loop_break = 6 
        break 
       else: 
        system.exit() 
    if loop_break == 6: 
     continue 


     while True: 
       number = player_move(the_board) 
       if (valid_move(the_board,number) == True) and not(board_full == False): 
        make_move(the_board,number,pla) 
        break 
       else: 
        print("Invalid Move, try again!") 
        continue 
      if (win(the_board,pla) == True): 
       print ("Yay, you won!!!") 
       printboard(the_board) 
       count = 1 
       break 
      else: 
       turn = "comp" 
       printboard(the_board) 
       continue 

     else: 
      if board_full() == True: 
       again = input ("Game is a tie. Want to try again? Y for yes and N for No") 
       if again == "Y": 
        loop_break = 6 
        break 
       else: 
        system.exit() 
    if loop_break = 6: 
     continue 
      copy_board(the_board) 
       for i in range(0,9): 
        make_move(copied_board,i,pla) 
        if(win(copied_board,pla) == True): 
         make_move(the_board,comp) 
         turn = "hum" 
         loop_break = 1 
         break 
        else: 
         continue 
       if loop_break = 1: 
        continue 
       if (check_corner(the_board) == True) or (check_center(the_board)==True): 
        for i in [7,9,1,3,5]: 
         if(valid_move(copied_board,i)==True): 
          make_move(copied_board,i,comp) 
          if(win(copied_board,comp)==True): 
           make_move(the_board,i,comp) 
           print("The AI beat you") 
           loop_break = 2 
           count = 1 
           break 
          else: 
           make_move(the_board,i,comp) 
           turn = "hum" 
           loop_break = 3 
           break 
       if loop_break == 2: 
        break 
       elif loop_break == 3: 
        continue 
       else: 
        for i in [8,4,6,2]: 
         if(valid_move(copied_board,i)==True): 
          make_move(copied_board,i,comp) 
          if(win(copied_board,comp)): 
           make_move(the_board,i,comp) 
           print("The AI beat you") 
           count = 1 
           loop_break = 4 
           break 
          else: 
           make_move(the_board,i,comp) 
           turn = "hum" 
           loop_break = 5 
           break 
       if loop_break == 4: 
        break 
       elif loop_break == 5: 
        continue 

    if count == 1: 
     again = input("Would you like to play again? y/n") 
     if again == "y": 
      continue 
     else: 
      system.exit() 

Я знаю, что это довольно длинный код, но я укажу на конкретную область, где лежит ошибка. Вы видите, я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "python", line 106 
    if (win(the_board,pla) == True): 
           ^
IndentationError: unindent does not match any outer indentation level 

Более конкретно, эта часть кода:

while True: 
       number = player_move(the_board) 
       if (valid_move(the_board,number) == True) and not(board_full == False): 
        make_move(the_board,number,pla) 
        break 
       else: 
        print("Invalid Move, try again!") 
        continue 
      if (win(the_board,pla) == True): 
       print ("Yay, you won!!!") 
       printboard(the_board) 
       count = 1 
       break 

Любая помощь? Я не могу заставить код работать любыми способами!

+4

Посмотрите на код. У него четкое отступление! Посмотрите, как он не выстраивается в линию? – user2357112

+0

Неверная строка 'while True:' рядом с концом. Он находится на том же уровне, что и 'continue' над ним. Но 'continue' переходит к началу цикла, поэтому после его выполнения ничего не будет. – Barmar

ответ

0

Попробуйте отменить предыдущие семь строк кода на один уровень (код в этом while циклах). Это должно сделать отступы работать правильно. Кроме того, кажется, что перед оператором if есть лишнее пространство, которое вызывает ошибки. Удалите это пространство. Это сделало бы ту часть кода, как это:

while True: 
     number = player_move(the_board) 
     if (valid_move(the_board,number) == True) and not(board_full == False): 
      make_move(the_board,number,pla) 
      break 
     else: 
      print("Invalid Move, try again!") 
      continue 
     if (win(the_board,pla) == True): 
      print ("Yay, you won!!!") 
      printboard(the_board) 
      count = 1 
      break 
0

Вы должны отступа блок под while (True): последовательно. Например:

while True: 
    number = player_move(the_board) 
    if (valid_move(the_board,number) == True) and not(board_full == False): 
     make_move(the_board,number,pla) 
     break 
    else: 
     print("Invalid Move, try again!") 
      continue 

    if (win(the_board,pla) == True): 
     print ("Yay, you won!!!") 
     printboard(the_board) 
     count = 1 
     break 
    else: 
     turn = "comp" 
     printboard(the_board) 
     continue 
0

Проблема в том, что оператор if является одним отступом от остальной части кода. Вы хотите выровнять весь код, и ошибка должна исчезнуть.

while True: 
    number = player_move(the_board) 
    if (valid_move(the_board,number) == True) and not(board_full == False): 
     make_move(the_board,number,pla) 
     break 
    else: 
     print("Invalid Move, try again!") 
     continue 
    if (win(the_board,pla) == True): 
     print ("Yay, you won!!!") 
     printboard(the_board) 
     count = 1 
     break