こんにちは！
この小冊子は、プログラミングの基礎をやさしくていねいに学べる書籍『HeadFirst はじめてのプログラミング』の無料サンプル版です。
実は書籍全体では全636ページのボリュームを誇りますが、何もおそれる必要はありません。これはプログラミングについてわかりやすく説明しようと、本文に写真やイラストをたくさん盛り込んだためです。その全体から第1章を中心に、エッセンスを抽出してまとめました。
入門書は薄くて文字も少ないほうがわかりやすいと考えていないでしょうか？ それは正しい考えですが、同時に誤った考えであると私たちは考えます。薄い入門書は、目標までの道のりを最短経路で教えてくれますが、みんながみんな最短経路で無駄なく学習できるわけではありません。より多くの解説や、さまざまな例、また練習問題などがあったほうが、じっくりと身につけられるという方は多いのではないでしょうか。この点については、ぜひ学校での勉強を思い出してみてください。教科書だけで、どこまで頭に入りましたか？
本書は英語版からの翻訳によるものですが、英語圏ではすでに多くの読者がこの書籍でプログラミングを学んでいます。また、本書もその一冊である「HeadFirst」シリーズは、これまで約30点が刊行されている、長らく実績のあるシリーズです。
このお試し版をぱらぱらと眺めていただき、「あっ、これは他の本とちょっと違うな、面白そう！」と思われたら、ぜひ実物の『Head First はじめてのプログラミ
ング』を手に取っていただけますと幸いです。

Head First

はじめてのプログラミング
頭とからだで覚える Python プログラミング入門
Eric Freeman

著

嶋田 健志

監訳

木下 哲也

訳

本書で使用するシステム名、製品名は、いずれも各社の商標、または登録商標です。
なお、本文中では ™、®、© マークは省略している場合もあります。

目次

目次（要約）
はじめに ..................................................................................................................... xxiii

1 章 コンピュータ的に考える：始めよう....................................................................1
2 章 単純な値、変数、型：値を知る.........................................................................33
3 章 ブール型、判定、ループ：判定コード ..............................................................73
4 章 リストと反復：構造を用意する.......................................................................125
5 章 関数と抽象化：関数にする ..............................................................................179
おまけの章 ソートと入れ子の反復：データを整理する ..........................................225

6 章 テキスト、文字列、ヒューリスティック：すべてを組み合わせる.......................245
7 章 モジュール、メソッド、クラス、オブジェクト：モジュール化する..............291
8 章 再帰と辞書：反復とインデックスを超えて .....................................................341
9 章 ファイルの保存と取得：永続性.......................................................................393
10 章 Web API の利用：もっと外に目を向ける .......................................................435
11 章 ウィジェット、イベント、創発的な振る舞い：インタラクティブにする .........467
12 章 オブジェクト指向プログラミング：オブジェクト村への旅 ............................523
付録

未収録事項：（取り上げなかった）上位 10 個のトピック................................575

はじめに脳をプログラミングに向けましょう。あなたは何かを学ぼうとしていますが、脳は学習内容を定着させないようにしています。脳は「どの野生動物を避けるべきかや
裸でスノーボードをすることは悪いことかどうかなど、もっと重要なことに考える余地を残しておくほうがよい」と考えています。そこで、プログラミングの方法を学習することであなたの人生が大きく変わると脳が考えるように仕向けるためにどのような策を講じればよいでしょうか？
この本が向いている人 ................................................................................................ xxiv
あなたの考えはわかっています .................................................................................. xxv「Head First」の読者は学ぶ人です .............................................................................. xxvi
メタ認知：思考について考える ................................................................................ xxvii
この本で工夫したこと.............................................................................................. xxviii
脳を思いどおりにさせるためにできること................................................................ xxix
初めに読んでね ........................................................................................................... xxx
謝辞 ............................................................................................................................xxxv
レビューチーム .........................................................................................................xxxvi

this is a new chapter

vii

目次

1

章 コンピュータ的に考える

始めよう ......................................................................................... 1
コンピュータ的な考え方をすることにより自分をコントロールすることができます。世の中は、ますます多くのものがつながり、設定可能になり、プログラム可能になり、いわゆるコンピュータ的になっています。受動的に関わることもできますが、コードの書き方を学ぶこともできます。そしてコードを書くことができれば主導権を握ることができます。あなたのためにコンピュータを実行させることができるのです。コードが書けると、自分の運命を変えることができます（少なくともインターネットに接続された芝生のスプリンクラーのプログラミングができるようにはなるでしょう）。しかし、どうやってコードの書き方を学ぶのでしょうか。まず、コン
ピュータ的な考え方を学びます。次に、プログラミング言語を覚えます。
すると、コンピュータ、モバイルデバイス、CPU を備えたデバイスが使う言語と同じ言語を使えるようになります。これにはどんなメリットがあるのでしょうか？ 本当にやりたいことをする時間が増え、能力が向上し、より創造性豊かな可能性が広がります。さあ、始めましょう。

分解する .............................................................................................2
コーディングの手順 ...........................................................................6
同じ言語で話している？ ...................................................................7
プログラミング言語の世界 ................................................................8
Python を使ったコードの記述と実行 ..............................................13
Python のざっくりした歴史 .............................................................15
Python を試す ...................................................................................18
作業を保存する ................................................................................20
おめでとう！ 最初の Python プログラムが書けました！ ................21
フレーズ・オ・マチック .................................................................25
コンピュータにコードを読ませる ...................................................26

viii

この本の読み方はじめにプログラミングを学ぶ本にこんなことが書いてあるなんて信じられないわ！

あなた向けの本？
この本はお金があれば誰でも買えます。
必要な人にはすばらしい贈り物です。

ぶ本にどうして「プログラミングを学
この章では、答えます。
るの？」という疑問に
こんなことが書いてあxxiii

この本の読み方

この本が向いている人ありません。
『Head First次の 2 つの項目すべてに該当すれば、この本はあなたに向いています。

はじめてのプログラミン

1

プログラミング方法を学び、理解し、覚えたい。

習を目的としています。プ2

無味乾燥で退屈な学校の授業よりも、ディナーパーティでの刺激的な会話が好き。
ント：
担当者からのコメ「マーケティング
っている人にを持ードトカ
この本はクレジッ
オススメです。」

この本が向いていない人
次の 3 つの項目のいずれかに該当する場合には、この本はあなたに向いていません。

1

コンピュータについてまったく何も知らない。
ファイルやフォルダの管理方法、アプリケーションのインストール
方法、ワープロソフトの使い方などコンピュータについて詳しくな
ければ、まずはそれを学ぶべきでしょう。

2

リファレンス本を探しているプログラミングの達人である。

3

変わったものを試すのが怖い。
変に見られるよりは苦痛に耐えるほうがよい。プログラミングの学習を楽しんでいるような技術本は真面目ではないと思う。

xxiv

これはリファレンス本ではグ』
はプログラミングの学
ログラミングの真相に関する百科事典ではありません（それには Google があり
ますよね）
。

はじめに

あなたの考えはわかっています「この本のどこが真面目なの？」「どうして絵や写真ばかりなの？」「こんなので本当に学べるわけ？」

脳は「これ」を重要だと考えます。

あなたの「脳」がどう考えるかもわかっています
人間の脳は常に目新しいことを求めています。そして、いつも何か珍しいことがないかを探し求めています。人間が生き延びるため、生来、脳はそのように作られているのです。
今日では、トラのえさになることはほとんどありません。しかし、それでも脳は注意しています。自分では気付いていないだけです。
では、決まりきったありきたりの、平凡なことに対して、脳はどのように対処するのでしょうか？重要なことを記録するという脳の本来の仕事を平凡なことに邪魔されないように全力を尽くすのです。脳は退屈なことはわざわざ記憶しません。
「たい
して重要じゃないな」とフィルタが働くからです。
では、脳はどのようにして重要なことを判断するのでしょうか？例えば、ハイキ
ングに出掛けたときに突然トラが襲いかかってきた場合、頭と体の中では何が起こるでしょうか。
そんなとき、脳の神経細胞が燃え上がり、感情が昂り、化学物質が活性化します。
そして、脳はこう判断するのです。

まいったな、退屈で単調な内容があと 600 ペー
ジもあるのか。

記憶する
脳はこれを
ことだと
い
な
までも
ます。
しかし、家や図書館という、トラに襲われる心配がない安全で暖かい場所で、 考えこれは重要だ！絶対に忘れるな！

試験勉強か、あるいは上司から 1 週間から 10 日間くらいかけて目を通しておくように言われた難しい技術テーマを学習しているとします。
ここで 1 つだけ問題があります。脳はあなたの役に立とうとします。つまり明らかに重要でないことに脳の貴重なリソースが使われないようにするのです。脳のリソースは本当に重要なこと、例えばトラが襲ってくる、火事の危険がある、二度と短パンをはいてスノーボードをしてはいけない、といったことを覚えておくことに使うほうがいいのです。
「脳さん、いつも本当にありがとう。だけど、この本は退屈でいまはまったく魅力もないんだけど、何とか頭の中に入れておいてよ」と脳に伝える簡単な方法はないのです。

xxv

この本の読み方人です。
「Head First」の読者は学ぶます。知識を頭にないようにする必要がありまず習得し、その上で忘れ
か？
ょう
でし
なの
必要
には文字以外の学習には何が最新の研究によると、学習、神経生物学、教育心理学の
科学
認知
ん。
ませ
あり
詰め込むことではることです。
なのは脳のスイッチを入れものが必要なのです。必要ード
あなたが書いたコ。
についての方針があります

