簡體   English   中英

我正在嘗試編寫 Tic-Tac-Toe 游戲,但遇到了這個問題

[英]I'm trying to write a Tic-Tac-Toe game, but I run into this problem

正如我剛才所說,我正在編寫一個井字游戲,但發生了一個我仍然無法修復的錯誤。 錯誤本身涉及檢查玩家是否獲勝。 它沒有顯示明確的錯誤消息,但它無法按我希望的方式工作。

我首先列出了所有不同的獲勝可能性。 它們看起來像這樣:

gridwintest = [[True, True, True,
                None, None, None,
                None, None, None],

               [None, None, None,
                True, True, True,
                None, None, None],
               
               [None, None, None,
                None, None, None,
                True, True, True],
               
               
               
               [True, None, None,
                True, None, None,
                True, None, None],
               
               [None, True, None,
                None, True, None,
                None, True, None],
               
               [None, None, True,
                None, None, True,
                None, None, True],
               
               
               
               [True, None, None,
                None, True, None,
                None, None, True],
               
               [None, None, True,
                None, True, None,
                True, None, None],
               ]

處理它們的函數如下所示:

def check_grid(grid,check):
    global gridwintest
    
    gridvl = []
    for item in grid:
        if item == check:
            gridvl.append(True)
        else:
            gridvl.append(None)
    correct = True
    for chkgrid in gridwintest:
        for i in range(len(chkgrid)-1):
            if not (chkgrid[i] == gridvl[i] or chkgrid[i] == None):
                correct = False
    return correct

使用該函數的代碼是:

if check_grid(gridvl, invcurrmode):
        print("You won, "+currmode+"!")
        quit()
    elif check_grid(gridvl, currmode):
        print("Try again, "+currmode+".")
        quit()

但是“check_grid”函數的返回值始終為 false,即使我在該函數中記錄了每一行的輸出,它似乎實際上應該為 true。

你可以通過減少來簡化一點

    correct = True
    for chkgrid in gridwintest:
        for i in range(len(chkgrid)-1):
            if not (chkgrid[i] == gridvl[i] or chkgrid[i] == None):
                correct = False

    for chkgrid in gridwintest:
        if chkgrid == gridvl:
                return True
    return False

因為 Python 允許與==進行有序列表比較

那也應該解決您的錯誤。 not (chkgrid[i] == None)將對每個獲勝網格中的三個True值中的任何一個求值為True

編輯:主持人在上面的評論中發布了一個很好的鏈接 我會強調它的底線:“在編寫方法主體之前為方法編寫規范、測試用例、前提條件、后置條件和斷言”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM