2017-07-29 69 views
0
from random import * 

IQ = [] 
row1 = ["#", "#", "#"] 
row2 = ["#", "#", "#"] 
row3 = ["#", "#", "#"] 
board = [row1, row2, row3] 


def Display_Board(): 
    print(row1[0],"|", row1[1], "|", row1[2]) 
    print("----------") 
    print(row2[0],"|", row2[1], "|", row2[2]) 
    print("----------") 
    print(row3[0],"|", row3[1], "|", row3[2]) 

def Automated_Move(board): 
    while True: 
     RandomMove = randint(0,2) 
     if board[RandomMove][RandomMove] == "#": 
      board[RandomMove][RandomMove] = "O" 
      break 
     elif board[RandomMove][RandomMove] != "#": 
      pass 

while True: 
    #print(IQ) 
    Display_Board() 
    Row = int(input("Row: ")) - 1 
    Col = int(input("Col: ")) - 1 
    if board[Row][Col] != "X" and board[Row][Col] != "O": 
     board[Row][Col] = "X" 
     IQ.append(Row) 
     IQ.append(Col) 
    elif board[Row][Col] == "X" or board[Row][Col] == "O": 
     print("This is already Taken") 
     pass 

    Automated_Move(board) 
    print("\n") 

我想做一個簡單的基於遺傳算法的井字遊戲,我不知道它爲什麼會崩潰。 我發現它在Automated_Move函數的循環中(如果有幫助的話)爲什麼我的程序掛起

+1

你會意識到,你只檢查了9個可能點3,對吧? –

+0

如果它的崩潰,崩潰的輸出將是有益的 –

+0

它沒有崩潰,它只是掛起,不會做任何事情,我認爲它會把它當作一個網格,就像那樣 –

回答

0

您的主循環永遠不會結束。有中沒有break

while True: 
    #print(IQ) 
    Display_Board() 
    Row = int(input("Row: ")) - 1 
    Col = int(input("Col: ")) - 1 
    if board[Row][Col] != "X" and board[Row][Col] != "O": 
     board[Row][Col] = "X" 
     IQ.append(Row) 
     IQ.append(Col) 
    elif board[Row][Col] == "X" or board[Row][Col] == "O": 
     print("This is already Taken") 
     pass 

    Automated_Move(board) 
    print("\n") 

而且你Automated_Move()while循環也遲早會進入一個永遠的循環。

def Automated_Move(board): 
    while True: 
     RandomMove = randint(0,2) 
     if board[RandomMove][RandomMove] == "#": 
      board[RandomMove][RandomMove] = "O" 
      break 
     elif board[RandomMove][RandomMove] != "#": 
      pass 

該環路僅中斷中是否存在一個board元件'#'(即元件改變至O後)。經過多次迭代後,board的所有(對角線)元素將爲'O',因此循環將永不退出。

一個可能的解決方案是修改主迴路爲:

if any(['#' in r for r in board]): 
    Automated_Move(board) 
else: 
    break 
+0

原因我將在稍後添加一個函數,允許此人退出,因此我現在只是讓AI的一部分工作 –

+0

@MorganHarrison我添加了一個對你的'Automated_Move()'循環的分析。 –

+0

使用當前程序我擁有它,以便失敗者將始終啓動,以便程序可以連續運行並允許程序稍後學習 –