首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的程序会生成一个列表索引问题?

为什么我的程序会生成一个列表索引问题?
EN

Stack Overflow用户
提问于 2020-08-19 00:26:19
回答 2查看 56关注 0票数 2

我是编程新手,正在尝试用Pygame创建一款战舰游戏。我的游戏功能和AI与玩家的对比,目前我正在努力研究如何将AI的炸弹放到适当的位置。我已经创建了一个函数(bombs),它将grid[row][column]设置为2,如果单击它,它将输出"Boom“。如果我将和单个值设置为2,如第55行所示,但我希望随机设置炸弹,它就会起作用。

我游戏中处理人工智能炸弹的部分:

代码语言:javascript
运行
复制
import random

def bombs():
    for i in range(0,8):
        row = random.randint(1,8)
        column = random.randint(1,8)
        grid[row][column] = 2
        print(row,column)
        i = i+1
 
# Create a 2 dimensional array. A two dimensional array is simply a list of lists.
grid = []
for row in range(8):
    # Add an empty array that will hold each cell
    # in this row
    grid.append([])
    for column in range(0,8):
        grid[row].append(0)  # Append a cell

错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "C:\Users\hazza\OneDrive\Desktop\Python\CHECK.py", line 54, in <module>
    bombs()
  File "C:\Users\hazza\OneDrive\Desktop\Python\CHECK.py", line 9, in bombs
    grid[row][column] = 2
IndexError: list index out of range
EN

回答 2

Stack Overflow用户

发布于 2020-08-19 00:32:54

random.randint(a, b)生成一个随机整数N,使得一个<= N <= b.列表索引从0开始。

使用random.randrange在指定范围内生成随机列和行:

代码语言:javascript
运行
复制
row = random.randrange(8)
column = random.randrange(8)
grid[row][column] = 2

random.randrange的工作原理与range类似,但它不生成范围,它只返回指定范围内的随机数。

票数 2
EN

Stack Overflow用户

发布于 2020-08-19 00:32:32

你的grid有8个项目,索引从0到7(从零开始索引)。但是,random.randint(1,8)采用1到8之间的随机数,包括边界值。因此,如果随机数是8,您会得到这个索引超出范围的错误(您可以很容易地通过print在该行之前的值来调试它

将其更改为

代码语言:javascript
运行
复制
row = random.randint(0,7) # column the same
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63472822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档