絵本でPython入門した

#はじめに
[コーディング フォー ビギナーズ PYTHON](https://www.amazon.co.jp/dp/4822254550/ref=cm_sw_r_tw_dp_U_x_xfGeCbTMTTMKF)という海外のプログラミング絵本の翻訳本が発売されました。
Pythonは今をときめく人気の言語ですが、スマホアプリ開発をしていると中々そこまで手が回らず...
という状態だったのですが、弊社の社長がこの本の翻訳をし、本もいただいたのでこの機会に試してみようと思います。

#環境構築
まずは[Python公式サイト](https://www.python.org/downloads/)からインストーラをダウンロードし、インストーラに従ってPythonをインストールします。
確認時点ではPython3.7.1でした。
インストールが完了するとアプリケーションフォルダにPython3.7というフォルダが作成されます。

#Hello World!
1. Python3.7フォルダに、IDLEというアプリケーションファイルがあります。
![スクリーンショット 2018-12-13 16.10.07.png](https://qiita-image-store.s3.amazonaws.com/0/49742/f734ebb9-58b0-5874-4512-3ac80ebe73a1.png)
2. 実行するとシェルウィンドウが表示され、```print("Hello World!")```と入力してENTERキーで実行すると```Hello World!!```と表示されることが確認できます。
![スクリーンショット 2018-12-13 16.31.54.png](https://qiita-image-store.s3.amazonaws.com/0/49742/b694562b-fec2-3780-52c0-e5b3a1d94d40.png)

#Hello World! その2
シェルウィンドウではファイルをセーブすることができないので、今度はファイルを作成して```Hello World!```と表示させてみます。

1. シェルウィンドウを表示させた状態で[File]->[New File]を選択します。
エディタが表示されるので、シェルウィンドウと同じく```print("Hello World!")```と入力します。
![スクリーンショット 2018-12-13 16.37.57.png](https://qiita-image-store.s3.amazonaws.com/0/49742/ac50810b-07e4-36ce-1c6b-0faa1600d64f.png)

2. [File]->[Save]を選択してファイルを保存します。
名前は「Hello World」にしました。
![スクリーンショット 2018-12-13 16.39.51.png](https://qiita-image-store.s3.amazonaws.com/0/49742/85c8603d-5d17-0bdf-dfab-ed05b92f02a2.png)

3. [Run]->[Run Module]を選択するとシェルウィンドウで```Hello World!!```と表示されます。
![スクリーンショット 2018-12-13 16.43.10.png](https://qiita-image-store.s3.amazonaws.com/0/49742/03839350-62c8-a97c-b3ae-8aea45b61a0a.png)

※保存済みの他のPythonファイルを実行したい時は実行したいファイルをIDLEアプリケーションで開いて[Run]->[Run Module]を選択すれば実行されます。

#全体の流れを作る
HelloWorldしかやってないですが、早速一連の流れのあるプログラムを書いてみます。
[コーディング フォー ビギナーズ PYTHON](https://www.amazon.co.jp/dp/4822254550/ref=cm_sw_r_tw_dp_U_x_xfGeCbTMTTMKF)に同じタイトルの章があり、そこで説明されているプログラムを書いてみました。
書き上がったコードはサンプルとして下に載せてあります。

##変数に代入する
プログラムの流れの中で値を扱うには変数に入れる必要があります。
Pythonでは```val```や```var```、型を書く必要はないようです。

```python:
value = "hoge"
```


##変数に入力値を代入する
プログラムの中で、ユーザーの入力した値を使うこともできます。
```input```関数を使うと()内の文字列が表示され、ユーザーの入力を待つ状態になります。
ユーザーが入力をし、ENTERキーを押すと入力された値が変数valueに代入されます。

```python:
value = input("入力してください")
```

##条件分岐
変数に代入された値を使って条件分岐をすることができます。
条件文は```==```演算子を利用してで変数valueと右辺が同じかどうかをチェックさせています。
valueの値がhogeの場合は処理１、hugaの場合は処理２、それ意外は処理３を実行するという処理は下記のように記述します。

```python:
if value == "hoge":
    #処理1
elif value == "huga":
    #処理2
else:
    #処理3
```

##乱数
乱数を使う場合はrandomモジュールをインポートします。
```import random```と記述することでrandomモジュールの関数が利用できるようになり、下記の例では1〜10の間のランダムな整数を生成して変数に代入しています。

```python:
import random
number = random.randint(1, 10)
```

##whileループ
ループには複数の種類がありますが、ここでは```while```が使われていました。
```!=```演算子は変数valueと右辺が同じでないことをチェックしています。
valueの値がhugaでない場合に繰り返し実行するという処理が下記のプログラムです。
処理の中で、valueの値が書き変わると次の繰り返しは実行されなくなります。

```python:
while value != "huga":#valueがhugaでなければ繰り返す
    #処理
    value = "huga"#ループを抜けるためにvalueをhugaに変更する
```

##サンプルコード
絵本の説明に沿って出来上がったコードから少しだけ手を加えたコードです。
プログラムとしてこの書き方が良いか悪いかは置いておいて、動いてちょっと遊べるプログラムなので書き上げた後で実行してみると思いの外楽しかったです。

```python:
import random

exitChoice = "Nothing"
while exitChoice != "EXIT":
    print("君は神秘的な城の暗い部屋にいる。")
    print("目の前には4つのドアがある。君はどれかひとつを選ばなくてはならない。")
    playerChoice = input("1から4の番号を選んでください...") #条件分岐に使うplayerChoiceを書き換える入力を待っている

    while playerChoice != "1" and playerChoice != "2" and playerChoice != "3" and playerChoice != "4":
        playerChoice = input("1から4の番号を選んでください...")

    if playerChoice == "1":
        print("宝物でいっぱいの部屋を見つけた！大金持ちだ！")
        print("おめでとう。君の勝ち！")

    elif playerChoice == "2":
        print("ドアが開くと怒り狂った人食い鬼が殴りかかってきた。")
        print("ゲームオーバー。君の負けだ")

    elif playerChoice == "3":
        print("部屋に入ると竜が眠っているのを見つけた。")
        print("どうする？")
        print("1: 竜の宝物を盗む")
        print("2: 見つからないようにこっそり出口に向かう")
        dragonChoice = input("1か2を選んでください")

        while dragonChoice != "1" and dragonChoice != "2":
            dragonChoice = input("1か2を選んでください")

        if dragonChoice == "1":
            print("竜が目をさました！君は食べられてしまった...。おいしかったらしい…。")
            print("ゲームオーバー。君の負けだ。")

        elif dragonChoice == "2":
            print("君は竜のそばをこっそりと通って城から抜け出せた。太陽の光がまぶしい。")
            print("おめでとう。君の勝ちだ！")

    elif playerChoice == "4":
        print("君はスフィンクスの部屋に入った。")
        print("スフィンクスが聞いてきた。「私が考えている数を当ててみろ。1から10までのどれかだ」")
        number = int(input("数字を選んでください..."))

        if number == random.randint(1,10):
            print("スフィンクスは残念そうにうなった。「正解だ...」")
            print("スフィンクスは君を解放した。自由だ！")
            print("おめでとう。君の勝ちだ！")

        else:
            print("スフィンクスは「違う」と言った。")
            print("君はスフィンクスに囚われてしまった。永遠に...。")
            print("ゲームオーバー。君の負けだ。")

    exitChoice = input("もう一度遊ぶにはEnterキー、終了するにはEXITと入力してください")#最後にwhileの条件になっているexitChoiceを書き換える入力を待っている
```

#感想
ここまで書いてみて、自分の中にあったPythonに対する壁のようなものを取り払うことができました。
わからないとなるところも特になかったのですが、普段使っているKotlinやJavaと比べると下記のような見慣れない表現に戸惑いました。
1. ```{}```がないことに違和感
2. ```else if```が```elif```なことに違和感
3. 条件文に```()```がないことに違和感
4. varとかvalとかStringとか書かないことに違和感

絵本なので子供向けですが、初めての言語を勉強するのには遊べるプログラムを書くという内容でとっつきやすいと思います。