79番地コミュニティ

forループってなんだ?

ループっていうのは、ある条件を満たすあいだ、 同じ処理をぐるぐるまわりながら何回もくりかえすっていう、 プログラマなら毎日のように使っているおなじみのやつですが、 初心者が初めて出くわしたら何のことかわかりませんね。 受講生さんからいただいた質問を共有してみましょう。



とつぜんですが質問共有コーナー!

テキスト第1章もいよいよ終盤にさしかかるステップで、
会員さんから受けた質問がナイスだったので共有しよう。
>■1-6:結果表示に辞書を使う:L2rT.py
>■1-7:あいこの場合何度でも繰り返す:Jv5e.py

のとこ。
問題と模範解答は各自で調べてもらうとして、
質問のあった箇所は
▽
for hand in hands:
  input_message += str(index) + ':' + hand
  if index < 2:
    input_message += ', '
  index += 1
return int(input(input_message))
△

つまり、
forループ。
これ日本語に翻訳するとどうなるんでしょう?

ループ処理って何だ?

ループっていうのは、
ある条件を満たすあいだ、
同じ処理をぐるぐるまわりながら何回もくりかえすっていう、
プログラマなら毎日のように使っているおなじみのやつですが、
初めて出くわしたら何のことかわからない。
が、
初めて見る語句の「for」がポイントだってわかったら、
「Python」「for構文」というようなキーワードでググって調べてみることから。
ループっていう処理を知らなかったとしても、
ネット上に山ほどある解説ページにたどりつくことはできますね。
すると
>pythonのfor文では、
>変数の後ろに「in」が付くことと、
>オブジェクトの後ろに「:」が付くことに注意しましょう。

‥‥みたいな注意点も教えてくれてたりする。
>そもそもオブジェクトがわからない!
っていう苛立ちもわかるけど、
いま肝心なことは、
for hand in hands:
の意味だ。
よな?
最短最速のPython入門


イテラブルだのイテレータだの‥‥

時間があったら
「プログラミング」「オブジェクト」でググってもらってもいいけど、
オブジェクトの後ろに「:」を付けろって書いてあるってことは、
「:」の前にあるものをオブジェクトって呼ぶんだ‥‥くらいのことはわかる。
ネットの解説ページ、
親切なやつはほんとうに親切なんで、
いくつか開けてみて自分のレベルに合うサイトを覚えておくといい。
そうこうしてるうちに、
Pythonのfor構文は、
このように書くのが決まり(文法)なんだとわかる。

for 変数名 in イテラブルオブジェクト:
   処理

ここでまた「イテラブル」っていう、
耳慣れない語句が出てるのでまたググる
すると、
イテラブル(iterable)ってのが「繰り返し可能なオブジェクト」のことで、
イテレータ(iterator)と並んでPythonに特有の重要な概念だということがわかる。
こんなふうに
はじめのうちはググるばっかりのくりかえしなのだ。
(そればっかりだとおもしろくないから、
だからドローン飛ばそっていう話になるわけヨ。)

Python無料体験会へようこそページへ



いまやるか、あとからやるか

脳ミソのスペースに余裕のある人は、
ここでイテラブルイテレータをいっぺんに覚えたほうが効率的ですが、
しんどかったらスルーしてもいい。
(わたしだって、きょう初めて知ったくらいなもんですから、
これ知らなくったってあしたからの人生に支障ありませんからw)

>Pythonのfor文はC系とは違い、
>カウンタ変数(インデックス)を使わずに記述する。

っていう発見があったりしますが、
>なんかよーわからんけどそんなもんなんやー
で、
飛ばしてもいい。
そこ、いまじゃない。
とにかく、いま肝心ななのは
for hand in hands:
ただひとつなので、
こいつだけはここで理解しときたい。
その周辺の関連知識はどうしたら‥‥?
って、
そこの判断ビミョーなとこですけど、
見切りをつけるか深彫りするか、
各自の環境に合わせて意思決定したらいいです。

累算代入演算子だと??

けっきょくのところ、
for hand in hands:
を日本語に翻訳すると、
>handsっていうイテラブルオブジェクトにセットされた要素を
>順番に変数handに移しながら
>次の行から始まる処理を要素の終わりまでくりかえす

です。
くりかえされる処理は
input_message += str(index) + ':' + hand
だ。
>なんなんだこの「+=」って変テコな書き方はーっ!?

戸惑って止まってしまったとしたら、
そこでヘコたれずまだググる
>ふむふむ、
>これは「累算代入演算子」っていって、
>なんやよーわからんけど、
>左辺と右辺の値を演算して得られる結果を左辺に代入
>って書いてるぞ

‥‥って見つかる。
a = 100
a /= 10

なら、
100/10の10.0がaに代入されるってこと。
input_message = ''
input_message += str(index) + ':' + hand

なら
'' + str(index) + ':' + hand
の文字列がinput_messageに代入されるってこと。
つまり、
なんかよーわからんけど、
ループぐるぐるまわってるうちに文字列を作っていってる処理なわけだね‥‥
っていう雰囲気がわかったらじゅうぶんじゃないかな?

神戸校Python教室のページへ



わからないことがわかるようになるプロセス

あーしんどーw
ま、
ループ処理については、
このくらいまで理解できたらオッケーかな。
ひと休みしよ。
質問に回答するわたしも楽じゃないけど、
初めて解いてるあなたはもっと疲れたでしょーからw
質問は大歓迎♪
ググってみてもわからなければ、
煮詰まる前に質問してもらえたらありがたい。
いま、
あなたがどこまで進んでいて、
どこでつまづいてるかそれでわかるから。
こちらもアタマの体操になるし。
即答できないかもしれなくても、
わからないことがわかるようになるプロセスこそが宝なので。
へこたれずに匍匐前進だーっ!

Python無料体験会へようこそページへ