在列表索引超出范围时插入错误消息
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: 列表索引超出范围
【问题讨论】:
Inand 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 <= x < 8
。
最后,虽然我可能是错的,但我认为有效的移动应该只在0
到7
(包括在内)之间。所以validMove = '0 1 2 3 4 5 6 7'.split()
。
【讨论】:
是的,我只是简化了一点,实际上管理员可以将棋盘大小从 4 更改为 10,这就是为什么validMove
,我像你一样改变了,但现在有效的移动也得到了留言this was wrong try again
...
@Aurum:你能举一个这个消息有效的移动示例吗?
我将发布游戏板的照片和前任
@Aurum:我做了一些额外的修改。您使用两个参数调用 legalMove
,而需要四个参数,等等。
@Aurum: 但01
是错误的,因为01
上没有任何内容。这是您的要求之一(基于功能)。以上是关于在列表索引超出范围时插入错误消息的主要内容,如果未能解决你的问题,请参考以下文章