7

なぜこれがPythonの無限ループなのか理解できないようですが??

for i in range(n):
    j=1
    while((i*j)<n):
       j+=1

外側のループはn回行くべきではありません。毎回ndiviに等しくなるまでjをインクリメントしますか?

4

9 に答える 9

36

iで始まる0ため、while条件は常にtrueのままです。詳細については、範囲のドキュメントを参照してください。

于 2010-01-12T17:42:13.277 に答える
16

変数の状態変化を示す「トレース」を作成できます。

  1. n = 5; i = 0
  2. n = 5; i = 0; j = 1
  3. i * j <n-> 0 <5:n = 5; i = 0; j = 2
  4. i * j <n-> 0 <5:n = 5; i = 0; j = 3
  5. i * j <n-> 0 <5:n = 5; i = 0; j = 4
  6. i * j <n-> 0 <5:n = 5; i = 0; j = 5
  7. i * j <n-> 0 <5:n = 5; i = 0; j = 6

printステートメントを挿入することで、トレースが正しいことを証明できます。

疑わしい場合は、印刷してください。

于 2010-01-12T18:27:06.320 に答える
12

iゼロから始まるため、内部ループの条件は常に0*j < n、であり、これは常に真になります。

于 2010-01-12T17:43:05.563 に答える
7

の初期値iが0であるため。

于 2010-01-12T17:42:43.167 に答える
4

の最初の値は0にiなります。0×何でも0です。

于 2010-01-12T17:42:49.917 に答える
2

私は0だから!! およびi*j = 0

于 2010-01-12T17:43:16.657 に答える
2

range(n)0ではなく、で始まり1ます。0 * j常に未満になりnます。

于 2010-01-12T17:43:18.713 に答える
1

初めて外側のループを通過すると、内側のループは無限ループになります。その後何が起こっても構いません。「無限の後」はありません。

于 2010-01-12T17:43:06.590 に答える
0

私は0ですあなたのループを書き直します

for i in range(1,n):
j=1
while((i*j)<n):
   j+=1

このバージョンの範囲関数を使用すると、0ではなく1から始まる範囲が作成されます

于 2010-01-12T18:25:33.543 に答える