首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中的5x10数组网格中随机生成元素?

如何在Python中的5x10数组网格中随机生成元素?
EN

Stack Overflow用户
提问于 2022-01-10 15:14:21
回答 2查看 204关注 0票数 0

因此,我正在开发一个简单的基于文本的游戏,类似于pacman,其中字母'c‘是玩家使用用户输入控制的字符。在5x10网格中,由o代表的10枚“硬币”应该是随机生成的。另一方面,网格是由符号“-”组成的。

玩家的图标,以及硬币应该随机生成。

我为单行编写了一个简单的解决方案,在其中,我从列表中随机弹出一个元素,取出相同的索引,插入一个硬币。下面是代码:

代码语言:javascript
复制
array=['-','-','-','-','-','-','-','-','-','-',]
separator = ' '

def pop():
    pos = random.randint(0,9)
    return pos

array.pop(pop())
array.insert(pop(), 'o')
print (separator.join(array))

现在我只需要把它变成一个5x10网格。问题是,我不知道如何在5行数组中随机插入11个元素(10个硬币和播放器图标)。帮助!

EN

回答 2

Stack Overflow用户

发布于 2022-01-10 15:20:17

与其使用自定义的pop()函数,不如使用两次:

代码语言:javascript
复制
array.pop(pop()) 
array.insert(pop(), 'o')

您可以使用:

代码语言:javascript
复制
index = pop()
array.pop(index)
array.insert(index, 'o')

或者更好的解决办法是:

代码语言:javascript
复制
index = pop()
array[index] = 'o'

random.sample()

代码语言:javascript
复制
import numpy as np
from random import sample

indexes = list(range(50))
chosen = sample(indexes, k=11)

grid = np.array(["-"] * 50)

grid[chosen[0]] = "c"
for i in range(10):
    grid[chosen[i+1]] = "o"

grid = grid.reshape((5, 10))
print(grid)

k=11指的是一个字符(c)和10个硬币(o)

票数 0
EN

Stack Overflow用户

发布于 2022-01-10 15:31:29

因此,首先我们将使用宽度为5和高度为10的列表生成一个2d数组:

代码语言:javascript
复制
import random

w, h = 5, 10
two_d_array = [['-' for x in range(w)] for y in range(h)]

接下来,由于您希望在不选择相同位置的情况下随机放置这些项两次,因此我们希望生成一个不具有重复值的随机示例:

代码语言:javascript
复制
samples = random.sample(range(w * h), 10)

然后,对于每一个样本值,我们将取样本值除以宽度的整数值,然后通过将样本的其余部分除以宽度来得到列值。用你想要的值来代替。

代码语言:javascript
复制
for s in samples:
    row = int(s/w)
    column = s % w
    two_d_array[row][column] = 'o'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70654643

复制
相关文章

相似问题

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