y_list内のすべての数値が整数に近いとき、私は「デフC(Y)」で定義され、それを停止したいです変更する!)。 while
ループ状態のstatic y_list
をテストしているので、そのループは決して終了しません。しかしはがz_list
に変更されているので、z_list
が条件を満たしていることをテストする必要があります。
そして、最初のループでwhile
テストが失敗しないようにするには、z_list
のコピーをループ開始前にy_list
にする必要があります。私はちょうど
z_list = y_list
をした場合、私は
z_list = y_list[:]
を行うことによって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
と同じであるため、2つの別々のリストはありません。
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_list in y_list] 'のように思えるかもしれません。 –