1

次のファイルにデータを書き込もうとしていますが、途中で、最初の行セットで一定である列の値を1つ変更します。これは私のコードです:

import random
import time

start_time = time.time() #time measurement
numpoints = 512
L = 20
d = 1
points = set()

# Open f and write
with open("question2.xyz","w") as f:
    f.write("%d\ncomment goes here\n" % numpoints) #this is for the 2nd line in my xyz 
    while len(points) < numpoints:
        p = (random.randint(0, L), random.randint(0, L), random.randint(0, L))
        if p not in points:
            points.add(p)
            f.write('H %f %f %f\n' % p)

私のコードは現在、この形式の XYZ ファイルを生成します

512 #number of
comment goes here
H 6.000000 19.000000 14.000000
H 11.000000 2.000000 7.000000
H 15.000000 20.000000 16.000000

事前に助けてくれてありがとう!

編集、すみません、これが私が達成したいことです

512 #number of
comment goes here
H 6.000000 19.000000 14.000000
H 11.000000 2.000000 7.000000
H 15.000000 20.000000 16.000000
O 6.000000 19.000000 14.000000
O 11.000000 2.000000 7.000000
O 15.000000 20.000000 16.000000

現在、私のコードは、256 行目から始まる 512 行すべての最初の値に H を入れています。これを O に変更する必要があります。

4

1 に答える 1

2

ポイント生成用のジェネレーターと 2 つのforループを使用できます。

def pointgen(used):
    while True:
        p = (random.randint(0, L), random.randint(0, L), random.randint(0, L))
        if p not in used:
            used.add(p)
            yield p

# Open f and write
with open("question2.xyz","w") as f:
    f.write("%d\ncomment goes here\n" % numpoints) #this is for the 2nd line in my xyz 
    pg = pointgen(points)
    for i in xrange(numpoints // 2):
        f.write('H %f %f %f\n' % pg.next())
    for i in xrange(numpoints // 2):
        f.write('O %f %f %f\n' % pg.next())
于 2012-10-03T08:34:07.177 に答える