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

Posted

技术标签:

【中文标题】在列表索引超出范围时插入错误消息【英文标题】:inserting faulty message whilst list index is out of range 【发布时间】:2017-08-05 21:11:05 【问题描述】:

我希望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: 列表索引超出范围

【问题讨论】:

In and drag[1] in validMove : ... move[1] 是什么意思? 是的,对不起@MrGoldbeere! 【参考方案1】:

你应该交换条件中的语句,这样你就不会得到这样的错误:

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 &lt;= x &lt; 8

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

【讨论】:

是的,我只是简化了一点,实际上管理员可以将棋盘大小从 4 更改为 10,这就是为什么 validMove,我像你一样改变了,但现在有效的移动也得到了留言this was wrong try again ... @Aurum:你能举一个这个消息有效的移动示例吗? 我将发布游戏板的照片和前任 @Aurum:我做了一些额外的修改。您使用两个参数调用 legalMove,而需要四个参数,等等。 @Aurum: 但01 是错误的,因为01 上没有任何内容。这是您的要求之一(基于功能)。

以上是关于在列表索引超出范围时插入错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 索引错误:列表索引超出范围

Python - 索引错误 - 列表索引超出范围

findspark.init() 列表索引超出范围错误

在假设函数中执行数据库查询时列表索引超出范围

findspark.init() IndexError: 列表索引超出范围错误

为啥在遍历列表矩阵时出现列表索引超出范围错误?