Head First シリーズには学習されやすいので、学習効果
文字だけよりもずっと記憶
ビジュアル重視。画像は、しやすくなります。この本）。また、内容がより理解が高まります（最大 89% 向上を配置しています。ページの真の中や近くに説明の文章
では、関連する絵や図、写ことにもなっ関連する問題を 2 度考える
配置してしまうと、内容に
めて
まと
ジに
ペー
別の
下や
てしまいます。
愛想 な硬 い文 体
Python インタプリタ
文体。最 近の 研究 では、無会話 のよ うな 親密 な感 じの
文体のほうが、
的な
会話
ける
りか
接語
に直
読者
って
を使
よりも一人称とがわかっています。講義
績が最大 40% も向上するこ
そのコードを関数に
学習後のテストで学生の成ます。あまり深刻に抽象化したくなるん
文体をわれわれは使ってい、物語を語るような砕けたなくでは話にじゃないかな。
会話するほうが講義よりもディナーパーティで仲間と受け取らないでください。
身が入りますよね？
脳細うに する。つ まり、自 らの考え を深 めな がら 学べ るよ
私に注目してです。
頭の中は何も変わらないの
くれたわね。今度は胞を活性化させない限り、
みなグローバル変数の使い方にはっきり持ち、熱心に楽し
読者に必要なのは、目的を注意してちょうだい。
知識
しい
、新
出し
ねり
をひ
結論
がら問題の解決に集中し、を駆ためには、脳と感覚の両方を習得することです。その
う。
しょ
みま
り組
A などに取使する課題、練習問題、Q&
ぶので「本当に学びた
きさせない。
だけを学
、飽
グ
つけ
引き
ン
心を
ィ
の関
読者
コーデ
な
ュータ的
ピ
ン
ちに眠くなって
コ
いう
終わらな
はなく、
いんだけど、1 ページも読み
ださい。
学んでく
を
方
、ありきたりえ脳は考でもあるでしょう。人間のしまう」という体験は誰にを集めます。
関心反したものにっていて目を引く、予想にでないもの、面白く、変わす。退屈ので退屈ではないーマを学ぶことは必ずしも新しくて難しい技術的なテ時間で学習できます。
でなければ、脳はかなり短かっています。気大きく左右されることがわする能力は、感情の動きに感情に訴える。何かを記憶
動の物語」のこと感の涙。何も「少年と愛犬
ことは記憶しやすいのですになることや何かを感じた
感情や、パズったとい「これは何だ？」しみ、ません。驚き、好奇心、楽得したととを言っているのではありを習ことが難しいと思っているったぞ！」という感覚、誰もるのです。
ルを解いたときに起こる「やてい指したときなどの感情のことを技術に詳しいことがわかっ
き、エンジニアのボブより

xxvi

はじめに

メタ認知：思考について考える
何かを心から学習したいと願っていて、しかも効率よく深く学習したいのであれば、関心の持ち方に注目するといいでしょう。考え方について考え、学び方について学ぶのです。
ほとんどの人は大人になるまでにメタ認知や学習理論の授業を受けたことがありません。
私たちは学ぶことを要求されますが、学び方を教わることはまずありません。
この本を手に取った方は、プログラムやアプリケーションをコーディングする方法を本気

これを記憶するには脳にどう働きかければいいんだろう。

で勉強したい人でしょう。でも、勉強にあまり時間をかけたくありませんよね。また、読んだ内容を記憶し、使えるようになりたいでしょう。そのためには、理解する必要があります。この本に限らず本や学習体験を最大限に活用するためには、自分の脳に対して責任を持つようにします。
学習の秘訣は、学んでいる新しい物事が「本当に重要」なものだと脳に思わせることです。
つまり、学習している内容がトラに関することと同様に、あなたが幸せになるために重要なことであると認識させるのです。そうしないと、新しい内容を脳に留める
ために脳と常に格闘することになります。

では、飢えたトラと同じようにコーディングを脳に扱わせるにはどうしたらいいのでしょうか？
そのためには退屈で時間のかかる方法と、効率的で時間のかからない方法があります。退屈で時間のかかる方法とは、ひたすら繰り返すことです。どのく
らいつまらなく関心のないことでも、何度も繰り返し学べば覚えられるという経験は誰でもあるでしょう。十分に繰り返せば、脳は「これは重要とは思えないのだが、これだけ繰り返しているのだから重要だと思うことにしよう」と判断するのです。
効率的で時間のかからない方法とは、脳の働きを活性化させることです。特に、さまざまな種類の脳の働きを活性化させるのです。前のページに示した項目はそのための重要な役割を担い、脳を望みどおりに働かせるのに役立つことがわかっています。例えば、絵や写真の中に内容を説明する言葉を入れておくと、見出しや本文のような別の箇所に入れるよりも言葉と
絵や写真との関係を理解しようとして神経細胞がより活発に働くという研究報告もあります。
神経細胞が活発に働けば働くほど、関心を払い記憶するにふさわしいものであると脳が考える可能性が高くなります。
会話のような文体が効果的なのは、人は自分が会話の中に入っていると感じると、話に遅れないようにして会話における責任を果たすことが期待されるため、より多くの関心を払うからです。面白いのは、会話が本との間で行われていても脳は一向に構わないという点です。逆に、文体がかしこまった無味乾燥なものであると、脳は大勢の受け身な聞き手と一緒に座って講義を受けている状態と同じように受け止めます。居眠りしてもかまわないと考えるのです。
しかし、ビジュアル化や会話的なスタイルは最初の一歩にすぎません。

xxvii

この本の読み方

この本で工夫したこと
この本では絵や写真を多用しています。これは、人間の脳が文字よりも視覚要素に反応するからです。脳の観点から見れば、1 つの絵や写真は 1000 文字の言葉に匹敵します。また、テキストと絵や写真を組み合わせるときは、関係するテキストを絵や写真の中に埋め込みました。テキストが関連するものの中にあるほうが、表題や本文のどこかに埋もれているよりも脳がずっと効果的に働くからです。
また、同じことを繰り返し説明しています。同じことをさまざまな表現や素材で表現して複数の意味を持たせることで、学んだ内容が脳のさまざまな領域に記憶される可能性が高くなります。
脳は目新しいものに向かうようになっているので、概念と絵や写真を予想外の方法で使うようにしました。また、脳は感情の動きに注目するという特性があるので、少なくとも何らかの感情に訴えるような形で使いました。その感情がちょっとしたユーモア、驚き、興味にすぎなくても、何かを感じさせた内容は記憶される可能性が高くなるのです。
読者ひとりひとりに話しかけるような文体を使いました。脳は、受け身の姿勢で説明を聞いている
ときより会話をしているときのほうが注意を払うようになっているからです。こうした脳の働きは本Python のインタプリタになってみようを読む場合でも同じです。
脳は何かを読んでいるときより何かを行っているときのほうが学習効果が高いので、120 問以上の練習問題を収めました。練習問題のレベルは「難しいけれども実行可能」というくらいにしてあります。ほとんどの人がそのくらいのレベルの問題を好むからです。

重要ポイント

複数のアプローチで学べるようにしています。基礎から順を追って学習するほうがいいという人もいれば、ともかくまずだいたいの概要をつかみたいという人、例だけが見たいという人もいるからです。好きなアプローチはそれぞれに異なっていても、同じ内容を複数のアプローチで表現していれば誰もが納得するでしょう。
左脳と右脳の両方を使う内容を盛り込んでいます。脳を使う箇所が多いほど、学習や記憶の効果が高まり、集中力も持続します。一方の脳が働いているときには他方の脳を休ませられるので、長い

クロスワードパズル

目で見ると学習の生産性が上がります。
複数の観点を示す話題や練習問題を含めるようにしています。脳は、評価や判断を強いられたときのほうがより深く学習するようになっているからです。
練習問題を用意したり、必ずしも簡単な答えが出ないような質問をしたりすることで、課題が生じるようにしています。なぜなら、脳は何かに取り組む必要があるときに学習し記憶する特性があるからです。ジムで人を見ているだけでは体を鍛えることはできせん。しかし、努力しているときは、確
実に力が付くように最善を尽くしているのです。難解な例を挙げたり、難しい専門用語を多用したり、逆にあまりに当たり前すぎる説明をしたりして、脳細胞を余計に使わせることはありません。
説明、例、絵や写真などに人物を登場させています。あなたもやはり人なので、脳は物よりも人に関心を持つからです。
80/20 のアプローチを採用しています。プログラミングの達人になるつもりなら、この本だけでは十分ではないと考えています。この本ではすべてを取り上げてはいません。本当に必要になることだけを取り上げています。

xxviii

彼らが付き合って
くれます。

はじめに

脳を思いどおりにさせるためにできること
この本は最善を尽くしていますので、あとはあなた次第です。次のヒントはここから下を切り取って、冷蔵庫にでも貼っておくといいでしょう。

第一歩にすぎません。脳に耳を傾け、何が役に立ち何が役に立たないかを把握してください。新しいことに挑戦してみましょう。

1 時間をかけて読みましょう。理解すればするほど、覚えなければならないことの数は少なくなります。

ただ読むだけでなく、ときどき読むのを止めて考えましょう。本の中で問題が出されても、すぐに答えを見な
いでください。誰かから本当に質問されていると思いましょう。脳に深く考えさせればさせるほど、学習や記憶の効果が高まるのです。

2 問題を解きましょう。自分のノートに書き込んでください。

この本には「自分で考えてみよう」「エクササイズ」「コー
ドマグネット」
といった練習問題を載せていますが、私たちが問題を解いてあげてしまったら、あなたのために他人がトレーニングしているようなものです。練習問題を見ているだけではいけません。実際に鉛筆を使って取り組んでください。学習中に体を動かすと学習効果が高まります。

3 「素朴な疑問に答えます」を読みましょう。
このコーナーはとても大切です。これは内容を補足する
ものではなく、むしろ核心となる内容の一部なのです！
読み飛ばさないようにしましょう。

4 この本を読んだあとは寝るまで他の本を読まないよ

うにしましょう。少なくとも、難しいものは読まない
ようにしましょう。
学習の一部、特に学習内容の長期記憶への転送は、本を閉じたあとに行われます。脳が次の処理を実行するには時間が必要です。この処理中に新たに別のことを学習す
ると、前に学習したことが一部失われてしまいます。

5 水をたくさん飲みましょう。
脳は十分な水分がある状態で最もよく働きます。脱水状態（のどが渇いたと感じる前に起こります）になると認知機能は衰えます。

6 内容をはっきりと声に出してみましょう。
話すことは脳の別の部分を活性化します。何かを理解したい場合やあとで思い出しやすくしたい場合には、はっきりと声に出してください。さらによいのは、それを他の誰かに明確に説明してみることです。そうすると、学習の効率が上がり、読んだだけではわからなかった概念がはっきりするかもしれません。

7 脳に耳を傾けましょう。
脳に負担をかけすぎないように注意しましょう。内容を表面的にしか理解できなくなったり、読んだばかりのことを忘れるようになったりしたら休憩してください。ある限界を超えると、それ以上詰め込もうとしても学習の効率は上がらず、かえって学習を妨げることもあります。

8 感情を持ちましょう。
脳は重要であるかどうかを判断する必要があります。話に集中しましょう。写真や絵などに自分なりの注釈を入れるのもよい方法です。くだらないジョークに文句を言うだけでも、何も感じないよりはるかにいいのです。

