2011-11-12 18 views
1

Python noob;なぜこのループが終了しないのか説明してください。なぜこのループが中断しないのですか?

for i in range(0,10): 
    print "Hello, World!" 
    if i == 5: i = 15 
    print i 
next 

よろしく

+2

あなたのコードの中の 'next'は必要ではなく、あなたが思うとは思いません。実際には、イテレータを前進させるために使用される組み込み関数を指しますが、それを呼び出すことはありません。 –

答えて

5

ので、そうのような10個の要素のアレイに作成され、あなたがrange(0,10)で行っている:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10 

を、あなたがそれぞれ1を通過しています。

他のプログラミング言語では、foreachループと呼ばれるものを実行しています。

それ以外の場合は、別の方法で行います。

+0

ああ、それを手に入れよう。ありがとう。 – Teson

+0

問題はありません:) –

1

なぜそれが出るのでしょうか? range(0, 10)の要素を反復していますが、唯一の終了条件は要素がなくなったことです。名前を再バインドしても、イテレート可能なものは変更されません。早期に中断したい場合は、breakを使用してください。

for i in range(0, 10): 
    if i == 5: break 
2

for i in whateverは、whateverの各要素に対して、その要素にiを一度設定するとループ本体が実行されることを意味するためです。各反復の終わりに、iは依然としてwhateverの要素でなければならないというルールはありません。

iをループ本体に再割り当てしても、ループ本体の実行頻度や次の反復で保持される値は無効です。

5

Pythonのforループはカウントされないため、反復処理されます。 rangeは、iterable(Python 2.xのリスト)を生成し、その繰り返し可能なものは反復処理されます。ループ本体が実行される前に、次の項目がその項目から引き出され、ループ本体内で反復変数に加えた変更は、次の値のメモリに影響しません。それは他の場所に保存されており、一般的にそれに影響を与えることはできません。単にbreakを使用してください。

3

rangeオブジェクトは、0...10の範囲の値のコレクションにすぎません。単なる数字の集まりなので、その背後に論理はありません。

for item in setの構文は、基本的にsetのすべての要素をループし、すべての項目がループオーバーされたときにのみ破棄されます。

あなたのコードは等価ではないご希望の結果生じるであろうC++ forループにです:あなたは、ちょうどbreakループループから抜け出すにしたい場合は

for (int i = 0; i < 10; i++) { 
    if (i == 5) { 
    i = 15; 
    } 
} 

を:

for i in range(0,10): 
    print "Hello, World!" 
    if i == 5: break 
    print i 
+0

C++には 'var'はありません(C++には' auto'があります)。そうでなければ、有用な比較です。 – delnan

+0

申し訳ありませんが、構文はJavaScriptとあまりにも似ています。修正する必要があります(問題ではありません:P) – Blender

1

ループでは、forループはCまたはJavaのようなループではないwhileです。代わりにiterableの繰り返しです。

range(0, 10)(これはrange(10)と同じです)は、リストを返す関数です(Python 2.xと仮定します)。Pythonリストは反復可能なので、forループで使用することができます。言語では、第1、第2、第3要素などに変数を割り当て、本体部分を実行するたびにforを実行します。

本文でその変数を変更するかどうかは関係ありません... Pythonはすべての要素が処理されるまでリストの次の要素を選択します。

for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: 
    print "Hello, world." 
    if i == 5: i = 15 
    print i 

からあなたのループが本当に異なっていないことを考えてみましょう順番にも

for i in [1, 29, 5, 3, 77, 91]: 
    print "Hello, world." 
    if i == 5: i = 15 
    print i 

と非常によく似ているという理由iへの割り当ては、ループを破る必要がありますか?

関連する問題