while循环的多个条件

2024-06-25 22:53:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个函数,检查跳棋棋子是否能跳,当它不能跳的时候就停下来,所以我写了:

def checkJump(x,y,count,incr):
player = board[x][y]
count = 0

jumpleft = (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7

jumpright = (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7

while jumpleft or jumpright:    
    while jumpleft:
        x += incr*2
        y += incr*2
        count += 1
        jumpleft = (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7

    while jumpright:
        x += incr*2
        y -= incr*2
        count += 1
        jumpright = (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7

    jumpleft = (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7

    jumpright = (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7
return x,y,count    

但是,检查的条件过于冗余,多个条件与and连接。有没有更好的方法来为while循环编写多个条件,而不是仅仅用and链接它们?谢谢你的回答


Tags: orand函数boardreturndefcount条件
2条回答

既然你对游戏编程感兴趣,我推荐你玩pygame。如果您不感兴趣,我建议用条件“If语句”替换一些“and”赋值运算符。它们的用途相同,可读性更强。你知道吗

也许您可以定义两个返回True或False的检查函数:

def jumpleft(x, y, board, incr):
    return (board[x+incr][y+incr] != player) and (board[x+incr][y+incr] != '') and (board[x+(incr*2)][y+(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y+(incr*2) <= 7

def jumpright(x, y, board, incr):
    return (board[x+incr][y-incr] != player) and (board[x+incr][y-incr] != '') and (board[x+(incr*2)][y-(incr*2)] == '') and 0 <= x <= 7 and 0 <= y <= 7 and 0 and 0 <= x+incr <= 7 and 0 <= x+(incr*2) <= 7 and 0 <= y-(incr*2) <= 7

打电话给他们就知道了。这将使您的代码更具可读性。你知道吗

相关问题 更多 >