9 何か作ろう。
計画中の新規案件を作成するか、昔のプロジェクトを改良しましょう。この本の練習問題や作業以外にも何かをやってみて経験を積んでください。必要なのは鉛筆と解決すべき課題だけです。プログラミングの恩恵を受ける
課題です。

10 よく寝よう。
プログラミングを学ぶには新たに多くの脳神経の結合が必要です。よく寝ましょう。睡眠が役立ちます。

xxix

この本の読み方

初めに読んでね
この本は順を追って読みながら学習を進めていく本であり、辞書のようなリファレンスではありません。そのため、学習の障害になりそうな内容についてはあえて割愛しています。この本を初めて読む場合には、1 章から順番に読んでください。それまでの章で学んだことを前提に話を展開しているからです。

プログラミングの背後にある思考プロセスを学んでほしい。
その思考プロセスをコンピュータ科学と呼ぶ人もいますが、少し秘密があります。コンピュータ科学は科学ではなく、それほどコンピュータに関連しているわけでもありません（天文学が望遠鏡に関連していないのと同じです）。コンピュータ科学は考え方です（最近ではコンピュータ的思考とも呼ばれます）。コ
ンピュータ的な考え方がわかると、課題、環境、プログラミング言語に適用しやすくなります。

この本では Python を使う。
自動車なしで運転を学ぶのはあまり実用的ではありません。プログラミング言語なしでコンピュータ的な考え方を学ぶのは、売りになるスキルというより思考実験です。そこで、この本では人気の Python を使います。1 章では Python のよさを詳しく説明しますが、趣味で使うのか高収入を得るソフトウェア開発者になりたいのかにかかわらず、手始めとしては（そして、おそらく最終的にも）Python が適しています。

Python 言語のあらゆる側面を包括的に取り上げているわけではない。
包括的には程遠い内容です。Python について学べることはたくさんあります。この本はリファレンス本ではなく学習するための本なので、Python について知っておくべきことをすべて取り上げているわけ
ではありません。この本の目的はプログラミングとコンピュータ的な考え方の基本を教え、どのプログラ
ミング言語の本を選んでも途方にくれないようにすることです。

さらに、Mac、Windows PC、または Linux を使える。
この本では主に Python を手段として使います。Python はクロスプラットフォームなので、使い慣れた OS で利用できます。この本のスクリーンショットの大部分は Mac のものですが、みなさんの Windows

PC や Linux マシンでも同じように見えるはずです。

この本ではベストプラクティスに基づいた適切な構造の読みやすいコードを推奨している。
自分や他者が読んで理解でき、将来の新しいバージョンの Python でも機能するコードを書きたいでしょう。この本では、最初からわかりやすい適切な構造のコードを書く方法を教えます。満足のいく、額に入れて壁に飾りたいようなコードを書く方法です（デートに連れてくる前に外してください）。プロが書くコードとの唯一の違いは、この本ではコードの隣に手書きの注釈を付けてそのコードが何をするかを説明している点です。学習のための本では、そのほうが従来のコード内のコメントよりも効果的であることに気付いたからです（何を言っているのかわからなくてもすぐにわかります。何章かで試してみてください）。しかし、コードにコメントを付ける方法を教え、コードへのコメントの例も示すので心配しないでください。とはいえ、最も簡単にコードを書き、やるべきことをやってさらに優れた処理に進めるようにしたいと思っています。

xxx

このような注釈

はじめにプログラミングは大事な作業である。時には懸命に取り組まなければいけない。
プログラマは異なるものの見方をし、異なる考え方をします。コーディングがとても論理的だと思うこともあれば、そこまでショッキングではないにしてもかなり抽象的だと感じることもあります。理解するのに時間のかかるプログラミング概念もあります。実際に、一晩考えないと理解できないものもあります。しかし、心配しないでください。この本では脳に優しい方法でそのすべてに取り組みます。マイペースで取り組
み、時間をかけて概念を理解し、必要ならこの本の内容を何度も繰り返し読んでください。

練習問題を省略しない。
「自分で考えてみよう」「エクササイズ」「コードマグネット」といった練習問題は付けたしではありません。この本の重要な本文の一部です。記憶や理解を促すものもあれば、学んだことを応用する際に役立つものもあります。練習問題を飛ばすと、この本の大半をみすみす見逃してしまうことになります（おそらくかなり困惑するでしょう）。飛ばしてもいいのはクロスワード
パズルだけですが、用語を別の見地で考える機会を脳に与えてくれるものです。

あえて冗長にしている。これは重要。
Head First シリーズは、読者に内容を本当に理解してほしいという点が他の本と異なります。
一冊を読み終えたときに、学習したことを覚えていてほしいのです。ほとんどのリファレンス
本は、記憶することや思い出すことを目的としていません。本書は学習に目的を置いているため、同じ概念を何度も取り上げることがあります。

例はできるだけ簡潔にしてある。
理解する必要のある 2 行のコードを探すのに、200 行の例を苦労して読まなければいけないのはイライラすると読者から言われたことがあります。この本のほとんどの例は最小限の文脈だ
けを示しているので、学習したい部分が明確で単純になっています。すべての例が完璧であるとは思わないでください。学習しやすいように作成したものなので、必ずしも完全に機能するオペレータは待機していませんが、必要なコードとサ
ンプルファイルは https://

wickedlysmart.com/
hflearntocode から入手できます。

わけではありません。一方、長いコードの例では、友達や家族に見せたくなるような楽しく、興味を引く、素晴らしい例になるようにも努めています。
サンプルコードのファイルはすべて Web からダウンロードできます。https://wickedlysmart.

com/hflearntocode（原書のサイト）または https://www.oreilly.co.jp/books/9784873118741/（日本
語版のサイト）から入手してください。

能力発揮には通常は答えがない。
「能力発揮」のセクションには正しい答えがないものもあります。また、答えが正しいかどうかを判断したり、どのような場合に正しいかを判断することもあります。一部には、正しい方向へ導くためのヒントもあります。

サンプルコード、ヘルプ、解説をオンラインで入手する。
コード例のファイルや追加の補足資料など、この本で必要なものは https://wickedlysmart.

com/hflearntocode あるいは https://www.oreilly.co.jp/books/9784873118741/ から入手できます。

xxxi

1 章 コンピュータ的に考える

始めよう

コンピュータ的な考え方をすることにより自分をコントロールすることができます。
世の中は、ますます多くのものがつながり、設定可能になり、プログラム可能になり、いわゆるコンピュータ的になっています。受動的に関わることもできますが、コードの書き方を学ぶこともできます。そしてコードを書くことができれば主導権を握ることができます。あなたのためにコンピュータを実行させることができるのです。コードが書けると、自分の運命を変えることができます（少なくともインターネットに接続された芝生のスプリンクラーのプログラミ
ングができるようにはなるでしょう）。しかし、どうやってコードの書き方を学ぶのでしょうか。まず、コンピュータ的な考え方を学びます。次に、プログラミング言語を覚えます。すると、
コンピュータ、モバイルデバイス、CPU を備えたデバイスが使う言語と同じ言語を使えるようになります。これにはどんなメリットがあるのでしょうか？ 本当にやりたいことをする時間が増え、能力が向上し、より創造性豊かな可能性が広がります。さあ、始めましょう。

this is a new chapter

1

分解する

分解する
初めて実際のコードを書くには、まず課題をコンピュータで実現可能な小さな動作に分解するスキルを学ぶ必要があります。もちろん、コンピュータと同じ言語を使う必要があります。詳しくは 7 ページで説明します。
課題をいくつかの手順に分解するというスキルは、聞き慣れていないかもしれませんが、実際には毎日行っています。簡単な例を考えましょう。例えば釣りの動作を簡単な一連の手順に分解してロボットに渡し、ロボットに代わりに釣りさせたいとします。その場合はまず次のように分解してみます。

魚を釣る動作を、簡単に理解できる
複数の手順に分解しましょう。

この手順に順番に従います。

浮き

釣り針
餌

2 1章

1

釣り針に餌を付ける。

2

池に釣り糸を垂れる。

3

浮きが水中に沈むまで待つ。

4

魚を釣り上げる。

5

釣りが終わったら家に帰る。終わりでなければ、手順「池に釣り糸を垂れる」というような手順は、
簡単な指示（すなわち文）です。
条件が満たされるまで待って先の処理に進む文もあります。

上の文で浮きが水中に沈んだときだけ
この文を実行します。

に戻る。

文は判断することもできます。
家に帰るか釣りを続けるかなどの判断です。

このように文は繰り返されるものです。
家に帰らないなら、代わりにまで戻って手順を繰り返し、別の魚を釣ります。

1 章 コンピュータ的に考える

前ページの文は釣りをするための親切なレシピと考えられます。
他のレシピと同様に、このレシピも一連の手順を示し、順番どおりに従うことで何らかの結果を生み出します（この例では、うまくいけば魚が釣れます）。
ほとんどの手順は、「池に釣り糸を垂れる」や「魚を釣り上げる」のような簡単な指示です。しかし、少し異なる指示もあります。例
えば、3 番目の文は「浮きが水面の上にあるか下にあるか」という条
件に依存します。最後の「釣りが終わっていなければ、最初に戻って釣り針に餌を付け直す」などは、レシピの流れを指示しています。
「終わったら家に帰る」は釣りを止める条件を示しています。
このような簡単な文や指示がコーディングの土台になることがだ
んだんとわかっていきます。実際に、これまで使ったことのあるア

実際のレシピは何をすべきかという手順だけではなく、料理を作るために使うオブジェク
ト（計量カップ、泡立て器、フードプロセッ
サ、そしてもちろん材料など）も示します。釣りのレシピで使うオブジェクトとは何でしょうか。前ページの釣りのレシピでオブジェク
トに該当するものに丸を付け、30 ページで答
えが合っているかを確認してから先に進んでください。

プリケーションやソフトウェアプログラムは、どれもコンピュータに実行すべきことを伝える簡単な（場合によっては多くの）指示なのです。

練習問題ですから、直接書き込んでかまいません。むしろ実際に書き込むことをお勧めします。

あらかじめ理解しておいてもらいたいことがあります。コンピュータは指示したとおりにしか動作しません。それ以上でも以下でもありません。前ペー
ジの釣りのレシピを考えてください。ロボットになってこの指示に正確に従うとしたら、このレシピで本当にうまくいくでしょうか。どのような問題が起こり得るでしょうか。
□ A. 魚 が い な け れ ば、 長 時 間（もしかしたら永久に）釣りをすることになってしまう。

