CodeAcademy 舰队游戏 7/19 Python 课程
def random_row(board):
return randint(0 , len(board) - 1)
def random_col(board):
return randint(0, len(board)-1)
我的问题是,为什么用(len(board) - 1)而不是len(board)?
2 个回答
2
在Python中,数组的索引是从0开始的。所以数组中的最后一个元素的索引会比数组的长度少1。
举个例子,如果数组里有三个元素,你会看到item[0]、item[1]和item[2]。如果你尝试访问item[3],就会出现错误,因为根本没有这个对象。
3
random模块里有两个函数可以在给定的范围内生成随机整数。
- randint(A, B),这个函数会返回一个整数X,满足A小于等于X,且X小于等于B。
- randrange(A, B),这个函数会返回一个整数X,满足A小于等于X,且X小于B。这个和range函数的工作方式很相似。
主要的区别在于,第一个范围是闭合的,也就是说A和B都包含在内;而第二个范围是开放的,B不包括在内。
在你的例子中,randint(0, len(board))
可能会返回len(board),这会导致出现IndexError
错误,因为数组的索引是从0开始的,范围是0 <= i < len(board)
。
你可以使用randrange(len(board))
,这样写会更简洁。