我正在尝试修改一个python脚本,该脚本为Conway的人生游戏建模。其中,X个列和Y个行中的一组单元分别被赋予一个值,该值确定它们将根据邻居的状态在活动或休眠两种状态之间切换。
现在,这些单元格的初始值由该定义定义,该定义引用了用户设置的多个变量。(这不是完整的剧本,只是我认为相关的内容)
def randomizeArray(intLength,intWidth):
arr = []
for j in range(intWidth):
arri = []
for i in range(intLength):
rnd =random.random()
arri.append(rnd)
arr.append(arri)
print rnd
return arr
def Main():
intLength = rs.GetInteger("how many in x",30)
intWidth = rs.GetInteger("how many in y",30)
intGen = rs.GetInteger("how many generations",40)
strStack = rs.GetString ("should I stack the generations", "yes", ["yes", "no"])
crvs = rs.GetObjects("select the crvs",4)
thres = rs.GetReal("type the threshold to voxelize",1)
allValues = []
arrValues = randomizeArray(intLength,intWidth)
for i in range(40):
arrValues = applyGOL(arrValues)
allValues.append(arrValues)
#arrMeshes = render(arrValues,-1, strStack)
for i in range(intGen-1):
arrValues = applyGOLCrvs(arrValues, i, crvs)
allValues.append(arrValues)
"""
if strStack == "no" :
update(arrMeshes, arrValues)
else :
render(arrValues,i, strStack)
"""
myVoxels = voxels(intLength,intWidth,intGen, allValues)
myVoxels.voxelize(thres)
#Call DeleteObjects2dArray(arrMeshes)
Main()
我想做的是将random.random函数替换为一个我可以自己设置的值的.txt文件。
这就是我到目前为止提出的
def selectedArray(intLength,intWidth):
arr = []
for j in range(intWidth):
arri = []
for i in range(intLength):
selected = open('C:UsersIAmADogDocumentsThesisScriptsArrayValues2.txt','r')
lines = selected.read().split(',')
arri.append(lines)
arr.append(arri)
return arr
但是,当运行时,它会给我一个错误,说"消息:不支持+的操作数类型:'int'和'list'">
.txt文件是这样设置的[%1,.1,.9,.9,…etc]
关于为什么会发生这种情况,有什么建议吗?完整的代码可以在这里找到。https://stackoverflow.com/questions/22138217/assistance-with-python-gol-script
您对文本文件格式的描述相当粗略,因此我假设每一行都用一个开始和结束的方括号表示,各个值用逗号分隔,周围有可选的空格。这意味着第一个字符和最后两个字符(还有一个换行符)应该被忽略。我的文件是这样的:
[1, 3, 5, 7, 9]
[3, 5, 7, 9, 11]
[5, 7, 9, 11, 13]
下面的代码根据文件的维度生成数组,而不是使用设置值,但希望这能让您走上正轨。
def selectedArray(intLength,intWidth):
arr = []
selected = open('ArrayValues2.txt','r')
for line in selected:
values = [float(f.strip()) for f in line[1:-2].split(',')]
arr.append(values)
return arr
for row in selectedArray(3, 5):
print(row)
输出为
[1.0, 3.0, 5.0, 7.0, 9.0]
[3.0, 5.0, 7.0, 9.0, 11.0]
[5.0, 7.0, 9.0, 11.0, 13.0]
首先,您肯定不想在循环中打开文本文件。在开始循环之前,打开文本文件并将数据读取到变量中。
其次,您看到的错误似乎不在您发布的代码部分,但很可能是由于没有正确解析文件中的数据。当您应该添加一个数字时,您正在.append
添加一个完整的项目列表。
如果文件只是一行逗号分隔的值(末尾有[]),那么您需要去掉[],在逗号上拆分(就像您所做的那样),并将每个字符串转换为浮点值。然后,您需要一次添加一个项目,而不是一次添加所有项目。