2012-06-13 46 views
2

我正在創建一個帶有座標和ID號的文件列表。
a只是一個任意值來分隔點。 f是稍早打開並稍後關閉的文件。 我正在使用下面列出的代碼。它應該產生511點,跳過本來是第293點的一點。相反,它跳過了169分,我無法弄清楚爲什麼。任何幫助,將不勝感激。Python:如果在For循環中

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 
+1

@David - 也是f-你可以猜出它們是什麼。 – mgilson

回答

5

既然你需要i必須不同於4j必須不同於4k必須不同於4,你跳過所有的點,其中任何這些是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) 
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 
+0

可以簡化多一點:'range(0,8)' - >'range(8)' – mgilson