□

D. 魚を釣り上げたら何をするかを指定したか？

□ E. 釣り竿は？
□釣りについてよく知らない人のために説明して
おくと、これが浮きです。魚が餌に食い付くと、
水中に沈みます。

B. 釣り針から餌が外れても気付かず、付け直すこともない。

□□ C. 餌がなくなった場合は？

F.
この問題の答えは、30ページにあります。
他にどんな問題が起こり得るでしょうか？

you are here3

レシピ、アルゴリズム、擬似コード

コーディングの勉強をしようと思って高い技術書を買ったのに、レシピの話を聞かなくちゃならないの？ あまり期待できそうにないし、技術的でもないわね。

実際、レシピはコンピュータへの指示を表す方法として最適です。
この本よりも高度なプログラミング書籍でも「レシピ」という用語が特に断りなく使われていることもあります。クッ
クブックと呼ばれる一般的なソフトウェア開発技法に関する本でもよく使われています。もちろん、「レシピ」という言
葉を使わずに技術的に説明することもできます。コンピュータ科学者やプロのソフトウェア開発者ならレシピのことをアルゴリズムと呼びます。アルゴリズムとは何でしょうか。
レシピとほとんど変わりありません。アルゴリズムは、最初は擬似コードと呼ばれる非公式なコードで書くことが多い

擬似コードについては 2 章から詳しく説明します。

でしょう。

1 つ覚えておいてほしいことがあります。レシピ、擬似コード、アルゴリズムについて説明する際は、まず問題の解
決方法の概要を示してから、コンピュータが理解して実行できる実際のコードの詳細を検討するようにします。
この本では、「レシピ」「擬似コード」「アルゴリズム」を必
要に応じて切り替えています。次の就職面接では、アルゴリ
ズムや擬似コードという言葉を使ってより多くの報酬を確保するといいでしょう（しかし、レシピという言葉でも問題はありません）。
さんのるためのたく
同じ料理を作
問題を
じ
同
、
に
う
よ
レシピがある
ルゴリズム
ア
の
の数多く
解決するためも特にそして、中でがあります。
。
すまがあり魅力的な方法

4 1章

こうすると
コーディングの作業が簡単になり、間違いが起こりにくくなります。

1 章 コンピュータ的に考える

コードマグネット
レシピアルゴリズムの練習を少ししてみましょう。Head First レストランの卵を 3 個使ったオムレツのアルゴリズムを忘れないように冷蔵庫のドアに貼っていましたが、誰かが順番を崩してしまいました。マグネットを正しい順番に直し、アルゴリズムを使えるようにしてください。なお、Head First レストランのオムレツには、プレーンとチーズの 2 種類があります。31 ページで必ず答え合わせをしてください。

注文がチーズオムレツなら：マグネットを並べ直してアルゴリズム
が正しく機能するようにしてください。

る

ズを加え

上にチー

卵がよく混ぜ合わされていなければ：
卵をお皿に移す

卵に火が十分通るまで：

ら下す

ンを火か

フライパ

卵をかき

混ぜる

客に提供

フライパンを火にかける

3個の

卵を割

ってボ

卵

ールに

く

溶

を

入れる
る

流し入れ

イパンに

卵をフラ

you are here5

コーディングの手順

コーディングの手順
コンピュータに何かタスク（コンピュータが処理する仕事のこと）を実行してもらいたい場合は、そのタスクをコンピュータが理解できる複数の指示に分割する必要があることはわかりましたが、実際にどのようにしてコンピュータに何かを実行するように指示するのでしょうか。しかし、プログラミング言語に深く足を踏み入れる前に、実際にコードを書く際の手順を調べましょう。

❶ アルゴリズムを作成する

1

釣り針に餌を付ける。

2

池に釣り糸を垂れる。

ド、アルゴリズムに変換します。これは、必要な結果を実現するためにコンピュータが実行する必要

3

浮きが水中に沈むまで待つ。

4

魚を釣り上げる。

がある手順を表します。

5

ここで解決したい問題やタスクをレシピ、擬似コー❷ プログラムを書く

次に、そのレシピをプログラミング言語で書いた

特定の命令に変換します。これがコーディングと呼ばれる作業で、その結果を「プログラム」または「コード」（さらに正式な名称は「ソースコード」
）と
呼びます。

❸ プログラムを実行する

最後に、ソースコードをコンピュータに渡し、コンピュータがその命令の実行を開始します。この段階
は、言語によってコードの解釈（interpreting）、実行（running、executing）、 評 価（evaluating）などと呼びます。

われわれもこの 3 つを同じ意味として使うことがあります。

6 1章

この段階ではプログラミング言語に変換する前に解決策を立てます。

釣りが終わったら家に帰る。終わりでなければ、手順に戻る。

def hook_fish():print(' 魚が釣れた！ ')def wait():print(' 待つ ')print(' 餌を取り出す ')print(' 釣り針に餌を付ける ')print(' 釣り糸を垂れる ')while True:
response = input(' 浮きが水中に沈んだか？ ')if response == 'yes':
is_moving = True
print(' 魚が食いついた！ ')hook_fish()else:
wait()

餌を取り出す釣り針に餌を付ける
釣り糸を垂れる
浮きが水中に沈んだか？

これが「コーディング」の段階です。アルゴリ
ズムをコード（ソース
コードの略）に変換し、次の段階で実行できる状態にします。

ソースコードが完成したら、実行の準備が整ったことになります。コードが適切に設計できていれば、期待した結果が得られるでしょう。

1 章 コンピュータ的に考える

同じ言語で話している？
プログラミング言語とは、コンピュータにタスクを明確に指定するために作成した専用言語だと考えてください。つまり、コンピュータが理解できるようにわ
かりやすく正確にレシピを表す手段なのです。
プログラミング言語を学ぶには、2 つのことをはっきりさせておきます。言語を使って何が表せるのかと、その意味です。コンピュータ科学者は、それぞれを言語のシンタックス（構文）、そしてセマンティクスと呼んでいます。この 2 つは
いまの段階では頭の奥深くにしまっておいてください。2 章で両方とも詳しく説明します。
世界中にさまざまな言葉がさくさんあるように、プログラミング言語も数多く

心 配 し な い で く だ さ い。ま だ
コー ドの 読み 書き がで きな くても大丈夫です。いまの段階ではコードに親しみ、コードの表
現や 動作 に慣 れる だけ で十 分です。この章で重要なのは全体を見渡すことだけです。

あります。もう気付いたかもしれませんが、この本では Python を使います。プロ
グラミング言語と Python についてもう少し理解を深めましょう。

この本で学ぶテクニックは、将来使うことになるどんなプログラミング言語にも適用できることが、そのうちにわかります。

左側は人間が使う言語で書いた文、右側はプログラミング言語で書いた文（コード）です。人間の使う文と、それに対応するコードを線で結んでください。1 番目だけは線を引いておきました。32 ページで答え合わせをしてから先に進みましょう。

画面に「やあ」と出力する。

for num in range(0, 5):
pour_drink()

気温が 22℃以上なら、画面に「短パンをはく」

name = input(' あなたのお名前は？ ')と出力する。
パン、ミルク、卵といった食料品の覧。

if temperature > 22:
print(' 短パンをはく ')5 杯の飲み物を注ぐ。

grocery_list = [' パン ', ' ミルク ', ' 卵 ']ユーザに「あなたのお名前は？」と聞く。

print(' やあ ')you are here7プログラミング言語の簡単な調査

プログラミング言語の世界
この本には、さまざまなプログラミング言語の名前が登場します。また、街中の書店のプログラミング
本のコーナーでも、（一部の例を挙げるだけでも）Java、C、C++、LISP、Scheme、Objective-C、Perl、PHP、

Swift、Clojure、Haskell、COBOL、Ruby、Fortran、Smalltalk、BASIC、Algol、JavaScript、そしてもちろんPython という名前を見かけるでしょう。このようなプログラミング言語の名前は何に由来しているのか
不思議に思うかもしれません。実は、プログラミング言語の名前はロックバンドの名前のようなものです。言語開発者にとっては意味があるのです。例えば Java は、予想どおりコーヒーにちなんでいます（開発者が気に入っていた名前の Oak は先に取られてしまいました）。Haskell は数学者ハスケル・カリーから、C はベル研究所で開発された言語 A と B の後継であったことに由来します。しかし、なぜこんなに多くの言語が存在しているのでしょう。それにそれぞれどういったものなのでしょうか。複数の人に、自分が使用している言語についての意見を聞いてみましょう。

僕のお気に入りは Objective-C。
一日中 iPhone アプリを作っているんだ。
Objective-C は C に似ているけどずっと動的だしオブジェクト指向なところが好きだな。Apple の新しい言語
Swift も勉強しているよ。

Javaではオブジェクトのレベルで考えられるし、メモリ管理やスレッドといったことも任せられるの。

僕は WordPress の世界で生きているよ。WordPress は PHP で書かれているから、PHP が僕の主力言語だね。
PHP をスクリプティング言語と言う人もいるけど、必要なことは何でもできるよ。

8 1章

1 章 コンピュータ的に考える

主に C 言語を使っている。OS の一部を書く必要があるから、効率性がすごく求められるんだ。実際の仕事ではあらゆる CPU サイクルとメモリ位置が重要なんだ。

研究者の私は Scheme や LISP 系の言語が好きだな。私にとっては高階関数と抽象化が重要なんだ。Clojure のような関数型
言語が実際に産業界で使われるようになっているのは嬉しいね。

Web 開発者の私は JavaScript を主に使うの。JavaScript はすべてのブラウザのデファクト言語だし、バックエンド Web サービスを書くのにも使われているわ。

私はシステム管理者です。よく Perl を使ってさまざまなシステムスクリプトを書いています。たった数行のコードで多くの仕事をこなすことができます。

you are here

9Pythonを選んだ理由

僕らは Python が好きだな。
読みやすくてわかりやすい言語として有名だし、多くのライブラリをサポートしているからどんな分野のコードでも書けるんだ。それに、熱心な素晴らしい
コミュニティもあるしね。

Python は初心者に最適な言語の1 つと言われているけど、スキルが向上するにつれて言語も一緒に成長するのよ。実用的な言語でもあって、Google、Disney、NASA など
は Python を使って本格的なシステムを構築しているのよ。

