2014-10-01 71 views
-1

我正在編寫一個程序來玩連接四個Python,我不確定如何解決在某些區域拋出的「預期縮進塊」錯誤。任何時候我嘗試運行[row] [col]部分,都會引發錯誤。我使用的一些示例代碼,以幫助我發展我自己和這裏的我使用的是什麼:預計Python遊戲中的縮進塊

import random 

def winner(board): 
"""This function accepts the Connect 4 board as a parameter. 
If there is no winner, the function will return the empty string "". 
If the user has won, it will return 'X', and if the computer has 
won it will return 'O'.""" 

# Check rows for winner 
for row in range(6): 
for col in range(3): 
    if (board[row][col] == board[row][col + 1] == board[row][col + 2] ==\ 
     board[row][col + 3]) and (board[row][col] != " "): 
    return board[row][col] 

# Check columns for winner 
for col in range(6): 
for row in range(3): 
    if (board[row][col] == board[row + 1][col] == board[row + 2][col] ==\ 
     board[row + 3][col]) and (board[row][col] != " "): 
     return board[row][col] 

# Check diagonal (top-left to bottom-right) for winner 

for row in range(3): 
for col in range(4): 
    if (board[row][col] == board[row + 1][col + 1] == board[row + 2][col + 2] ==\ 
     board[row + 3][col + 3]) and (board[row][col] != " "): 
     return board[row][col] 


# Check diagonal (bottom-left to top-right) for winner 

for row in range(5, 2, -1): 
for col in range(3): 
    if (board[row][col] == board[row - 1][col + 1] == board[row - 2][col + 2] ==\ 
     board[row - 3][col + 3]) and (board[row][col] != " "): 
     return board[row][col] 

# No winner: return the empty string 
return "" 

def display_board(board): 

print " 1 2 3 4 5 6 7" 
print "1: " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " | " + board[0][3] + " | " + board[0][4] + " | " + board[0][5] + " | " + board[0][6] + " | " + board[0][7] 
print " ---+---+---+---+---+---+---" 
print "2: " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " | " + board[1][3] + " | " + board[1][4] + " | " + board[1][5] + " | " + board [1][6] + " | " + board [1][7] 
print " ---+---+---+---+---+---+---+" 
print "3: " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " | " + board[2][3] + " | " + board [2][4] + " | " + board [2][5] + " | " + board [2][6] + " | " + board [2][7] 
print " ---+---+---+---+---+---+---+" 
print "4: " + board[3][0] + " | " + board[3][1] + " | " + board[3][2] + " | " + board[3][3] + " | " + board [3][4] + " | " + board [3][5] + " | " + board [3][6] + " | " + board [3][7] 
print " ---+---+---+---+---+---+---+" 
print "5: " + board[4][0] + " | " + board[4][1] + " | " + board[4][2] + " | " + board[4][3] + " | " + board [4][4] + " | " + board [4][5] + " | " + board [4][6] + " | " + board [4][7] 
print " ---+---+---+---+---+---+---+" 
print "6: " + board[5][0] + " | " + board[5][1] + " | " + board[5][2] + " | " + board[5][3] + " | " + board [5][4] + " | " + board [5][5] + " | " + board [5][6] + " | " + board [5][7] 
print 

def make_user_move(board): 

try:  
valid_move = False 
while not valid_move: 
    col = input("What col would you like to move to (1-7):") 
    for row in range (6,0,-1): 
     if (1 <= row <= 6) and (1 <= col <= 7) and (board[row-1][col-1] == " "): 
      board[row-1][col-1] = 'X' 
      valid_move = True 
      break 
    else: 
     print "Sorry, invalid square. Please try again!\n" 

except NameError: 
print "Only numbers are allowed." 

except IndexError: 
print "You can only select columns from (1-7), and rows from (1-6)." 

def make_computer_move(board): 

#代碼需要在這裏... valid_move =假 而不是valid_move: 行= random.randint (0,5) col = random.randint(0,6) 用於行範圍(5,0,-1): if board [row] [col] ==「」: board [row] [山口] = 「O」 valid_move =真 斷裂

def main(): 


