CodeAcademy 舰队游戏 7/19 Python 课程

1 投票
2 回答
3264 浏览
提问于 2025-04-18 06:34
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模块里有两个函数可以在给定的范围内生成随机整数。

  1. randint(A, B),这个函数会返回一个整数X,满足A小于等于X,且X小于等于B。
  2. 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)),这样写会更简洁。

撰写回答