ひよっこエンジニアがPythonを触ってみた

#はじめに

ご覧いただきありがとうございます！
そしてはじめまして！shii_yuです。
~~プログラミングほぼ未経験者ですが~~アドベントカレンダーを書かせていただくことになり初投稿をさせていただきます！
Pythonの知識が浅くご指摘があれば是非よろしくお願いします。
未熟ですがよろしくおねがいします。

#なぜPython？

アドベントカレンダーを書いてみたかったが、知識もなければアウトプットできるものもない私。
とりあえず初心者が作れるものを作ってみよう...と考え選ばれたのはじゃんけんでした！
if文だけでいけそうだし簡単でしょ！と思っていました。（すみません）
じゃんけんアプリを作ろう！となった時**言語**で迷ったのですがPythonを選ばせていただきました。
なぜPythonにしたかというと``あいうえお = あいうえお``(文字列＝文字列)が出来るからです:smirk:
プログラミング言語はいろいろありますがcやjavaなどは``あいうえお　＝　あいうえお``ができないらしいのです...。
厳密に言うと出来るらしいのですが文字コードやらなんやらややこしい！！よくわからん！！ってなりました。
JavaScriptもできるのですがイケてそうだしキてそうだしとりあえずPythonにしました。


#開発環境について
突然ですが、皆様のパソコンはMacですか？
ちなみに私はMacに憧れるWindowsユーザーです。
環境としましてはwindows10に入っているUbuntu 18.04でpython 3.3.6とpip 9.0.1をインストールして使っています。
環境構築についてはAnacondaがよく使われていると感じました。
今回は私が実装した方法（**Macに憧れるwindows10ユーザー向け**)での説明をしていきます。

##環境構築
####Windows Subsystem for Linuxのインストール 
1. 左下にある検索のところから「機能」と入力を行い、候補に現れる**Windowsの機能の有効化または無効化**を選択。
2. 以下の画像の**Windows Subsystem for Linux**にチェックを入れてokを押し指示に従いインストールした後に再起動を行う。
![python1.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/b8215d37-828a-167f-7763-1ed2e68c4c5d.png)

####Ubuntu 18.04 LTSのインストール
3. Microsoft Store」を開いていただき、「ubuntu」と検索すると**Ubuntu 18.04 LTS**が出てくるので選択し、インストールを行う。
![pyhonubuntu.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/29b115a5-7ecc-3e3a-12e6-907dcd11f2a3.png)

4. インストールが終わればプログラムを起動し、任意のユーザー名とパスワードを入力(今後必要になる)


####Pythonのインストール 
5. ここからはターミナルに以下のコマンドを(1)から順番に打ってもらい、Pythonを導入していく。

```terminal
(1) $ sudo apt update 
(2) $ sudo apt upgrade 
(3) $ sudo apt -y install python3 
(4) $ python3 -V 
```
（4）によって表示されたバージョンが，3.6以上であることを確認.
バージョンが表示されない場合はなんらかのウイルス対策ソフトが入っている可能性が大なのでその解除をしてみてください。

```terminal
(5) $ sudo apt -y install python3-pip 
(6) $ sudo pip3 install --user -U pip 
(7) $ sudo pip3 install --user -U setuptools jupyterlab numpy matplotlib tensorflow 
```

以上でPythonとpipの導入は終わりです。
ターミナルで`jupyter lab`と打っていただければ、URLがでてくるのでそれをコピーしてブラウザに貼り付ければ以下の画面が出てきます。**Notebook**のPython3を押していただければソースコードを入力できる画面になり、Pythonを実行できます！
![pyhongamen.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/367bcda3-ec41-b6c5-1e55-03cc91dcf156.png)

#じゃんけんアプリについて

環境構築で疲れておしまい！と言いたいところですが、これから本題のじゃんけんについて話していきます！
###じゃんけんアプリの流れを考えよう！
作る前に流れを考えてみました。
・qが押されるまで何回でも入力でき、qが入力されると終わる。
・「グー」「チョキ」「パー」の入力をする。
・「勝ち「負け」「あいこ」の判定をする。
・「グー」「チョキ」「パー」以外入力されるともう１度入力できる。
・相手の手はrandomを使ってみる。

##じゃんけんアプリに必要なこと
その１　変数の宣言
その２　入力と出力
その３　判定文
その４　繰り返し文
その５　random

とりあえず順番に考えていくことにします！

###その１　変数の宣言
基本中の基本中の基本というやつですね。（しかしだいたいここがわけわからん）
私はCやJavaに少し触れてきたので、変数の宣言といえば**int a = 0**や**var a = 0**他にもなんかごちゃごちゃした書き方があったり、intやstring型、double型などいろいろな型の指定をしなければいけなかったり、まず、変数の宣言だけでも難しかったです。Pythonの宣言は以下のとおりです。

<div align="center">
<img src=https://qiita-image-store.s3.amazonaws.com/0/315790/0f11176b-18c6-ee27-4d9e-ec2289ff8f42.png "334.PNG">
</div>