free_cells = 42 
users_turn = True 
count = 1 
ttt_board = [ [ " ", " ", " ", " ", " ", " "," ", " "], [ " ", " ", " ", " ", " "," ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "] ] 

print "\nHALL OF FAME \n" 

try: 
hall_of_fame = open("HallOfFame.txt", 'r') 

for name in hall_of_fame: 
    print str(count) + ".", name 
    print 
    count += 1 

hall_of_fame.close() 

except IOError: 
print "No Human Has Ever Beat Me.. mwah-ha-ha-ha!\n" 

choice = raw_input("Would you like to go first? (y or n): ") 

if (choice == 'y' or choice=='Y'): 
users_turn = True 


elif (choice == 'n' or choice =='N') : 
users_turn = False   

else: 
print 'invalid input' 

while not winner(ttt_board) and (free_cells > 0): 
display_board(ttt_board) 
if users_turn: 
    make_user_move(ttt_board) 
    users_turn = not users_turn 
else: 
    make_computer_move(ttt_board) 
    users_turn = not users_turn 
free_cells -= 1 

display_board(ttt_board) 
if (winner(ttt_board) == 'X'): 
print "You Won!" 
print "Your name will now be added to the Hall of Fame!" 

hall_of_fame = open("HallOfFame.txt", 'a') 
name = raw_input("Enter your name: ") 
hall_of_fame.write(name+ '\n') 
print "Your name has been added to the Hall of Fame!" 

hall_of_fame.close() 

print "\nGAME OVER" 
elif (winner(ttt_board) == 'O'): 
print "The Computer Won!" 
print "\nGAME OVER" 
else: 
print "Stalemate!" 
print "\nGAME OVER \n" 

#start the game 

main() 
+2

縮進在Python中很重要。正如現在所寫,這是不正確的格式。 – davidism 2014-10-01 03:51:35

+0

@davidism縮進是錯誤的,因爲這是問題的一部分:)。 (雖然他們可能寫了一些錯誤。) – W1ll1amvl 2014-10-01 04:39:03

+0

@ W1ll1amvl我的基本觀點是,我們不是一個錯字糾正服務。事實上,這有一個特別的原因。如果有關於此代碼的任何有效問題,必須先糾正。 – davidism 2014-10-01 04:58:44

回答

2

它看起來像你沒有縮進你的for循環:

for row in range(6): for col in range(3): if (board[row][col] == board[row][col + 1] == board[row][col + 2] ==\ board[row][col + 3]) and (board[row][col] != " "): return board[row][col]

:表示對下一行縮進的需要。

+0

不幸的是,還有很多隻是缺少縮進的for循環:) – TML 2014-10-01 05:23:10

1

由於無法解釋的原因,有很多地方的縮進只是普通的缺失。正如@davidism所提到的,python中的縮進用於表示嵌套層次;所以這個代碼在當前狀態下是完全不可用的。

這裏是我嘗試讓GUESS知道你的代碼是做什麼的,所以你可以瞭解空白的所有地方,但它只是在你的代碼中缺少。

import random 


def winner(board): 
    for row in range(6): 
     for col in range(3): 
      if (board[row][col] == board[row][col + 1] == board[row][col + 2] == \ 
         board[row][col + 3]) and (board[row][col] != " "): 
       return board[row][col] # Check columns for winner 

    for col in range(6): 
     for row in range(3): 
      if (board[row][col] == board[row + 1][col] == board[row + 2][col] == \ 
        board[row + 3][col]) and (board[row][col] != " "): 
       return board[row][col] 

# Check diagonal (top-left to bottom-right) for winner 

    for row in range(3): 
     for col in range(4): 
      if (board[row][col] == board[row + 1][col + 1] == board[row + 2][col + 2] == \ 
        board[row + 3][col + 3]) and (board[row][col] != " "): 
       return board[row][col] 


# Check diagonal (bottom-left to top-right) for winner 

    for row in range(5, 2, -1): 
     for col in range(3): 
      if (board[row][col] == board[row - 1][col + 1] == board[row - 2][col + 2] == \ 
        board[row - 3][col + 3]) and (board[row][col] != " "): 
       return board[row][col] 

# No winner: return the empty string 
    return "" 


