检查列表中的值是否已从原始值更改且不应再次更改时出现问题

  • 本文关键字:问题 是否 列表 原始 python
  • 更新时间 :
  • 英文 :


我正在制作一个游戏,它生成一个项目并将其随机放置在显示的列表中。当我运行代码时,它偶尔会将随机项放置在一个单元格上,该单元格中已经放置了一个随机项。如何修复我的代码,使其不允许在单元格已经被修改的情况下进行修改?我使用显示列表和检查列表来跟踪修改单元格的位置。

这是我目前拥有的:

import os,random
row,col = 10,13
x,y = 0,0
item_grid = [['33[33m[%d,%d]33[m' % (j,i) for i in range(row)] for j in range(col)]
item_placed = [['empty' for i in range(row)] for j in range(col)]
iron = [
['33[90m[ ]33[m','33[90m[ ]33[m'],['33[90m[ ]33[m','33[90m[ ]33[m']
]
test_sphere = [['33[92m[   ]33[m' for i in range(2)] for j in range(2)]
g_sphere = [
['33[92m[T,L]33[m','33[92m[T,R]33[m'],
['33[92m[B,L]33[m','33[32m[B,R]33[m']
]
def item_placing():
item_number = random.randint(2,4)
print(item_number)
taken = []
for i in range(item_number):
placing_hidden_items = True

while placing_hidden_items:
item = test_sphere#g_sphere # random item to be placed
count = 0
a = random.randint(0,row-1)
b = random.randint(0,col-1)

ba = (b-1,a-1)
for i in range(len(item)):
for j in range(len(item)):
if count == len(item): placing_hidden_items = False

if (b-len(item) >= 0) and (a-len(item) >= 0):
if item_placed[(b-len(item))+i][(a-len(item)+j)] == 'full ':
print('error')
count = 0
break

elif (item_placed[(b-len(item))+i][(a-len(item)+j)] == 'empty'):

count += 1

taken.append(ba)      

for i in range(len(item)):
for j in range(len(item)):
if ba in taken:
if (item_placed[(b-len(item))+i][(a-len(item))+j] == 'empty'):

item_grid[(b-len(item))+i][(a-len(item))+j] = item[i][j]
if (item_grid[(b-len(item))+i][(a-len(item))+j] == '33[33m[ ]33[m'):
item_placed[(b-len(item))+i][(a-len(item))+j] = 'empty'
else:
item_placed[(b-len(item))+i][(a-len(item))+j] = 'full '
print(taken)
item_placing()
for i in range(col):
for j in range(row):
print(item_grid[i][j], end = ' ')
print()
for i in range(col):
for j in range(row):
print(item_placed[i][j], end = ' ')
print()

您要放置多少个项目?你可以构建一个网格中所有可能位置的迭代,然后使用找到n个不同但随机的位置

import itertools
import random
row = 10
col = 10
N = 5
positions = sorted(itertools.product(range(row), range(col)))
random.sample(positions, N)

有关itertools模块的更多信息:https://docs.python.org/3/library/itertools.html

有关random.sample函数的更多信息:https://docs.python.org/3/library/random.html#random.sample

最新更新