[英]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.