選択、選択、また選択
このように、多くの言語があり、多くの意見があります。いまの私たちは言語についてほんの少しかじっているだ
けです。また、言語には多くの専門用語が付随しているので、いまは戸惑うことも多いかと思いますが、学習を進めていくうちにその用語のことがよく理解できるようになるでしょう。現時点では、世の中にはすでに多種多様な言語があり、毎日のように多くの言語が生まれていることを覚えておいてください。
では、どの言語を選べばよいのでしょうか。いまは何よりもまず、コンピュータ的に考える方法を私たちは学びたいのです。そうすれば、将来どのような言語に出会っても習得しやすいからです。とにかく何らかの言語を使わなければならないので、私たちは Python を使うことにします。なぜでしょうか？ 上の友人たちがその理由をはっきりと述べています。Python はとても読みやすく一貫性があるので、初心者に最適な言語の 1 つと考えられています。また、強力な言語でもあります。Python を使って（この本や他のことで）何を実行するにしても、コード拡張（モジュールやパッケージと呼びます）というかたちでサポートがあり、開発者のコミュニティがサポートしてくれます。それに、Python は他の言語よりも楽しいと言う開発者もいます。Python を選んでおいて間違いはないでしょう。

10 1 章

1 章 コンピュータ的に考える

まだ Python のことをよく知らなくても、コードがどのように動作するかを十分推測でき
ると思います。次のコードがそれぞれ何をするか推測して、予想を書いてみましょう。わからなければ、次のページの答えを見てください。1 行目の答えは書いておきました（各単語の下に日本語の意味を記したので参考にしてください）。

Python の簡単さを確認する
customers = ['ジミー', 'キム', 'ジョン',
顧客

顧客リストを作成する。

'ステイシー']winner = random.choice(customers)
勝者

ランダムに選ぶflavor = 'バニラ'味

print('おめでとう ' + winner +出力' アイスクリームサンデーが当たりました！')

prompt = 'サクランボを乗せますか？ 'プロンプト

wants_cherry = input(prompt)
欲しい

チェリー

入力

order = flavor + 'サンデー '注文

if wants_cherry == 'yes':order = order + 'サクランボ乗せ'
print(winner + 'の' + order + '1つ '+' すぐにできます')
Python の出力

スクリームサンデーが当たおめでとう ステイシー アイ
りました！
yes
サクランボを乗せますか？
クランボ乗せ 1 つ すぐに
ーサ
ンデ
ラサ
バニ
ーの
ステイシ
できます

このコードの出力です。これがヒントになるでしょう。このコードはいつ
実行
しても同じ出力となるでしょうか？

you are here11

初めてのPython体験

まだ Python のことをよく知らなくても、コードがどのように動作するかを十分推測でき
ると思います。次のコードがそれぞれ何をするか推測して、予想を書いてみましょう。

Python の簡単さを確認する
customers = ['ジミー', 'キム', 'ジョン',

顧客リストを作成する。

'ステイシー']

変数に数値や文字列を設定することをプログラミング
では「代入」と言います。

winner = random.choice(customers)

顧客の 1 人をランダムに選ぶ。

flavor = 'バニラ'

flavor という名前（変数）にテキスト「バニラ」を設定。

print('おめでとう ' + winner +画面に客の名前が入ったおめでとうメッセージを出力する。
例えば、キムが当選した場合、このコードは「おめでとう キ
ム アイスクリームサンデーが当たりました！」と出力する。

' アイスクリームサンデーが当たりました！')
prompt = 'サクランボを乗せますか？ 'prompt という名前（変数）にテキスト「サクランボを乗せますか？」を設定する。

wants_cherry = input(prompt)

ユーザにテキストを入力するように要求し、そのテキスト
を wants_cherry に設定する。ユーザに入力を求めると、（Python の出力で示したように）まずプロンプトが表示される。

order = flavor + 'サンデー 'order にテキスト「バニラ」と「サンデー」をつなげて設定する。

ユーザが「サクランボを乗せますか？」という問いに yes と答えたら、order にテキスト「サクランボ乗せ」を追加する。

if wants_cherry == 'yes':order = order + 'サクランボ乗せ'
print(winner + 'の' + order + '1つ '+注文がすぐにできあがると出力する。

' すぐにできます')
Python の出力おめでとう ステイシー アイスクリームサンデーが当たりました！
サクランボを乗せますか？ yes
ステイシーのバニラサンデーサクランボ乗せ 1 つ すぐにできます

12 1 章

追伸：このコードを入力して試したいという誘惑にあらがえない場合は、ファイルの先頭に import random を追加してから実行してください。この文の意味は後で説明します。断っておきますが、現段階でこのコードはあまり参考にならないし、実行する必要はありません。でも試してみずにいられないという気持ちもわかります。自分のことは自分がよくわかっていますからね！

1 章 コンピュータ的に考える

Python を使ったコードの記述と実行
少しコードのことがわかってきたと思います。いよいよ本物のコードを実際に書いて実行してみましょう。前にも言ったように、コードの書き方と実行方法は言語や環境によってさまざまなやり方があります。どのように Python のコードを書いて実行するかをおおまかに理解しましょう。

❶ コードを書くード

あなたが書いたコ

まず、エディタにコードを入力して保存します。Windows のメモ帳やMac のテキストエディットなど、普段使っているテキストエディタを使ってコードを書くことができます。ですが、ほとんどの開発者は IDE（Integrated Development Environment：統合開発環境）と呼ばれる特殊なエディタを使います。なぜでしょうか？ IDE はワープロソフトに似ています。一般的な Python キーワードの自動補完、言語構文（または構文エラー）のハイライト表示などの多くの優れた機能に加え、テスト機能も備えています。また、Python は都合のよいことに IDLE という IDE を備えています。IDLE については 18 ページから説明します。

Python の IDLE
エディタ

❷ コードを実行する

コードの実行は簡単で、コードを Python インタプリタに渡すだけです。Python インタプリタは、書いたコードを実行するために必要な処理を行うプログラムです。すぐに詳しく説明しますが、インタプリタは IDLE や、コンピュータのコマンドライ
ンから直接利用できます。

Python インタプリタ❸ コードの解釈方法

Python は、人間とコンピュータの両方が理解できる言語だと主張してきました。これまで学んだように、インタプリタ
はコードを読んで実行する役割を果たします。そのために、
インタプリタは実は水面下でコードをマシンコードに変換
し、そのマシンコードはコンピュータハードウェアが直接実行します。インタプリタがどのように変換するかを気にする
必要はありません。インタプリタが Python のコードを実行

餌を取り出す釣り針に餌を付ける
釣り糸を垂れる
浮きが水中に沈んだか？

コードを実行する
インタプリタすることを知っていればよいのです。

you are here

13

Pythonとプログラミング言語についての詳細

に答えます

Q

：なぜ英語を使ってプログラミングしないのですか？ そうす
ればこのように特殊なプログラミング言語を学ばなくてい

いのに。

A

Q

：Python は初心者向けのトイ言語（ おもちゃの言語）にすぎないのですか？ ソフトウェア開発者になりたい場合、Python の学習は役に立ちますか？

：そうできればいいのですが、英語は曖昧な点だらけで、前述のような変換器を作るのが極めて困難です。この分野にA：Python は本格的な言語で、みなさんが愛用している多くの製品に使われています。さらに、Python は初心者にも適取り組んでいる研究者もいますが、プログラミング言語として英語した言語と考えられている数少ないプロ用言語の 1 つです。なぜや他の話し言葉を使うにはほど遠い状態です。また、英語に似たでしょうか？ 既存の多くの言語と比べ、Python は簡単な一貫性のものにしようとしている言語もありますが、プログラマは話し言葉にある方法で物事に対処します（このことは、徐々に Python や他のはあまり似ていない、もっとコーディングに効率的な言語を好みま

言語の経験を積むにつれよく理解できるようになります）。

す。

Q
A

：プログラミング言語はなぜ 1 つだけではないのですか？

Q：コードの書き方を学ぶこととコンピュータ的に考えることは何が違うのですか？ コンピュータ的に考えるとは単なるコンピュータ科学なのですか？

：技術的には、最近のプログラミング言語はすべて同じ演算ができるという点で同等なので、理論的には 1 つのプログラ

ミング言語であらゆるニーズを満たすことができます。しかし、話し言葉と同様に、プログラミング言語はそれぞれ表現力が異なります。つまり、ある種のプログラミングタスク（例えば、Web サイトの構築）には他の言語よりも適した言語があるのです。また、好みや特定の手法を利用するためや、さらには勤務先が採用しているからという理由だけでプログラミング言語を選ぶ場合もあります。しかし、プログラミング言語は進化し続けるので、ますますその数が増えるのは間違いないでしょう。

A：コンピュータ的な考え方は問題解決に関する考え方で、コンピュータサイエンスから生まれました。コンピュータ的に考えると、問題を分解して解決するためのアルゴリズムを作成し、その解決策を一般化する方法が身につくので、大きな問題も解決できます。コンピュータにそのアルゴリズムを実行させることがコーディングの役割です。コーディングは、コンピュータ（または、スマートフォンなどのすべてのコンピュータデバイス）にアルゴリズムを指定する手段です。そのため、この 2 つは実に密接に関連しています。
コンピュータ的な考え方はコーディングしたい問題の解決策を考案する方法であり、コーディングはその解決策をコンピュータに指定する手段です。コーディングしない場合でもコンピュータ的な考え方をすることは大切です。

Python という名前は何から由来すると思いますか？ 最もあてはまりそうな項目をチェックしてください。
□ A. 開発者はヘビが好き。彼は過去にもあまり出来のよくない言語 Cobra を開発したことがある。

□ D.「Programming Your Things, Hosted On
the Network」の頭字語。

□ B. 開発者がパイ（pie）が好きだったので、Piethon。

□ E. ランタイムシステム Anaconda に由来する。
Anaconda は Python をビルドする基盤環境。

□ C. イギリスのシュールなコメディグループの名前に由来している。
（Monty Python）
は、「空飛ぶモンティ・パイソン」（Monty Python's Flying Circus）というテレビ番組を制作しC.「モンティ・パイソン」
たイギリスのコメディグループ。下調べとしてぜひ彼らの番組を見てください。気に入るかどうかにかかわらず、Python コミュニティではモ
ンティ・パイソンはよく登場します。

14 1 章

1 章 コンピュータ的に考える

Python のざっくりした歴史

Python 1.0

Python 2.0

Python 3.0

オランダ国立情報数学研究所（National

Python は Python 2.0 に進化し、成長を完璧な人はいないように、Python のResearch Institute for Mathematics and続ける開発コミュニティを支えること

開発者たちも完璧ではありません。開Computer Science：CWI）で は 大 き なを目的とした新機能を備えました。例

