CHAPTER 2 · 24 lessons · 306問

くり返しとデータの持ち方

同じ処理を何回もくり返し、たくさんの値をまとめて持つ。プログラムが一気に実用的になるところ。

0 / 306 問クリア

前の章で書いたプログラムには、大きな限界がひとつあった。扱える値の数が、書いた行数の分しかないということだ。3人ぶんのデータを出したいなら3行、100人ぶんなら100行。これでは現実のアプリは作れない。

この章で、その壁を壊す。使う道具は2つ。くり返しとまとめて持つ入れ物だよ。

くり返しは for から入る。Python の for は「回数を数える」というより「並んでいるものを1つずつ取り出す」書き方で、for kudamono in kudamonos: と書けば、リストの中身が順番に kudamono に入ってくる。回数を決めて回したいときは range を組み合わせる。もうひとつが while で、こちらは「条件が成り立つあいだ、ずっと」。回数がはっきりしているなら for、終わりが条件で決まるなら while だよ。

ここで一度は必ず出会うのが 無限ループ。終わる条件を書きまちがえると、プログラムが止まらなくなる。この教材では一定時間で自動的に止めて、何が起きたかを表示するようにしてある。こわがらずに、わざと作ってみるといい。「なぜ終わらないのか」を自分で説明できるようになれば、それはもう理解したということだよ。

入れ物のほうは リスト から。["りんご", "みかん", "ぶどう"] のように、値を順番に並べて1つの名前で持つ。中身は kudamonos[0] のように0から数える番号で取り出す。1からではなく0から、というのは最初は必ず戸惑うところだ。Python には kudamonos[-1] で末尾を取れるという親切もあって、これは他の多くの言語には無い書き方だよ。

そのあと、文字列も同じように扱えることを見る。namae[0] で1文字目、namae[0:3] で先頭3文字。リストで覚えた番号とスライスが、そのまま文字列にも効く。Python は「並んでいるもの」を同じ書き方で扱えるように作られていて、これに気づくと覚えることが一気に減るよ。

もうひとつの入れ物が 辞書。リストが「番号で取り出す入れ物」なら、辞書は「名前で取り出す入れ物」だ。{"namae": "ゆい", "toshi": 15} と書いて hito["namae"] で取り出す。人やお店や商品のように、いくつかの項目がひとまとまりになっているものを表すのに向いている。あわせて、あとから中身を変えられない タプル も扱うよ。

この2つは組み合わせて使うのが本番だ。「辞書をリストに並べる」という形にすると、名簿や商品一覧といった現実のデータがそのまま表現できる。そこにくり返しをかければ、100件だろうと1000件だろうと同じコードで処理できる。章の最後は、くり返しと条件分岐とリストを全部使う総合演習で締めるよ。

この章のレッスン

同じことをくり返す

  1. 21回数を決めてくり返す同じ行を3回書くのはもうやめよう。for と range で、くり返しをプログラムに任せるよ。問題へ
  2. 22並んでいるものを取り出す値を並べて持つリストをここで覚えて、for で1つずつ取り出そう。Python の for の本当の姿だよ。問題へ
  3. 23条件が成り立つあいだくり返すwhile は「終わりが条件で決まる」くり返し。次に進めるのは自分の仕事になるよ。問題へ
  4. 24終わらないループ止まらないプログラムは、こわがるものではなく読み解くもの。なぜ終わらないのかを言葉にできるようになろう。問題へ
  5. 25途中でやめる・その回だけ飛ばすbreak でくり返しを打ち切り、continue でその回だけ飛ばす。くり返しに細かい指示が出せるようになるよ。問題へ
  6. 26ループの中のループくり返しの中にくり返しを書く。九九もマス目も組み合わせも、この形ひとつで作れるよ。問題へ

並べて持つ

  1. 27リストに並べて持つ[...] で値を順番に並べる。変数をいくつも作らなくてよくなるよ。問題へ
  2. 28番号で取り出すkudamonos[0] で1つだけつかむ。0から数えるのがPythonの流儀だよ。問題へ
  3. 29中身を入れかえる番号を指定して書きかえる。append で足して、remove と pop で消すよ。問題へ
  4. 30個数を数えるlen() でいくつ入っているかが一発で分かる。番号を回すのにも使えるよ。問題へ
  5. 31並べかえるsorted は新しいリストを返し、sort は元を変える。この違いがすべてだよ。問題へ
  6. 32一部を切り出すxs[1:3] でまとめて取り出す。終わりの番号は含まれないのがきまりだよ。問題へ

文字列をもっと

  1. 33文字を番号で取り出すリストで覚えた [0] が、そのまま文字列にも効く。文字列も「並んでいるもの」だよ。問題へ
  2. 34まとめて切り出すリストで覚えたスライスが、文字列でもそのまま使える。ただし書きかえだけは別物だよ。問題へ
  3. 35文字列の中をさがす入っているか、何番目か、何個あるか。番号で取り出す前に、まず「さがす」だよ。問題へ
  4. 36文字列を加工するupper lower strip replace。どれも新しい文字列を返して、元はそのまま残るよ。問題へ
  5. 37分けて、つなぐsplit で文字列をリストに、join でリストを文字列に。行き来できると一気に便利だよ。問題へ

名前で引く

  1. 38名前で取り出す入れ物リストは番号で取り出した。辞書は名前で取り出す。hito["namae"] と書けるようになるよ。問題へ
  2. 39書きかえる・足す・消す書きかえと追加は同じ形。del で消し、in と get で KeyError を避けよう。問題へ
  3. 40ひとつずつ取り出すfor に辞書を渡すと回るのはキー。items を覚えると、キーと値を同時に受け取れるよ。問題へ
  4. 41辞書をリストに並べる名簿や商品一覧は、辞書をリストに並べて表す。現実のデータがそのまま書ける形だよ。問題へ
  5. 42あとから変えられない組リストによく似た (150, 3) の形。ちがいは変えられないこと。それが安心につながるよ。問題へ

組み合わせる

  1. 43道具を組み合わせて解くくり返し・条件分岐・リストを合わせて使う総合演習。まとめなので基礎3問は無く、練習10問だけだよ。問題へ
  2. 44辞書とリストで持ち直す辞書をリストに並べて、名簿や商品一覧のような現実のデータを扱う総合演習。基礎3問は無く、練習10問だけだよ。問題へ

つぎは「関数」。ひとまとまりの処理に名前をつけて、いつでも呼び出せるようにする。コードが「部品」になる章。