没有更改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]'' –