

簡単ですが、例えば、0,2,4,6,8・・・と偶数を出力するため、以下のようなコードを考えました。

[code]

    for i in range(10):
        print(i)
        i = i + 1
    
[/code]

しかし、これを行った結果の出力は、0,1,2,3,4,5,6,7,8,9となります。  
i = i + 1の段階で、iを1増加させることはできるようなのですが、繰り返しの際にまた元に戻ってしまうようです。  
この解釈について教えてください。for内のiはあくまでローカルになるのでループの際にリセットされるとかそういうことでしょうか？グローバル変数とローカル変数の関係がよくわかっていないということでしょうか？

forループの中でiの値を変更し、それをそれ以降のループにも引き継ぐ方法についてご教示いただければと思います。


CC BY-SA 4.0
2021-05-05T07:39:34.013
75680
2021-05-05T08:07:03.417
2021-05-05T07:52:23.290
3060
35514
question
python
python のfor ループのカウンタの値を途中で変えられないことの解釈


Pythonのドキュメントに以下のように書いてあり、C言語とかでの基本的な使い方とは違います。  
質問の`i`はループカウンタではなく、`range(10)`で作られた整数のリストの各要素を順番に取り出したものとなります。  
その他の言語で言えば`foreach`と呼ばれる機能と類似したものと言えるでしょう。

[4.2. for 文](https://docs.python.org/ja/3/tutorial/controlflow.html#for-
statements)

> Python の for 文は、読者が C 言語や Pascal 言語で使いなれているかもしれない for 文とは少し違います。 (Pascal
> のように) 常に算術型の数列にわたる反復を行ったり、 (C のように)
> 繰返しステップと停止条件を両方ともユーザが定義できるようにするのとは違い、Python の for 文は、任意のシーケンス型 (リストまたは文字列)
> にわたって反復を行います。反復の順番はシーケンス中に要素が現れる順番です。

[4.3. range() 関数](https://docs.python.org/ja/3/tutorial/controlflow.html#the-
range-function)

> 数列にわたって反復を行う必要がある場合、組み込み関数 range() が便利です。この関数は算術型の数列を生成します:

**forループの中でiの値を変更し、それをそれ以降のループにも引き継ぐ方法** としては、繰り返し用の変数と`i`を別々に用意することになるでしょう。

[code]

    i = 0
    for c in range(10):
        print(i)
        i = i + 2
    
[/code]

類似の方法としては、`for`ループでは無く`while`ループを使うというのが考えられます。

[code]

    i = 0
    while i < 10:
        print(i)
        i = i + 2
    
[/code]


CC BY-SA 4.0
2021-05-05T08:07:03.417
75681
2021-05-05T08:07:03.417
26370
75680
answer