社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

我还是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
 
1480 次点击  
文章 [ 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]。