Python:替换随机。随机使用.txt文件

2024-06-28 21:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试修改一个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()

我想做的是更换随机。随机函数的一个.txt文件的值,我可以自己设置。你知道吗

这就是我目前的想法

def selectedArray(intLength,intWidth):
    arr = []
    for j in range(intWidth):
        arri = []
        for i in range(intLength):
            selected = open('C:\Users\IAmADog\Documents\Thesis\Scripts\ArrayValues2.txt','r')
            lines = selected.read().split(',')
            arri.append(lines)
        arr.append(arri)
    return arr

但是,当这个运行时,它会给我一个错误,说“消息:不支持+:'int'和'list'的操作数类型”

.txt文件的设置如下[.1,.1,.9,.9,。。。。等]

有什么关于为什么会这样的建议吗? 完整的代码可以在这里找到。https://stackoverflow.com/questions/22138217/assistance-with-python-gol-script


Tags: infordefrangearrrsappendrnd
2条回答

首先,您肯定不想在循环中打开文本文件。在开始循环之前,打开文本文件并将数据读入变量。你知道吗

第二,您看到的错误看起来并不在您发布的代码部分中,但很可能是由于没有正确解析文件中的数据造成的。当您应该附加一个数字时,您正在.append添加一个完整的项目列表。你知道吗

如果文件只是一行逗号分隔的值(末尾有[]),那么您需要去掉[],拆分逗号(就像您所做的那样),并将每个字符串转换为一个浮点值。然后需要一次添加一个项目,而不是一次添加所有项目。你知道吗

您对文本文件格式的描述相当粗略,因此我将假设每一行都用一个起始方括号和结束方括号表示,并且各个值之间用逗号分隔,逗号周围有可选的空白。这意味着第一个字符和最后两个字符(也有换行符)应该被忽略。我的文件是这样的:

[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]

相关问题 更多 >