簡體   English   中英

我在使用與元組相關的 python 時遇到問題

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

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