発者たちが Python を見直して一部を問題に悩まされていました。この研究

えば、Python は真のグローバル言語で改良すべき時期が来ました。Python

所の科学者たちにとって、プログラミ

あると認められ、2.0 では英数字以外

は簡潔さを保っていることで知られてング言語の習得が研究の障害となっの多くの文字セットを扱うように拡張いましたが、使用が広がるにつれ一部ていました。高度な教育を受けた科学されました。また、言語の多くの技術の設計を改善し、古くなった部分を削者たちにとっても、最新のプログラミ面も改善されました。メモリ処理の改除する必要が出てきました。

ング言語はわかりにくく、一貫性がな

良や、リストや文字列などの一般的な

このような変更は、Python 2 の一部

かったのです。研究所はその救済策

データ型サポートの改善などです。

の機能がサポートされなくなることとして、新たな言語「ABC」（このときさらに、開発メンバーは Python を開発を意味しました。しかし、Python の開はまだ「Python」ではありません）を開者コミュニティ全体にオープンにする

発者は 2.0 コードを引き続き動作させ発しました。ABC は、学びやすいようように努め、開発コミュニティが言語る方法を保証したので、Python 2 で書に設計されていたので、ある程度成果や実装の改善に貢献できるようにしまかれたコードでも問題はありません。

は上がっていたのですが、週末にモンした。

Python 2 はまだ十分使うことができま

ティ・パイソンの再放送を一気に見た

すが、将来は Python 3 になることを覚

グイド・ヴァン・ロッサム（Guido van

えておいてください。

Rossum）と い う 野 心 的 な 若 い 開 発 者
は、ABC をさらに進化させることができ る と 考 え た の で す。Guido は ABC

実は、「週末に一気に見た」の部分は話を盛っています。

から学んだことを生かして、Python を
空飛ぶ車が Python 対応になることが予想できます。

開発しました。その後の話はあなたもご存知のとおりです。

1994

編集者からのコメント：「その後の話」は次の段落に書かれています。

2000

2008

未来 !
you are here

15

Pythonのバージョン

じゃあ、Python 2 と Python 3 の 2 つのバージョンがあるんだね。どっちを使うの？
Python 2 と Python 3 はどこが違うの？

いい質問ですね。あなたの言うとおり、Python には異なる 2 つのバージョンがあります。より詳しく言えば、この本の出版時点でのバージョンは Python 3.7 とPython 2.7 です。
バージョンについては次のように考えるとわかりや
すいでしょう。例えば、約 3,000 キロメートル上空から Python 2 と Python 3 を眺めると、同じように見えます。違いがまったくわからないかもしれませんが、実際には異なります。使用するバージョンに注意しないと痛い目に遭うでしょう。この本では Python の最新バージョン、つまり Python 3 を使います。将来に引き継がれるバージョンで始めてもらいたいからです。
世の中にはすでに Python 2 で書かれたコードがた
くさんあります。インターネットからダウンロードしたモジュールには必ずといっていいほど、Python 2 のコードが含まれています。また、ソフトウェア開発者
であれば、古いコードの一部に残っている Python 2 のコードをメンテナンスすることになるでしょう。この本を終わりまで読めば、Python 3 と Python 2 の小さな違いがわかるようになるでしょう。

Python 3、あるいは Python 2 と言う場合、それぞれの最新バージョンのことを意味します（この本の翻訳時点では Python 3.7 と Python 2.7）。

16 1 章

1 章 コンピュータ的に考える

Python を手に入れた？

Python をインストールしないことには、先に進むことはできません。
時間がなくて、まだインストールできていないのなら、いますぐインストー
ルしてください。
「はじめに」の「Python をインストールする」（xxxii 〜 xxxiii
ページ）が参考になります。Mac や Linux には、すでに Python がインストール
されているでしょう。でも Python 3 ではなく Python 2 の可能性が高いので、

Mac、Windows、Linux のいずれであっても、ここで Python 3 をインストールする必要があるかもしれません。

Python 3 がインストールできたら、本物のコードを書く準備は完了です。

you are here17

小さなテストプログラム

Python を試す
Python がインストールできたのでさっそく使ってみましょう。問題なく動くかを確認する小さなテストプログラムの作成から始めます。まず、エディタを使ってプログラムのコードを入力します。
ここでは Python エディタ＊ IDLE の出番です。
「はじめに」でも説明しましたが、まずは IDLE を開きます。Mac では［アプリケーション］→［Python 3.x］フォルダに IDLE があります。Windows では［スタート］ボタン→［すべてのプログラム］→［Python 3.x］を選ぶとメニューに IDLE が表示されます。
＊ IDE（ Integrated Development

Environment）とも言います。

タプリタのIDLE を開くと、対話型インす。
Python Shell が表示されまンタプリタに興味があれば、このイ、リターンを力しと入
1+1（1 足す 1）
くは 2 章で
詳し
い。
ださ
てく
押し
説明します。

IDLE を開くと、まず Python Shell と呼ばれる対話型ウィンドウが表示されます。Python Shell にはPython の文を入力することができます。IDLE メニューの［File］から［New File］を選ぶと、何も入力されていない編集ウィンドウが現れるので、ここに入力します。

［File］→［New File］を選択すると、新しいウィンドウが開くので、
コードを入力します。

18 1 章

1 章 コンピュータ的に考える

IDLE はワープロソフトと同様の機能を備えていますが、理解できるのは Python の
コードだけです。また、Python 言語のキーワードハイライトやフォーマットなど、入力をサポートする機能を備えています。さらに必要に応じて Python キーワードを自動補完するなど、入力の負担を軽減してくれます。

注意!
現在の IDLE で日本語を入力するのは不便です。ここでは macOS で日本語を入力する例を紹介します。Python のコマンドや予約語は、すべて半角で入力します。処理したい文字列に全角の日本
語（漢字やひらがな）を利用したい場合は、まずメニューバーで日本語入力になっていること、つまりメニューバーに「あ」が表示されていることを確認して行います。
本書の説明のように、IDLE の「File」メニューから「New File」を選びます。本の例では、print('rock!')のように、そのまま半角英字と記号を続けて入力（書くことが）できます。
「rock!」の代わりに、全角文字で「ロック！」にしたいときは、まず半角で［New File］を選択すると、新しいウィンドウが表示されます。

まだ何も入力されていない編集ウィンドウにコードを 1 行入
力して試してみましょう。さっそく次のコードを入力してくだ

print('You rock!')

能は、何色も使い分けてコードを表示します。紙の書籍ではこのページはモノクロなので、色の違いがわからないかもしれません。

と入力してから、シングルクォート（''）の間に日本語を入力します。クォート記号の間にカーソルを移動したら、メニューが全角の入力ができる状態であること、メニューバーに「あ」が表示されている、を確認します。ここで、ローマ字かな漢字変換でタイプしても、何も現れません。しかし、そのままスペースバーで確定します。すると、漢字が現れます。

さい。

IDLE のハイライト機

print('')

ファイルを保存するまで意味のあるファイル
名とはなりません。

また、IDLE のバージョン、
あるいは設定の違いにより、色やフォント、サイズがこのページとは異なる可能性があります。

IDLE の 右 端 の「Help」メ ニ ュ ー か ら「Python
Docs」F1 を 選 ぶ と 英 語 の マ ニ ュ ア ル が 表 示 さ
れ ま す。 日 本 語 の マ ニ ュ ア ル は https://docs.
「IDLE Help」
python.org/ja/3/ を見てください。
の 日 本 語 訳 は https://docs.python.org/ja/3/
library/idle.html にあります。現段階では翻訳途中のようです。
翻訳されていない英語の文章の意味を知りたいときは、英語に得意な友達に尋ねたり、Google 翻訳などを利用するとよいでしょう。

うによく注意してください。
スペルや句読記号は間違えないよ
言語でも句読記号のPython だけでなく、他のプログラミング
す。
多いで
ことが
となる
間違いに容赦せずにエラー

you are here19プログラムの保存方法

作業を保存する
入力した 1 行目のコードを保存しましょう。保存するには、IDLE メニューの［File］から［Save］を選びます。

コードを実行する前に、保存する必要があります。IDLE では、［Save］は［File］
メニューから選択します。
［Save］を選んでソースコードに名前を付けるだけで保存できます。Python のコードは、ファイル名の最後に拡張子「.py」を付けます。

ソースコード、ソースファイル、、
コード、プログラムという名前は
ている
存され
ドが保
もコー
いずれ
ファイルを指します。

そして、コードに名前を付け拡張子 .py を末尾に付けます。ここでは rock.
py という名前にします。ここでは示しませんでしたが、ch1 という 1 章用のフォルダも作成しました。みなさんも作成することをお勧めします。

この本と同じフォルダ名とファイ
ルになるようにしてください。詳
しくは、xxxiv ページの「コードのまとめ方」を参照してください。

rock.py

コード用のフォルダができたら、［Save］をクリックします。

20 1 章

1 章 コンピュータ的に考える

ここですべてうまくいっていることを確認しましょう。コードを保存したら、メニューの［Run］
から［Run Module］を選ぶと、Python Shell ウィンドウにプログラムの出力が表示されます。

「実行」「モジュール実行」

メニューの［Run］から［Run Module］
を選ぶとコードが実行されます。コードが保存されていなければ、IDLE から保存するように言われます。

おめでとう！ 最初の Python プログラムが書けました！
Python をインストールして、IDLE を使って短い実際のコードを入力して初めてのプログラムを実行することができました。次は、いきなり複雑なコードではなくてもよいのですが、何かを始めなければいけません。幸い、ここまでで準備はすべて整っているので、いつでも本格的なビジネスアプリ
ケーションのコードを書き始めることができます。

これが出力です。
予想どおりです！
（訳注：「You rock!」は「すごいね！」という意味です）

あなたがコードを実行するたびに、IDLE は Python インタプリタを再起動（restart）してコードを実行します。

you are here

21

Pythonと出力をさらに詳しく「You rock!」以外に表示されたものは？
コードの記述とテストは、間違いが起こりやすい工程です。1 回でうまくいかないのは当たり前です。われわれ開発者は、常にコードの間違いを修正しています。普段は次のことを心がけてください。
●

SyntaxError: invalid syntax のようなエラーが出たら、かっこが片方ないといった句読記号の間違いがないか探します。IDLE の場合はコードがハイライトされるので、すぐに場所が特定できます。

●

