Py学习  »  Python

Python:如何修复这个if语句错误?

mckee.98 • 5 年前 • 1449 次点击  

我还是python新手,所以我想知道是否可以编写如下if语句:

def win_check(board, mark):

    for mark in board:
        if (mark == board [7] and mark == board [8] and mark == board [9]) or
            (mark == board [4] and mark == board [5] and mark == board [6]) or
            (mark == board [1] and mark == board [2] and mark == board [3]):
            print("you won 1") 
        elif (mark == board [7] and mark == board [4] and mark == board [1]) or
            (mark == board [8] and mark == board [5] and mark == board [2]) or
            (mark == board [9] and mark == board [6] and mark == board [3]):
            print("you won 2")
        elif (mark == board [7] and mark == board [5] and mark == board [3]) or
            (mark == board [9] and mark == board [5] and mark == board [1]) or
            (mark == board [1] and mark == board [2] and mark == board [3]):
            print("you  won 3")
        else:
            print ("game tied")

这是一个功能从一个井字游戏。当我试图运行这个函数时,它会给我一个错误

 File "<ipython-input-13-94777e972072>", line 4
    if (mark == board [7] and mark == board [8] and mark == board [9]) or
                                                                         ^
SyntaxError: invalid syntax

我不太清楚这意味着什么,需要什么,有人能在这方面帮助我,在我的方法上帮助我吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53718
 
1449 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Brian Bruggeman
Reply   •   1 楼
Brian Bruggeman    6 年前

只需在整个if表达式周围添加一个额外的括号。。。

if (
       ((a == b) and (b == c) and (c == d))
       or ((e == f) and (f == g) and (g == h))
       or ...
       ):
   # do something here
   print('Winner')

def detect_winner(win_value: str = 'o') -> bool:
    """Determines if current player won.

    Args:
        win_value: the value to check for a win; value of current player

    Returns:
        True if winner is detected otherwise False
    """
    # Anything within a parenthesis can allow for newlines and ignore
    #  generally considered "good" and "pythonic" whitespacing
    row_win = (
        all(cell == win_value for cell in mark[1:3])
        or all(cell == win_value for cell in mark[4:6])
        or all(cell == win_value for cell in mark[7:9])
        )
    col_win = (...)
    cross_win = (...)
    possible_wins = (row_win, col_win, cross_win)
    found_a_winner = True if any(possible_wins) else False
    return found_a_winner
eatmeimadanish
Reply   •   2 楼
eatmeimadanish    6 年前

你的问题是if语句需要是一个连续的行。或者python将下一行视为新代码。您需要一个反斜杠来转义行尾并继续其下的行。

for mark in board:
    if (mark == board[7] and mark == board[8] and mark == board[9]) \
            or (mark == board[4] and mark == board[5] and mark == board[6]) \
            or (mark == board[1] and mark == board[2] and mark == board[3]):

        print("you won 1")

    elif (mark == board[7] and mark == board[4] and mark == board[1]) \
            or  (mark == board[8] and mark == board[5] and mark == board[2]) \
            or  (mark == board[9] and mark == board[6] and mark == board[3]):
        print("you won 2")
    elif (mark == board [7] and mark == board[5] and mark == board[3]) \
            or  (mark == board[9] and mark == board[5] and mark == board[1]) \
            or (mark == board[1] and mark == board[2] and mark == board[3]):
        print("you  won 3")
    else:
        print ("game tied")
hodisr
Reply   •   3 楼
hodisr    6 年前

不能在语句前结束行,也不能在语句末尾加“\”。 正确的方法是:

for mark in board:
    if (mark == board[7] and mark == board[8] and mark == board[9]) or\
            (mark == board[4] and mark == board[5] and mark == board[6]) or\
            (mark == board[1] and mark == board[2] and mark == board[3]):
        print("you won 1") ...

我还删除了索引板之前的间距,所以它应该是板[I]而不是板[I]。