[英]I'm having a problem with python in relation to tuples
我正在嘗試創建一個游戲(tic tac toe),我必須使用 3 個元組創建一個板(稱為tab
),每個元組有 3 個元素,代表一條線上的一個位置。 “X”由數字 1 表示,“O”由 -1 表示,空白由 0 表示。我試圖創建一個接收參數的函數(在這種情況下,板是參數)並說它代表一個有效的董事會與否,但它總是給我錯誤的答案(在這種情況下說它是錯誤的),我不知道為什么。
tab = ((1, -1, 0), (0, 0, 1), (0, -1, 1))
def eh_tabuleiro(tab):
if len(tab) == 3:
if len(tab[0]) == 3 and len(tab[1]) == 3 and len(tab[2]) == 3:
if tab[0][0] or tab[0][1] or tab[0][2] or tab[1][0] or tab[1][1] or tab[1][2] or tab[2][0] or tab[2][1] or tab[2][2] != 1 or -1 or 0:
return False
else:
return True
else:
return False
else:
return False
要使板有效,它需要是一個包含三個元組和每個較小元組內的 3 個元素的元組。 如果它有 2 個元素,或者不是 1/-1/0 有一個“-1”或任何其他東西,則函數返回 False。 正如你所看到的,我的電路板是正確的,但它說它不是。 誰能幫我?
問題在於長鏈or
語句。 比較以下內容:
if 1 or 2 == 3: # Python reads this as `if 1 or (2 == 3):`
print('oops')
# prints 'oops'
if (1 == 3) or (2 == 3):
print('oops')
# does not print
對更具可讀性的實現的建議:
def is_valid(tab):
if not isinstance(tab, tuple):
return False
if len(tab) != 3:
return False
for row in tab:
if not isinstance(row, tuple):
return False
if len(row) != 3:
return False
for element in row:
if element not in (-1, 0, 1):
return False
return True
不要試圖發明一種新的語法。 你(或我)能猜到什么並不重要,重要的是 Python 理解什么。
這一行:
if tab[0][0] or tab[0][1] or tab[0][2] or tab[1][0] or tab[1][1] or tab[1][2] or tab[2][0] or tab[2][1] or tab[2][2] != 1 or -1 or 0:
一旦or
之間的元素之一為True
,並且整數值 1 或 -1 在布爾上下文中給出 True ,則將返回 True 。
您想知道所有值產生的集合是否是 (0, 1, -1) 的子集。 只需測試一下:
...
if (set(tab[0]) | set(tab[1]) | set(tab[2])).issubset({1, 0, -1}):
return True
else:
return False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.