NameError: name 'prin' is not defined のようなエラーが出たら、スペルが間違っていないかといったタイプミスを調べるようにします。この例では print の t が抜けています。

●

SyntaxError: EOL while scanning のようなエラーが出たら、通常は文字列のシングルクォートが片方ないという意味です。'You rock!' のように 2 つのシングルクォートで囲まれていることを確認します。

に答えます

Q
A

：なぜ［Run Module］を使ってコードを実行するのです

画面に出力する手段だったからです。Python Shell ウィンドウに：Python では、コードが保存されているファイルをモジュール

は、print を使って出力します。一方、Python Shell からユーと呼びます。つまり、［Run Module］
は「ファイル内のすべて

ザ入力を取得するのが、先ほどの例で登場した input です。

の Python のコードを実行する」という意味です。また、モジュール
はコードの高度な構成手段でもあります。詳しくは 3 章で説明しま
す。

Q
A

Q
A

：Python から出力する手段は print だけですか？

：いいえ。最も基本的な方法が print であって、ほかにも：入力と出力とは具体的には何なのですか？

あります。コンピュータもプログラミング言語も出力（および入力）
は得意です。Pythonも例外ではありません。Python をはじめ、：現時点での入力と出力はまだ簡単なものだけです。出力

ほとんどの言語では、Web ページ、ネットワーク、ストレージデバイ

はプログラムが作成して Python Shell ウィンドウに表示する

ス上のファイル、グラフィックスデバイス、音声デバイスなどに出力

テキストのことです。入力はプログラムが Python Shell ウィンドウから受け取るテキストのことです。さらに広い意味では、マウス入力、
タッチ入力、グラフィックスや音声出力などのあらゆる種類の入力と出力が可能です。

Q

前でなくてもよかったのですが、print は従来から多くの言語でか？

：print はテキストをユーザに出力する方法だと理解しています。なぜ「print」という名前なのですか？ 初めて見たときには、プリンタで印刷するための何かかと思いました。

Aすることができます。

Q
A「やあ」という意味です。

：なるほど。では、print('hi there') と入力すると、一体何が起こっているのですか？

：Python に組み込まれた出力機能を使います。より具体的に言うと、print 関数に、クォート（引用符）内のテキストをPython Shell に出力するように指示しています。関数やテキストとはどういうものかについては後で詳しく説明しますが、いまの段階で：昔は画面よりもプリンタに出力することの方が多かったのでは Python Shell に出力する際は print 関数を使うことを覚えてす。その当時は「print」という名前が現在よりしっくり来

おいてください。

ていました。Python は比較的若い言語なので printという名

22 1 章

1 章 コンピュータ的に考える

ブール型の真実
今週のインタビュー：

本気なの？

なんと 5 行も必要です。それに読みにくいと思いません
か？ 初心者にとっては特につらいでしょうね。一体なぜこんなに必要なのでしょうね。本当に全部必要なのでしょうか？ では、私の場合を見てください。もちろん Python
で書いてますよ。

Head First：ようこそ、Python さん！ あなたが一体何者

print('Hello!')class HelloWorldApp {public static void main(String[] args){
System.out.println("Hello!");}}

こっちの方がずっとシンプルで読みやすいでしょう？ それにこのコードが何をするか、誰にでも伝わります。これはほんの一例ですが、Python はわかりやすくて英語に似ていて一貫性があるという印象を持たれているんです。
Head First：一貫性があるとはどういうことですか？
Python：一貫性とは、意外性があまりないというのが 1
つです。つまり、言語の一部を理解したら、他の部分もだ
いたい予想できて、そのとおりに使えることが多いのです。しかし、すべての言語がそういうわけではありません。
Head First：以前におっしゃっていたことに戻りたいのですが、航空管制、チップ製造、スペースシャトル用のメインソフトといった例を挙げていました。これはどれもとても工業的で特殊な目的のように思えます。Python がわ
れわれの読者にとって最適な言語であるのかよくわからないのですが。
Python：スペースシャトルなんて言っていませんよ。でも航空管制とチップ製造はそのとおり。本格的だと思っていただけそうな例として挙げました。Python は、Web
サイトの作成、ゲームの製作、デスクトップアプリケー
ションの作成などでよく使われています。
Head First：話題を変えてもいいですか？ 今メモを渡されたのですが、情報筋によると、Python には 2 つのバー
ジョンがあって、さらにはなんと、何て言えばいいんだろう、それぞれ互換性がないということなのですが。一体どこに一貫性があるというのですか？
Python：何事も同じですが、言語は成長し進化するものです。確かに Python には Python 2 と Python 3 の 2 つのバージョンがあります。Python 3 には Python 2 にはない
新しい機能がありますが、下位互換性を取る方法がありますよ。ここで読者に説明させてください。
Head First：残念ですがもう時間がありません。次回の奇襲、えっと、つまりお話しする機会を楽しみにしています。
Python：ありがとうございます。次回も喜んで ... 、たぶん。

なのかその正体を解き明かすのを楽しみにしていましたよ。
Python：お招きいただき光栄です。
Head First：さて、コメディグループにちなんで名付けられ、初心者用の言語として有名な Python ですが、正直、
あなたのことを本格的な言語とみなしてよいものでしょうか？
Python：私はありとあらゆるものに使われています。シ
リコンチップ生産ラインの管理から有名な映画製作をサポートするアプリケーション（いままで黙っていましたが、「ジョージ・ルーカス」とか）、航空管制システムのイ
ンタフェースとかにね。他にもありますよ。本格的だと思いませんか？
Head First：なるほど。では、そのように本格的な言語
なのに、一体どうして初心者が簡単に使えるのですか？
つまり、あなたがいま挙げたプロジェクトはどれも複雑そうですよね。普通、そのような複雑なプロジェクトを行
うには、本格的で複雑な言語が必要だと思うじゃないですか。
Python：私は初心者だけでなくエキスパートにも高く評価されているんですよ。その理由の 1 つは、コードがとても単純で読みやすいからなんです。例えば Java のコードを見たことがありますか？ Java では「Hello World ！」と表示させるだけでも大変ですが、Python なら 1 行で済むんです。
Head First：なるほど。読みやすいのですね。それは素晴らしい。でも、一体それが何だと言うのですか？
Python：せっかく Java の話が出てきたので、簡単な例を紹介しましょう。例えば「Hello!」と表示させたいとき、Java では次のように書きます。

you are here23

本格的なアプリケーションを書く

新製品のフレーズ・オ・マチック（Phrase-O-Matic：自動フレーズ作成機）
を試せば、上司やマーケティングの連中みたいに弁が立つようになるだろうよ。

Pythonに知らせるために、❶ ## ランダム機能を使うことを
randomモジュールをインポートする

import random
では、まじめに実際のビジネスアプリケーショ
ンを Python で書いてみましょう。この フレー
ズ・オ・マチックのコードを見てください。よくできていると思いませんか？

ださい！ いま一息入れてくはい、本当に理解することつ
体を少しず
何の段階では全ずつ読んで、コードを 1 行録が大事です。
記に脳、しの説明を確認をしているか
ント」
メ
コ
「
は
に
右のコード
し ま し ょ う。
ントとは # 記
い ま す。コ メ
て
れ
さ
加
も追
も の で、 コ メ
れたメモ的な
号の後に書かのかがはっきなドするコー
ントから何を考になる擬似メ ン ト は、 参
り し ま す。コ
ょ う。コ メ ンてもよいでしコードと考え説 明 し ま す。
で
章
しくは 3
、
トについて詳たと思ったらなく理解でき詳
コードを何とつず
行
1。
い
進んでくださ
次のページに
いきます。
て
し
明
しく説

24 1 章

3つのリストを作成する。動詞のリスト、形容詞のリスト、❷ ## そして名詞のリスト

verbs = ['Leverage', 'Sync', 'Target','Gamify', 'Offline', 'Crowd-sourced',
動詞のリスト'24/7', 'Lean-in', '30,000 foot']
adjectives = ['A/B Tested', 'Freemium','Hyperlocal', 'Siloed', 'B-to-B',
形容詞のリスト'Oriented', 'Cloud-based','API-based']nouns = ['Early Adopter', 'Low-hanging Fruit','Pipeline', 'Splash Page', 'Productivity',
名詞のリスト'Process', 'Tipping Point', 'Paradigm']❸ # リストから動詞、形容詞、名詞をそれぞれ1つ選ぶ

verb = random.choice(verbs)
adjective = random.choice(adjectives)noun = random.choice(nouns)❹ # 単語を「つなぎ合わせて」フレーズを作る

phrase = verb + ' ' + adjective + ' ' + noun

❺ # フレーズを出力する
print(phrase)

1 章 コンピュータ的に考える

フレーズ・オ・マチック
このプログラムを簡単に説明すると、3 つの単語リストからランダムにそれぞれ単語を 1 つの選び、その単語を組み合わせて（次の新規事業のスローガンにふさわしい）フレーズを作成して出力します。このプログラムに理解できないところがあっても大丈夫です。600 ページもある本のまだほんの 25 ページ目に来たばかりです。いま大切なのはコードにある程度慣れることです。

❶ import 文 は、Python の random モ ジ ュ ー ル に あ る 追

加 の 組 み 込 み 機 能 を 使 う こ と を Python に 知 ら せ ま す。

import 文は、コードが実行できることを拡張すると考えてください。この例では、ランダムに選ぶ機能を追加します。import がどのように機能するかについては、後で詳事業のスローガン

24/7 Freemium Productivity（フリーミアム生産性の年中無休化）

しく説明します。

Lean-in Hyperlocal Splash Page

次のように、リストの各要素をクォート（'）で括り、全体（超地域密着型のスプラッシュページに乗り出す）❷ 次に、リストを 3 つ用意します。リストの宣言は簡単です。
を角かっこで囲みます。

verbs = ['Leverage', 'Sync', 'Target','Gamify', 'Offline', 'Crowd-sourced','24/7', 'Lean-in', '30,000 foot']
リストに名前を付けておくと（ここでは verbs）、後で❸Python から作られた次期新規コード内から参照できます。
次に、リストからランダムに単語を 1 つ選びます。ここGamify Siloed Early Adopter（サイロ化した新し物好きのゲーム化）

Offline API-based Process（API ベースのプロセスのオフライン化）

Crowd-sourced Cloud-based Pipeline（クラウドベースのパイプラインのクラウド
ソース化）

ではリストから 1 つの要素をランダムに選ぶ random.

choice を使います。後で参照できるように、それぞれの要素を対応する名前（verb、adjective、noun）に代入します。