なんと！！！！簡単！！！！！！なんと！！！便利。（型は勝手に考えてくれるだとかなんとか）ちなみに、型を付けたいときは型ヒントとかいうやつで**x: int**でつけれるみたいですね(１番下のやつです)便利。なぜ334なんでしょう...。

###その２　入力と出力
基本中の基本というやつですね。
出力は**printf()**で()の中に文字を入れてあげれば出力できます。
入力は**input()**で出来ます。
![input.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/428880dd-dc91-75d8-96b5-8864c8d180f8.png)

input関数は入力されたデータを文字列として返します。
「グー」「チョキ」「パー」でじゃんけんしたい私にとってはとても嬉しいですね。
整数型に変更したい場合は`int(input("入力してください")`とする必要があります。

###その３　判定文
勝ったか負けたかの判定文が必要です。
Pythonのif文はどうやら**インデント**で区切られる...?!波括弧({})がいらない!?!?
判定文は以下のようにインデントで区切られるみたいですね。
![ifbun.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/c3fa17de-9c1a-6624-ca8d-f6bcfeb8e902.png)

（他言語では、if文の中身が1行だけのときは波括弧つけなくてもいいのに、つけてたくらいの愛用者でした。）
悲しい。インデントが規格であるらしいですね。これは仕方がないので従うしかないですね。

###その４　ループ文
ループ文はwhile文といわゆるfor文があります。今回は**while文**を使用します。
while文はある条件が行われるまで、for文は何回分といった感じなので、while文が向いていると思いました。
ループ文もやはりとは思いましたが**インデント**で区切られます。Pythonでwhile文を書くと以下のようになります。
![while.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/ac14f0c0-eda4-ce93-19c6-bc08d7f2e40b.png)

インデントでループ文を記述する、絶対ややこしいと思いましたが、仕方がないので従うしかないです。
なれてくると、こっちのほうがやりやすいのでしょうか？永遠の疑問ですね。

###その５　random
敵の手を決めるためにrandomな整数がほしいということで、randomを使います。Pythonには標準ライブラリと呼ばれるものに関数random()があるので、`import random`の記述を行えばrandom()でrandomな整数がどこでも呼び出すことが出来ます。今回はrandom(1,3)の３つの数字の中でグーチョキパーを決めていきます。


#実際にソースコードを書いていこう！
この５つさえあれば簡単にソースコードがかけるはず！！
ってことで書いていきました。
勝手にいくつか機能を付け加えてみました。

```python:janken.ipynb
import random
py_number = random.randint(1,3)
my_hand = input("グーかチョキかパーを入力してください。終了する時はqを押してください。")

while my_hand != "q":
    if py_number == 1:
        py_hand = "グー"
    elif py_number == 2:
        py_hand = "チョキ"
    else:
        py_hand = "パー"

    if  my_hand == py_hand:
        judge = "あいこ"
    else:
        if my_hand == "グー":
            if py_hand == "チョキ":
                judge = "勝ち"
            else:
                judge = "負け"
        elif my_hand == "チョキ":
            if py_hand == "グー":

                judge = "負け"
            else:
                judge = "勝ち"
        elif my_hand == "パー":
            if py_hand == "グー":
                judge = "勝ち"
            else:
                judge = "負け"
        else:
            my_hand = input("グーかチョキかパーを入力してください。")
            continue           
        
    print(f'あなたの手は{my_hand}で相手の手は{py_hand}なので')    
    print(f'結果は{judge}です。')

    py_number = random.randint(1,3)
    my_hand = input("グーかチョキかパーを入力してください。終了する時はqを押してください。")
        
```

###実行結果

![gutyokipa.PNG](https://qiita-image-store.s3.amazonaws.com/0/315790/4dedd359-d0fd-b996-3e20-78c01ebac798.png)

#やってみて
頭の中では思い浮かんでも、実際にコードを書くと全然思い通りにいかないなと思いました。
このソースコードを見られた方は「何回inputあるんだ」とも思っていらっしゃるかもしれません。
**きれいなコード**と言われるものを書くのは難しいとしみじみと感じました。
特に！！！！！どこまでがwhileでループが回っているんだ！！！と何回も無限ループに陥り....
あと、continueがなかなか出てこず、グーチョキパー以外の文字でも判定されるようになったり.....。
じゃんけん簡単！if文だけでできるでしょ！って思ってたのが大間違いでした。

#最後に
この記事を読んでくださった方は、プログラミングを始めたばかりの人、プログラミングに深く関わってきてる人、様々な人がいると思います。
私もプログラミングが難しくてよくわからんくて無理やばいとか思うことが何度もあります、なんなら今も思っています。
しかし、それを乗り越えると楽しさが残ると思います。無理もうプログラミングやめたいいと思っている方
プログラミングは楽しみながらしましょう！そして楽しいプログラミングライフを送りましょう！！！

P.S.綺麗なソースコードをかけるようになりたいですね。