1


コードの両方のブロックが同様の結果を出力するべきではありませんか? 内側の for ステートメントに到達するたびに内側のループ内の range 関数が再評価されるのに、外側のループ内の range 関数は 1 回しか評価されないのはなぜですか?

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

結果
0
1
2
3
0
1
0
1
0
1

出力された最初の 4 つの整数 (0 - 3) は、範囲 (x) 内の j のコードの結果であることはわかっています: コードですが、なぜ以下も出力されるのですか?
0
1
0
1
0
1
コード

x = 4
for j in range(x):
    print i
    x = 5

プリント
0
1
2
3

IDLE での追加情報 Python 2.7

4

5 に答える 5

4

関数range(x)は のリストを生成します[0,1,2,3,4]。ループではfor、このリストを繰り返し処理します。

あなたのコードは以下と同等です:

for j in [0,1,2,3]:
    for i in [0,1,2,3]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i
于 2013-03-28T16:39:42.623 に答える
4

ループの繰り返しを見ていくことでしか説明できないので、次のようにします。

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

初めて通った。

x = 4
for j in [0, 1, 2, 3]
    for i in range [0, 1, 2, 3]
        print i
        x = 2

版画

0
1
2
3

x は 2 に設定されますが、外側のループ範囲は既に実行されているため、再評価されません。

コードは次のようになります。

for j in [0, 1, 2, 3]:
    for i in [0, 1]:
        print i
        x = 2

版画

0
1

そして、これはさらに2回続きます。

于 2013-03-28T16:40:59.277 に答える
0

range(x) は一度だけ評価されます。つまり、ループの開始時に評価されます。そのため、ループ内で x を変更しても効果はありません。

ただし、最初のコード クロックでは、内部で x を 2 に変更するため、次に内部ループが実行されると、範囲は (0,1) のみになります。

編集:コードの最初のブロックは次と同等です

x = 5
for i in range(x)
    print i
    x = 2
于 2013-03-28T16:42:09.983 に答える