pythonのfor文について理解したい

まずはこちらから

そのfor文の変数"i"が下のfor文にも使われているのですが、同じ変数を使っても大丈夫なのでしょうか?

はい。大丈夫です。
pythonでは(大抵の言語でもそうですが)処理は順に行なわれ、変数は直近で代入された値を持ちますので、混乱することはありません。for文の中に限りません。

python

1a = 102print(a)3a = "ten"4print(a)

ただし、for文の中でループ変数に値を入れてしまうとおかしなことになるので注意が必要です。

python

1for i in range(10):2 print(i)3 i = 1004 print(i)

"for i in range(4)"とあるのですがこれはどのような働きをしているのですか?

ここで使われている(int(input()) for i in range(4))はジェネレータ式というものです。
似たような書き方に、リストの内包表記などがありますが、表記の仕組みは同じようなものです。
始めて見ると何のことなのかわからないかもしれませんが、リストなどを簡潔に表記するためのもので、慣れるととても便利に使うことができます。

これらの表記をどのように理解すればいいかは、ここで書くには難しいので、まずは「リスト内包表記」などで検索してみてください。それがわかれば、質問にある「ジェネレータ」や「ジェネレータ式」についても調べてみるといいでしょう。

ただし、質問にあるコードは、一般的なジェネレータ式の使いかたからはちょっとひねってあるので、現時点でこれを完全に理解できなくても問題はないと思います。(一般的なリスト内包表記はぜひ覚えてください)

考えるなら以下の筋道です。
質問のコードは通常は以下のように書きます。

python

1a = int(input())2b = int(input())3c = int(input())4x = int(input())

同じような処理が4回並んでいるので、ループにしたいところですが、変数4つあるところが難しいですね。
pythonでは複数の変数に一度に値を代入できるので以下のように表現できます。

python

1tmp_list = []2for i in range(4):3 tmp_list.append(int(input())4a, b, c, x = tmp_list

これを、リスト内包表記で書くと、

python

1a, b, c, x = [int(input()) for i in range(4)]

もとのリストは利用しないので、ジェネレータ式にできる。

python

1a, b, c, x = (int(input()) for i in range(4))

コメントを投稿

0 コメント