2017-07-29 13 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") 

私は単純な遺伝的アルゴリズムベースのTic-Tac-Toeを作ろうとしています。なぜそれがクラッシュするのかわかりません。 私はそれがAutomated_Move関数のループにあると分かりました(それが役に立ちそうなら)私のプログラムがぶら下がっている理由

+1

:として

一つの可能​​な解決策は、メインループを修正するのですか? –

+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 

'#'要素は(Oにその要素を変更した後)boardである場合のみ、このループが壊れます。いくつかの反復の後、boardのすべての(対角の)要素は'O'になるので、ループは決して終了しません。あなたは右のみ、9つの可能なスポットの3をチェックしていることを実現

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

原因私は後で人がそれをやめることを可能にする関数を追加するつもりですAIの部分を動作させようとしています –

+0

@MorganHarrison 'Automated_Move()'ループの解析を追加しました。 –

+0

現在のプログラムでは、敗者が常に開始し、プログラムが継続的に実行され、プログラムが後で –

関連する問題