2015-11-18 182 views
2

我被卡住,同時使用循環來計算粒子之間的距離。到目前爲止我有下面的代碼。我似乎無法訪問除最後輸入的點以外的任何點。最後的印刷品只印刷最後一張。訪問while循環中的變量

有沒有辦法訪問輸入的位置,而不是輸入的最後一個點?

#user location 
xu = int(input('X coordinate of user: ')) 
yu = int(input('Y coordinate of user: ')) 
zu = int(input('Z coordinate of user: ')) 
#number of particles 
count = int(input()) 
icount = 0 
while icount < count: 
    x= int(input('particle x coordinate: ')) 
    y = int(input('particle y coordinate: ')) 
    z = int(input('particle z coordinate: ')) 
    q = int(input('particle charge: ')) 
    icount += 1 
print(x, y, z)   
+1

既然你定義徐宇,祖,你爲什麼不使用這些變量了嗎?這些應該有你的第一個價值。 –

+2

我想你想要一個列表並將值附加到該列表中 – The6thSense

+0

您需要一個縮進行(print,print)(x,y,z)。也就是說,在上次打印之前插入一個製表符空格。一旦你能夠獲得值,根據需要進行存儲。 – balabhi

回答

-1

你想保存每個xyzq你通過while循環迭代?你需要將這些值附加到列表(也許作爲字典?)來做到這一點。

loop_list[3]['y'] 
# the "y" input on the 4th iteration of the loop 
# (4th? remember zero-indexing!) 

爲什麼這些奇怪的一倍,達括號:

count = int(input()) 

loop_list = [] 
for _ in range(count): # this is equivalent! 
    x = int(input('particle x coordinate: ')) 
    y = int(input('particle y coordinate: ')) 
    z = int(input('particle z coordinate: ')) 
    q = int(input('particle charge: ')) 
    loop_list.append({'x': x, 'y': y, 'z': z, 'q': q}) 
    # toss the dictionary of values into the list 

然後事後你可以做一些像訪問它?因爲loop_list是一個充滿字典的列表。 loop_list[3]指向第4個字典,然後['y']從該字典中的關鍵字'y'獲取值。

0

您的變量x,y和z只是單個整數。如果你想用索引存儲多個值來區分它們,你需要使用一個列表。

列表通常是您在循環中執行一系列類似操作時所需要的。如何做到這一點的一個例子如下,儘可能地貼近你的代碼,否則可能:

# user location 
xu = int(input('X coordinate of user: ')) 
yu = int(input('Y coordinate of user: ')) 
zu = int(input('Z coordinate of user: ')) 
# number of particles 
count = int(input()) 
X = [] 
Y = [] 
Z = [] 
Q = [] 
icount = 0 
while icount < count: 
    X.append(int(input('particle x coordinate: '))) 
    Y.append(int(input('particle y coordinate: '))) 
    Z.append(int(input('particle z coordinate: '))) 
    Q.append(int(input('particle charge: '))) 
    icount += 1 
for x, y, z, q in zip(X, Y, Z, Q): 
    print(x, y, z, q) 

從本質上講,我們正在做一些列出來保存值所有粒子用戶輸入,然後使用for循環打印每一個,而不僅僅是最後一個值。

問題中的代碼只是重複地給變量賦值不同的值,每次丟棄前一個值。

+0

非常未經測試... –

+0

@AdamSmith我已經測試了代碼,它應該工作。我試圖快速向OP展示概念,而不必找到一個Python解釋器。 – Vality

0

實際上,它不會打印任何東西,只是最後一點。

您通過整個集合迭代,一旦你完成迭代,存儲的值只有你xyz是那些包含在你的最後一個元素,你來過。

這是爲什麼?

因爲每次存儲新值時都會覆蓋舊值。

如果您在循環您print呼叫時,您將顯示所有值:

while icount < count: 
    x = int(input('particle x coordinate: ')) 
    y = int(input('particle y coordinate: ')) 
    z = int(input('particle z coordinate: ')) 
    q = int(input('particle charge: ')) 
    icount += 1 
    print(x, y, z)