簡體   English   中英

Python:用.txt列表替換random.random

[英]Python: Replacing random.random with a .txt list

我正在嘗試修改一個模擬Conway生活游戲版本的python腳本。 其中,在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文件替換我可以設置的值的random.random函數。

到目前為止,這是我想出的

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

您對文本文件格式的描述很粗略,因此,我假設每行都用一個開始和結尾的方括號表示,並且各個值之間用逗號分隔,並帶有可選的空格。 這意味着應該忽略第一個字符和最后兩個字符(也有換行符)。 我的文件如下所示:

[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荷蘭國際集團的項目的整個列表時,你應該附加一個數字。

如果文件只是一行用逗號分隔的值(末尾帶有[]),則您需要剝離[],並以逗號分隔(如您所做的那樣),然后將每個字符串轉換為浮點數。 然后,您需要一次添加一個項目,而不是一次添加所有項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM