沒有更改y_list
定義停止時y_list所有數字都接近一個整數(和你不希望改變它!)。並且因爲您正在測試while
循環條件中的靜態y_list
,該循環將永不結束。但你是改變z_list
所以你需要測試z_list
符合你的條件。
並且因此while
測試不會在第一個循環中失敗,您需要在循環開始之前將z_list
作爲y_list
的副本。
y_list = [1.0, 3.4 ]
# Copy the original data
z_list = y_list[:]
def C(y):
return abs(y-round(y)) < 0.15
k = 1
while not all(C(y) for y in z_list):
z_list = [y*k for y in y_list]
k+=1
print(z_list)
輸出
[1.0, 3.4]
[2.0, 6.8]
[3.0, 10.2]
[4.0, 13.6]
[5.0, 17.0]
注意,我做
z_list = y_list[:]
如果我只是做了
z_list = y_list
的
y_list
副本所做的
然後z_list
只是與y_list
相同的列表對象的另一個名稱,您不會得到兩個單獨的列表。
FWIW,這是另一種寫這個的方法。我們使用itertools.count
,所以我們不必手動更新k
,並且map
可以調用測試函數,我已經給出了一個更有意義的名稱。
from itertools import count
y_list = [1.0, 3.4 ]
z_list = y_list[:]
def almost_int(y):
return abs(y - round(y)) < 0.15
for k in count(2):
print(z_list)
if all(map(almost_int, z_list)):
break
z_list = [y*k for y in y_list]
因爲你不改變循環內的'y_list'?爲什麼*會停止? – jonrsharpe
'z_list'的含義是什麼?好像也許你想要'y_list = [y * k在y_list中的y]'' –