Codecademy Battleships 7/19 python课程

时间:2014-05-14 17:31:51

标签: 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 个答案:

答案 0 :(得分:3)

random模块有两个函数,在给定范围的情况下生成随机整数。

  1. randint(A, B),返回一个整数X,例如A< = X< = B
  2. randrange(A, B),返回一个整数X,例如A< = X< B.这与范围函数的工作方式非常相似
  3. 主要区别在于第一个范围是关闭的,而第二个范围是从右边打开的。

    在您的示例中,randint(0, len(board))可能会返回len(board),这会引发IndexError,因为数组中的元素索引位于0 <= i < len(board)

    您可以使用更简洁的randrange(len(board))

答案 1 :(得分:2)

在Python中,数组从索引0开始。因此数组中的最后一项将有一个小于数组长度的索引。

例如,如果数组有三个项目,则您有项目[0],项目[1]。和项目[2]。如果您尝试了第[3]项,那么就会因为没有这样的对象而获得异常。