2

我正在创建一个带有坐标和 ID 号的文件列表。
a 只是一个用于分隔点的任意值。f 是一个较早打开和较晚关闭的文件。我正在使用下面列出的代码。它应该产生 511 个点,跳过一个原本是第 293 个点的点。相反,它跳过了 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

由于您要求 that imust be different from 4AND jmust be different from 4AND kmust be different from 4,因此您将跳过其中 ANY 所在的所有点4。采用

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

你的条件是错误的,应该有“或”而不是“和”。此外,您的代码可以简化一点,它应该如下所示:

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 回答