插入错误消息时,列表索引超出范围

2024-05-15 00:25:06 发布

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

我希望this was wrong try again!在输入值不在板上时打印,但是不知怎么的,当我选择板外的值时,代码会中断,而不是显示打印的消息

    def legalMove(self):
            if self.board[startX][startY] != False:


    def playerMove(self,tile): 
                if self.legalMove(tile, x, y) == False:
                    continue
                else:
                    break
            else:
                print('this was wrong try again!.')
        return [x, y]

错误

if self.board[startX][startY] != ' ' or not self.isOnBoard(startX, startY): IndexError: list index out of range


Tags: selfboardfalseifdefthiselsetile
1条回答
网友
1楼 · 发布于 2024-05-15 00:25:06

您应该交换条件中的语句,这样您就不会出现这样的错误:

def legalMove(self,tile,isOnBoard,startX, startY):
    # swap the statements
    if not self.isOnBoard(startX, startY) or self.board[startX][startY] != ' ':
        print('this was wrong try again!')
        return False
    return True

尽管我建议你在playerMove方法中进行打印,这样你就可以重用legalMove方法,例如如果你以后要构建一个AI播放器的话

def isOnBoard(self, x, y):
    return 0 <= x < 8 and 0 <= y < 8


def legalMove(self, startX, startY): # remove arguments
    return self.isOnBoard(startX, startY) and self.board[startX][startY] != ' '


def playerMove(self,tile): 
    validMove = '0 1 2 3 4 5 6 7'.split()
    while True:
        move = input().lower()
        if len(move) == 2 and move[0] in validMove and move[1] in validMove:
            x = int(move[0])
            y = int(move[1])
            if not self.legalMove(x, y):
                print('this was wrong try again!')
                continue
            else:
                break
        else:
            print('this was wrong try again!.')
    return [x, y]

此外,Python允许将比较链接在一起,比如0 <= x < 8,这更为优雅

最后,虽然我可能错了,但我认为有效的移动应该只在07(包括在内)之间。所以validMove = '0 1 2 3 4 5 6 7'.split()

相关问题 更多 >

    热门问题