❹ 次に、3 つの要素（動詞、形容詞、名詞）をつなぎ合わせてフレーズを作ります。Python ではプラス記号（+）を使います。また、単語と単語の間に空白も挿入します。空白がな

いと、「Lean-inCloud-basedPipeline」のようになってしまいます。

❺ 最後に、print を使って Python Shell にフレーズを出力します。これでマーケティングフレーズの一丁上がりです！

random.choice は、Python の標準ライブラリの関数です。

「結合」とも呼びます。

者は、テキストをコンピュータ科学とを「連結」とつなぎ合わせるこ
葉は便利なので、
の言
。こ
呼びます
。
ちょく登場します
この本でもちょくyou are here25

フレーズ・オ・マチックコードの入力

コンピュータにコードを読ませる
あなたはすでにプログラムを 1 つ IDLE に入力し実行できていますが、ここでもう一度、手順を順番に説明しましょう。メニューの［File］から［New File］を選択し、新しいファイルを作成します。次に、24 ページのコードを入力します。

.,;!?: のような文字のことです。
単語と句読記号には特に注意を払ってください。
詳しくは後の章で取り上げますが、いまの段階では慣れておくだけで十分です。

タイプミスの例です。ハイライトされている箇所に注目してください。
このように表示されている場合はたいていタイプミス
なので、コードが正しいか再確認してください。

IDLE

は一般的なエラー
をハイライトしてくれます。エラーの種類によって、
コー
ド入力中にハイラ
イトされるものもあれ
ば、実行時にハイライトされるものもあります。エラーがあったら、コードを再確認して修正しま
しょう。
ーを
ここでは意図的にエラ
し
説明
応を
の反
E
入れて IDLドました。24 ページのコー
この
ば、
すれ
入力
を忠実に
ん。
エラーは表示されませ

コードを最後まで入力したので、保存します。IDLE メニューの［File］から［Save］を選び、ファイル phraseomatic.py として保存します。

IDLE はコードの役割によってコードに色を付けます。

さらにリターンキーを押した後に必要に応じてインデントを挿入してくれます。

空白や改行を追加すると、さらにコードが読みやすくなります。Python はほとんどの空白や改行を無視するので実行には影響しません（例外については 9 章で取り上げます）。

26 1 章

1 章 コンピュータ的に考える

フレーズ・オ・マチックを実行してみましょう。もう一度順を追って説明しますね。まずコードを保存して、メニューの［Run］から［Run Module］を選んで実行してください。Python

Shell ウィンドウで出力を確認すると、ほら、次期新規事業のスローガンが作成できています！

［Run］から［Run Module］を選んでコードを実行します。コードが保存されていないと、保存するように
IDLE から言われます。

A/B テストしたスプラッシュ
ページをゲーム化するよ！

クを何度か実行フレーズ・オ・マチッ
してください。
確認
力を
。出
した
しま

フレーズ・オ・マチックを再実行するには、まずコードのウィンドウをクリックし、もう一度［Run］から［Run Module］を選びます。

you are here27

コンピュータ的な考え方とコーディングのおさらい■

コードを書くには、まず問題を解決する簡■多くのプログラミング言語があり、それぞ■Python という名前はヘビからではなく、単な一連の手順に問題を分解する。
■

この一連の手順を問題解決のためのアルれ利点と欠点がある。

ゴリズム、または少しくだけてレシピと呼開発者がコメディグループのモンティ・パ

ぶ。
■

この手順は「文」という形式を取り、簡単なPython のわかりやすく一貫性のある設計返すことによるアルゴリズムのフロー制御を高く評価している。
■

ジョンがある。この本では Python 3 を使

科学から生まれた問題解決の考え方であう（ただし、その違いはほとんどの場合ごコーディングは、アルゴリズムの手順をコ

くわずか）。
■

ンピュータが実行できるプログラミング言■コンピュータが直接実行できるマシンコー

アルゴリズムは、人間が読みやすい擬似

ドに変換する。

コードで表してから実際のプログラミング
プログラミング言語は、コンピュータにタ■

Python には、専用の IDLE というエディ■

Python では、空白や改行を使ってプログタがある。

スクを示すために特別に開発された専用言語である。
■

28 1 章Python のコードはインタプリタが実行する。インタプリタは、Python のコードを語に変換する行為のこと。

言語に変換することもある。
■

Python 2 と Python 3 という異なるバー

コンピュータ的な考え方は、コンピュータる。

■

初 心 者 で も 経 験 豊 富 な プ ロ グ ラ マ で も、タスクの実行、判断、コードの一部を繰りを実行できる。
■

イソンを好きだったことに由来する。
■

ラムを読みやすくする。

英語など、人の言葉はかなり曖昧なため、

input と print はどちらもコマンドライ
ンで使うことができる、Python の入力おプログラミング言語としては不十分。

よび出力の関数。

■

1 章 コンピュータ的に考える

さあ、右脳を働かせましょう。
よくあるクロスワードパズルですが、答えの単語はすべて 1 章で登場しています（クロスワードの答えはアルファベットで記入してください）。
1

2

3
4

5

6

7

8

9

10
11

12

13
14

15

16

17

ヨコのカギ
1.
5.
6.
8.
10.
11.
12.
14.
16.
17.

アルゴリズムに対する一般向けの用語。
Python の IDE。
インタプリタやコンパイラへの入力。
人間が読めるコード。

Flying _____
レシピの技術的な言い方。
最高の初心者用言語の 1 つ。

タテのカギ
2.
3.
4.
9.
10.
13.
15.

プログラムの実行。
ソースコードの別名。
この本で教える考え方の種類。
コードには曖昧すぎる。
Python の支援者。
Head First レストランがこれを出す。

Python を使っている企業。

コンピュータが直接実行できるコード。
Python はこの種の言語。
Python はその 1 つ。

you are here29

練習問題の答え

実際のレシピは何をすべきかという手順だけではなく、特定の料理を作るために使うオブジェクト（道具、調理器具、材料など）も示します。釣りのレシピで使うオブジェクト（対象物）は何でしょうか。

1

釣り針に餌を付ける。

2

池に釣り糸を垂れる。

3

浮きが水中に沈むまで待つ。

4

魚を釣り上げる。

5

釣りが終わったら家に帰る。終わりでなければ、手順に戻る。

あらかじめ理解しておいてもらいたいことがあります。コンピュータは指示したとおりにしか動作しません。それ以上でも以下でもありません。2 ページの釣りのレシピを考えてください。ロボットになってこの指示に正確に従うとしたら、このレシピで本当にうまくいくでしょうか。

A. 魚 が い な け れ ば、 長 時 間（もしかしたら永久に）釣りをすることになってしまう。

D. 魚を釣り上げたら何をするかを指定したか？

E. 釣り竿は？
B. 釣り針から餌が外れても気付かず、付け直すこともない。

C. 餌がなくなった場合は？

」が「A 〜 E の全部
す。
で
う
よ
の
え
答

30 1 章F. 上手な投げ入れとは具体的にどのようなものですか？ 餌がスイレンの葉に乗っかってしまったら、もう一度投げ入れる必要がありますか？
通常は浮きが水中に沈んだら、魚を「ひっかけて」から釣り上げます。こ
こではそれについて何も述べていません。
釣りが終わったかどうかはどのように判断するのでしょうか？ 時間です
か？ 餌がなくなったときですか？ 別の条件でしょうか？
このレシピには推測することがたくさんあります。きっと上に挙げたほかにも規定されていないたくさんの指示を思い付くでしょう。

1 章 コンピュータ的に考える

コードマグネットの答え
Head First レストランの卵を 3 個使ったオムレツの（レシピ）アルゴリズムを忘れないように冷蔵庫のドアに貼っていましたが、誰かが順番を崩してしまいました。マグネットを正しい順番に直し、アルゴリズムを使えるようにしてください。なお、Head First レストランのオムレツには、プレーンとチーズの 2 種類があります。

ほかにも正しい並べ方はいくつかあるでしょう。
自分の答えと違っていても、この本の答えを理解し、自分の答えが論理的に筋が通っていることを確認すれば OK です。

これが元どおりにしたマグネットです！

フライパンを火にかける

最初に必要なものを準備します。
フライパンを火にかけ、卵を割ります。

3個の卵を割ってボールに入れる卵がよく混ぜ合わされていなければ：

卵を溶く

卵をフライパンに流し入れる。

よく溶きますそして、卵を卵を溶く部分をインデントしています。卵が混ざり切るまで溶き続けるという意味です。このことを別の方法で示してもOK です。

次に火にかけておいたフライパンに卵を流し入れます。

そして、十分火を通します。

卵に火が十分通るまで：卵をかき混ぜる
注文がチーズオムレツなら：上にチーズを加える
フライパンを火から下す

卵をかき混ぜる部分をインデント
しています。火が通るまで卵をかき混ぜ続けるという意味です。このことを別の方法で示しても OK です。
注文がチーズオムレツなら、チーズを追加します。

チーズの追加もインデントしています。注文がチーズオムレツの場合にだけ追加するからです。
パンを火でも、フライ
どちらの場合す。
お皿に移しまから下ろして卵をお皿に移す

客に提供

最後に、オムレツを客に出します。

you are here31

練習問題の答え

左側は人間が使う言語で書いた文、右側はプログラミング言語で書いた文（コード）です。人間の使う文と、それに対応するコードを線で結んでください。1 番目だけは線を引いておきました。
画面に「やあ」と出力する。

for num in range(0, 5):
pour_drink()

気温が 22℃以上なら、画面に「短パンをはく」

name = input(' あなたのお名前は？ ')と出力する。
パン、ミルク、卵などの食料品のリスト。

if temperature > 22:
print(' 短パンをはく ')5 杯の飲み物を注ぐ。

grocery_list = [' パン ', ' ミルク ', ' 卵 ']ユーザに「あなたのお名前は？」と聞く。

print(' やあ ')

1
3

7

J

A

の答え

T

8

A

P

S

E

U D O C O D E
TA

L G O R

12

P

Y

10

I

V

E

M
U
C H

L

E
R P

R E

T E
S

C O D E

O

L
T E

N E

M

13

E

R C U S

I

M A

L

I

O

14

G H

C

T H M

T H O NS

32 1 章

C
U

11

I

E

P

I

N

L

E

R

L

I

D

2

M

G

17

I

A

N

H

5

C

C O D E

E

16

P

G

M
9

I

X
4

S O U R C E

V

C

P
R

6

R E

R

I

15

I

I

T

S

Y

N
E
Y