2

座標と ID 番号を含むファイルのリストを作成しています。
a は、ポイントを離すための任意の値です。f は、先に開いて後で閉じるファイルです。以下にリストされているコードを使用しています。本来は 293 番目のポイントだったはずの 1 ポイントをスキップして、511 ポイントを生成する必要があります。代わりに、169 ポイントをスキップしていて、その理由がわかりません。これに関する任意の助けをいただければ幸いです。

id=1

for i in range(0,8,1):
    for j in range(0,8,1):
        for k in range(0,8,1):
            x1=i*a
            y1=j*a
            z1=k*a
            if ((i!=4) & (j!=4) & (k!=4)):
                f.write("%4.d  1  4  %4.3f  %4.3f  %4.3f\n"%(id, x1, y1, z1))
                id=id+1
4

2 に答える 2

5

あなたはそれが異なっていなければならないことを要求するのでi、ANDは異なっていなければならず、ANDは4異なっていなければならないので、これらのいずれかが.であるすべてのポイントをスキップしています. 使用するj4k44

if i != 4 or j != 4 or k != 4:

代わりは。同様に、しかしおそらく理解しやすいように、次のように書くことができます

if not (i == 4 and j == 4 and k == 4):

またはさらに良い

if i, j, k != 4, 4, 4:

編集:コードの完全に書き直されたバージョンは次のとおりです。

points = itertools.product(range(0, 8 * a, a), repeat=3)
points = (p for p in points if p != (4 * a, 4 * a, 4 * a))
with open("filename", "w") as f:
    for id_p in enumerate(points, 1):
        f.write("%4.d  1  4  %4.3f  %4.3f  %4.3f\n" % id_p)
于 2012-06-13T17:36:10.537 に答える
0

条件が間違っています。「and」の代わりに「or」を使用する必要があります。また、コードを少し単純化することもできます。次のようになります。

for i in range(8):
    for j in range(8):
        for k in range(8):
            x1 = i * a
            y1 = j * a
            z1 = k * a
            if i != 4 or j != 4 or k != 4:
                print("%4.d  1  4  %4.3f  %4.3f  %4.3f\n" % (id, x1, y1, z1))
                id += 1
于 2012-06-13T17:40:00.390 に答える