返回布尔值时出现语法错误

时间:2021-04-29 20:52:58

标签: python

我正在编写一个函数来检查井字游戏中的获胜者。

我的目的是在游戏中覆盖这些空间时返回 true 或 false 以确定获胜者。 它在第一个 or 之后返回一个 syntax error。写这个我哪里错了?

def is_winner(board_spaces, letter):
return 
(board_spaces[3] == letter and board_spaces[2] == letter and board_spaces[1] == letter) or
(board_spaces[1] == letter and board_spaces[4] == letter and board_spaces[7] == letter) or
(board_spaces[2] == letter and board_spaces[5] == letter and board_spaces[8] == letter) or
(board_spaces[3] == letter and board_spaces[6] == letter and board_spaces[9] == letter) or
(board_spaces[3] == letter and board_spaces[5] == letter and board_spaces[7] == letter) or
(board_spaces[1] == letter and board_spaces[5] == letter and board_spaces[9] == letter)

4 个答案:

答案 0 :(得分:0)

请从您的退货声明中删除输入

return (statement_1)or(statement_2)...
return (board_spaces[3] == letter and board_spaces[2] == letter and board_spaces[1] == letter) or
(board_spaces[1] == letter and board_spaces[4] == letter and board_spaces[7] == letter) or
(board_spaces[2] == letter and board_spaces[5] == letter and board_spaces[8] == letter) or
(board_spaces[3] == letter and board_spaces[6] == letter and board_spaces[9] == letter) or
(board_spaces[3] == letter and board_spaces[5] == letter and board_spaces[7] == letter) or
(board_spaces[1] == letter and board_spaces[5] == letter and board_spaces[9] == letter)

答案 1 :(得分:0)

你缺少一个括号

def is_winner(board_spaces, letter):
    return \
    (
    (board_spaces[3] == letter and board_spaces[2] == letter and board_spaces[1] == letter) or
    (board_spaces[1] == letter and board_spaces[4] == letter and board_spaces[7] == letter) or
    (board_spaces[2] == letter and board_spaces[5] == letter and board_spaces[8] == letter) or
    (board_spaces[3] == letter and board_spaces[6] == letter and board_spaces[9] == letter) or
    (board_spaces[3] == letter and board_spaces[5] == letter and board_spaces[7] == letter) or
    (board_spaces[1] == letter and board_spaces[5] == letter and board_spaces[9] == letter))

通过这些额外的括号,您可以对 return 语句说您给出一个最终答案,而不是在“a 或 b”之间进行选择

你也可以使用 \ 来继续下一行,让 python 知道你在语法中没有完成该行

答案 2 :(得分:0)

为避免出错,请将整个语句写在一行而不是换行符。

如果要换行,可以在换行前使用 \。看下面的代码。

def add(num1, num2):
    return num1 + \
            num2

print(add(10, 10))

答案 3 :(得分:0)

正如其他人所说,您不能像以前那样将语句分成多行。

我建议进行更易于阅读和编写的改进。索引列表不完整,因为它只是一个例子。

indices_to_match = [[1, 4, 7], [2, 5, 7], [3, 6, 9]]

def is_winner(board_spaces, letter):
    return any([
        all([board_spaces[space] == letter
             for space in row])
        for row in indices_to_match])

这样做的好处在于它将索引列表与代码的其余部分分开,使其更具可读性。

另请注意 Python 列表是从零开始的,所以第一个索引是 0。