38

(i) を繰り返し処理している変数を変更するのと同じくらい簡単なことをしようとしていますが、Python と C の両方で異なる動作をしています。

パイソンでは、

for i in range(10):
    print i,
    if i == 2:
        i = 4;

私は取得0 1 2 3 4 5 6 7 8 9しますが、Cで同等です:

int i;
for (i = 0; i < 10; i++) {
    printf("%d", i);
    if (i == 2)
        i = 4;
}

わかり01256789ました (3 と 4 の数字は期待どおりに表示されないことに注意してください)。

ここで何が起こっているのですか?

4

6 に答える 6

34

Python には、for ループのバックグラウンドでいくつかの優れた処理が行われています。例えば:

for i in range(10):

何があってもi、範囲内の次の要素になるように常に設定されます。0-10

Pythonで同等のことをしたい場合は、次のようにします。

i = 0
while i < 10:
    print(i)
    if i == 2:
        i = 4
    else:      # these line are
        i += 1 # the correct way
    i += 1 # note that this is wrong if you want 1,2,4,5,6,7,8,9

に変換しようとしている場合は、ループ内の が常に に追加されることCを覚えておく必要があります。i++fori

于 2013-04-09T13:12:20.610 に答える
1

範囲機能を使用してこれを行うことはできません。forループは範囲関数を使用し、範囲関数内の変数は、ループで指定したものに関係なく、内部メソッドによってインクリメントされるため、whileループのみを使用して実行する必要があります。範囲リストのみによってインクリメントされます。for i in range(10): ... print i ... if i == 2: ... i = 4 ... else: ... i += 1 ... 0 1 2 3 4 5 6 7 8 9

興味深い例がここにあります....

for i in range(10): ... print i ... i = i + 10 ... print i ... これは... 0 10 1 11 2 12 3 13 4 14 5 15 6 16 7 17 8 18 9 19

于 2013-04-09T13:46:28.463 に答える