def display_board(board): 


    print " 1 2 3 4 5 6 7" 
    print "1: " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " | " + board[0][3] + " | " + board[0][ 
     4] + " | " + board[0][5] + " | " + board[0][6] + " | " + board[0][7] 
    print " ---+---+---+---+---+---+---" 
    print "2: " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " | " + board[1][3] + " | " + board[1][ 
     4] + " | " + board[1][5] + " | " + board[1][6] + " | " + board[1][7] 
    print " ---+---+---+---+---+---+---+" 
    print "3: " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " | " + board[2][3] + " | " + board[2][ 
     4] + " | " + board[2][5] + " | " + board[2][6] + " | " + board[2][7] 
    print " ---+---+---+---+---+---+---+" 
    print "4: " + board[3][0] + " | " + board[3][1] + " | " + board[3][2] + " | " + board[3][3] + " | " + board[3][ 
     4] + " | " + board[3][5] + " | " + board[3][6] + " | " + board[3][7] 
    print " ---+---+---+---+---+---+---+" 
    print "5: " + board[4][0] + " | " + board[4][1] + " | " + board[4][2] + " | " + board[4][3] + " | " + board[4][ 
     4] + " | " + board[4][5] + " | " + board[4][6] + " | " + board[4][7] 
    print " ---+---+---+---+---+---+---+" 
    print "6: " + board[5][0] + " | " + board[5][1] + " | " + board[5][2] + " | " + board[5][3] + " | " + board[5][ 
     4] + " | " + board[5][5] + " | " + board[5][6] + " | " + board[5][7] 
    print 


def make_user_move(board):  
    try: 
     valid_move = False 
     while not valid_move: 
      col = input("What col would you like to move to (1-7):") 
      for row in range(6, 0, -1): 
       if (1 <= row <= 6) and (1 <= col <= 7) and (board[row - 1][col - 1] == " "): 
        board[row - 1][col - 1] = 'X' 
        valid_move = True 
        break 
      else: 
       print "Sorry, invalid square. Please try again!\n" 
    except NameError: 
     print "Only numbers are allowed." 

    except IndexError: 
     print "You can only select columns from (1-7), and rows from (1-6)." 


def make_computer_move(board): 
    # Code needed here... 
    valid_move = False 
    while not valid_move: 
     row = random.randint(0, 5) 
     col = random.randint(0, 6) 
     for row in range(5, 0, -1): 
      if board[row][col] == " ": 
       board[row][col] = "O" 
       valid_move = True 
       break 


def main(): 
    free_cells = 42 
    users_turn = True 
    count = 1 
    ttt_board = [[" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], 
       [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "], 
       [" ", " ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " ", " "]] 

    print "\nHALL OF FAME \n" 

    try: 
     hall_of_fame = open("HallOfFame.txt", 'r') 

     for name in hall_of_fame: 
      print str(count) + ".", name 
      print 
      count += 1 

     hall_of_fame.close() 

    except IOError: 
     print "No Human Has Ever Beat Me.. mwah-ha-ha-ha!\n" 

    choice = raw_input("Would you like to go first? (y or n): ") 

    if (choice == 'y' or choice == 'Y'): 
     users_turn = True 


    elif (choice == 'n' or choice == 'N'): 
     users_turn = False 

    else: 
     print 'invalid input' 

    while not winner(ttt_board) and (free_cells > 0): 
     display_board(ttt_board) 
     if users_turn: 
      make_user_move(ttt_board) 
      users_turn = not users_turn 
     else: 
      make_computer_move(ttt_board) 
      users_turn = not users_turn 
     free_cells -= 1 

    display_board(ttt_board) 
    if (winner(ttt_board) == 'X'): 
     print "You Won!" 
     print "Your name will now be added to the Hall of Fame!" 

     hall_of_fame = open("HallOfFame.txt", 'a') 
     name = raw_input("Enter your name: ") 
     hall_of_fame.write(name + '\n') 
     print "Your name has been added to the Hall of Fame!" 

     hall_of_fame.close() 

     print "\nGAME OVER" 
    elif (winner(ttt_board) == 'O'): 
     print "The Computer Won!" 
     print "\nGAME OVER" 
    else: 
     print "Stalemate!" 
     print "\nGAME OVER \n" 

# start the game 

main()