0

나는 Conway의 삶의 게임 버전을 모델로하는 python 스크립트를 수정하려고합니다. X 열의 행과 Y 행의 셀 세트에는 각각 이웃 국가의 상태에 따라 활성 또는 휴면 상태의 두 상태 사이를 전환할지 결정하는 값이 제공됩니다.Python : .txt 목록으로 random.random 바꾸기

현재이 셀의 초기 값은 사용자가 설정 한 여러 변수를 참조하는이 정의에 의해 정의됩니다.

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 

하지만, 함께 온 것입니다 .txt 파일은 다음과 같이 설정

목록 ' "[0.1, 0.1, 0.9, 0.9, ... 등]

왜 이런 일이에 대한 어떤 제안? 전체 코드는 여기에서 찾을 수 있습니다. https://stackoverflow.com/questions/22138217/assistance-with-python-gol-script

+0

중복 가능성 (http://stackoverflow.com/questions/22138217/assistance-with-python-gol-script)이다 – 2rs2ts

+0

.txt 파일의 예를 게시 할 수 있습니까? (여러 행 또는 표시하는 내용의 한 줄임). 손으로 직접 만드십니까? 왜 거기에 []가 있습니까? – bj0

+0

0부터 1까지의 숫자 목록으로 형식이 지정됩니다. 숫자 뒤에는 쉼표가 붙습니다. 파일에 대괄호가 없습니다. 이것은 ".1, .1, .1, .1, .9, .9, .9, .9, .9, .1, .1, .1, .1, .1, .9, .9, .9, .9, .9, .1, .1, .1, .1, .9, .9, .9, .9, .9 " – HelloThisIsDog

답변

0

먼저 텍스트 파일 을 루프 내부에 열지 않으려 고합니다. 루프. 루프를 시작하기 전에 텍스트 파일을 열고 데이터를 변수로 읽습니다.

둘째,보고있는 오류가 게시 한 코드 섹션에있는 것처럼 보이지 않지만 파일에서 데이터를 올바르게 구문 분석하지 않았기 때문일 수 있습니다. 단일 번호를 추가해야하는 경우 .append 전체 항목 목록입니다.

파일이 단지 한 줄의 쉼표로 구분 된 값 (끝에 [] 포함)이면 쉼표로 쉼표로 분리하고 각 문자열을로 변환해야합니다. 부유물. 한 번에 하나씩 항목을 추가해야합니다.

+0

이 시도.감사. – HelloThisIsDog

+0

'with'/'as' 구조체를 사용하는 것이 더 좋습니다. 'with open ('myfile', 'r')을 파일로 사용합니다 :' – 2rs2ts

1

텍스트 파일 형식에 대한 설명은 다소 개략적이므로 각 행이 시작 및 끝 대괄호로 표시되고 개별 값은 쉼표로 구분되며 주위에 선택적 공백이있는 것으로 가정합니다. 이것은 첫 번째 문자와 마지막 두 개 (개행 문자도 있음)를 무시해야 함을 의미합니다.

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

출력 [파이썬 GOL 스크립트 지원]의

[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] 
관련 문제