Pythonの基礎を学ぼう【#2】

# はじめに
今回もPythonについて学んでいきます。
前回の続きになります。→　[Pythonの基礎を学ぼう【#1】](https://qiita.com/Hoshinon/items/62a6ee416eaa4582e03e)
環境はGoogle Colaboratoryを使います。

# if文を使う
ifは「もし～ならば」という意味。分岐する条件のことを**条件式**、条件式を使って処理を分岐させる文のことを**if文**といいます。if文のみ、if-else文、if-elif文などありますが、ここでは天気に応じて回答が変わる簡単なチャットボットを作ります。ちなみに```\n```は改行するという意味になります。

```diff_python
message = input("こんにちは、今日の天気を教えてください\n【選択肢:[晴れ][曇り][雨]】")
if message == "晴れ":
  print("それでは外に出てサッカーを始めましょう！")
elif message == "曇り":
  print("それでは映画館でアニメ映画を観ましょう！")
elif message == "雨":
  print("それでは室内でバドミントンを始めましょう！")
else:
  print("無効な値です")
```

# ここで問題！
入力した単語によって回答が変わるチャットボットを作成せよ。input文は「単語を入力してください」とする。ただし選択肢は「spring」「summer」「fall」「winter」とし、それ以外の値が入力されると「無効な値です」と表示させること。なお各分岐における回答は自由とする。

<!-- open属性なし -->
<details><summary>解答はこちら（解いてから見る）</summary>

下のコードは一例です。

```diff_python
message = input("単語を入力してください【選択肢:[spring][summer][fall][winter]】")
if message == "spring":
  print("お花見の季節ですね")
elif message == "summer":
  print("花火大会の季節ですね")
elif message == "fall":
  print("ハロウィンの季節ですね")
elif message == "winter":
  print("クリスマスの季節ですね")
else:
  print("無効な値です")
```

</details>

# 比較演算子について
今回は```==```をつかった条件式を作りましたが、ほかにもさまざまな種類があります。

| 演算子 | 意味 |
|:-----------|------------------------------:|
| ==         | 左辺と右辺は等しい              | 
| !=         | 左辺と右辺は等しくない          |
| >          | 左辺は右辺より大きい            |
| <          | 左辺は右辺より小さい            |
| >=         | 左辺は右辺より大きいまたは等しい |
| <=         | 左辺は右辺より小さいまたは等しい |

これらをつかった条件式を作ることも可能です。

# 論理演算子について
2つ以上の条件を組み合わせたい場合があります。例えば「100点満点のテストで80点以上が合格」の場合、```score >= 80```のみだと、1000点を入力しても合格になってしまいます。
そこで、
```diff_python
if score >=80 and score <= 100:
```
のように```and```を使うことで条件を組み合わせることが出来ます。
また論理演算子にも複数の種類があります。

| 演算子 | 意味 |
|:-----------|------------------------------:|
| and         | かつ              | 
| or         | または          |
| not          | でなければ           |

# ここで問題！
上級職へのジョブチェンジが可能かどうかを知りたい。input文を「あなたのレベルを数値で教えてください。」として、選択肢は**数値**の「30」「50」とする。もしユーザーのレベルが30または50であれば「上級職へのジョブチェンジが可能です。」、それ以外であれば「現在可能なジョブチェンジはありません。」と表示させなさい。


<!-- open属性なし -->
<details><summary>解答はこちら（解いてから見る）</summary>

input文はデフォルトではstr型として値を受け取る
今回の問題では入力が数値なのでint型として値を受け取るようにするのがコツ！

```diff_python
user_level = int(input("あなたのレベルを数値で教えてください。\n【選択肢:[30][50]】Lv."))
if user_level == 30 or user_level == 50:
  print("上級職へのジョブチェンジが可能です。")
else:
  print("現在可能なジョブチェンジはありません。")
```

</details>

# 型の種類について
先ほど出てきたint型（整数）ですがほかにも種類があります。

| 型名 | 意味 |
|:-----------|:------------------------------|
| int         | 整数型. 小数点、虚数を含まない数値    | 
| float         | 浮動小数点型. 小数点を含み、虚数を含まない数値         |
| complex | 虚数を含む数値 | 
| str          | 文字列. 文字や文章           |
| bool          | 真偽値型. TrueまたはFalse           |

変数にどのような値が入っているかを確認することも大切です。

# for文を使う
forを使うことで、繰り返す処理をおこなうことが出来るようになります。
例えば

```diff_python
for count in range(3):
  print("勇者のレベルが上がりました")
  print(count)
```

このように同じ言葉を何回も表示させることが出来ます。
また、

```diff_python
word = "こんにちは"
for Hello in word:
  print(Hello)
```

このコードを実行すると、word内の文字を順番に繰り返すことが出来ます。それぞれの要素に対して処理をすることが出来ます。

# ここで問題！
todo_listに「study」「game」「anime」が入っている。このリスト内の要素を順番に表示させなさい。リストとfor文を使うこと。


<!-- open属性なし -->
<details><summary>解答はこちら（解いてから見る）</summary>

for文を使うことでリストなども各要素に対して処理をおこなうことが出来ます。

```diff_python
todo_list = ["study","game","anime"]
for todo in todo_list:
  print(todo)
```

</details>

# while文を使う
while文を使うと「～の間」ずっと処理し続けるというコードを書くことが出来ます。
例えば

```diff_python
while(True):
  print("プログラミングする")
  print("プログラミングをもっとする")
  break
  print("プログラミングを終了する")
```

このようにするとTrueの間処理し続けるという意味になります。このコードではbreakに進むまで処理が続きます。
ただしここで注意したいのは、もしこのbreakがない場合、無限に表示され続ける「無限ループ」に陥ります。その際は実行を中断してループを止めましょう。

# ここで問題！
先ほどの例題コードを参考にして体力のある限りプログラミングをしたい。最初のHPを5として1ずつ消費していき、このHPの値が0になったらループを止めなさい。表示させるprint文は「プログラミングする」とする。

<!-- open属性なし -->
<details><summary>解答はこちら（解いてから見る）</summary>

このように条件分岐を行うことで行いたい処理を制御できます。

```diff_python
HP = 5
while(True):
  print("プログラミングする")
  HP = HP -1
  print(f"残りHPは{HP}")
  if(HP == 0):
    break
```

</details>

# 便利な関数を作ろう
プログラミングを行う上でよく使う関数。この関数は複数の処理を一つにまとめて、後から呼び出せるようにする機能となります。

ここではレベル上げのために自動で戦わせる関数を作ります。

```diff_python
def auto_command():
  print("たたかう")
```

簡単なものですがこれだけで関数が使えます。
関数を呼び出したいときは```auto_command()```を実行するとprint文が表示されます。

しかし、これだけでは物足りません。
関数を修正して敵の強さに応じて戦闘スタイルを変えてみたいと思います。

```diff_python
def auto_command(enemy_level):
  if(enemy_level >= 50):
    print("逃げる")
  elif(enemy_level >= 30 and enemy_level < 50):
    print("魔法を使う")
  else:
    print("たたかう")
```

このようにすることで敵の強さに応じて戦闘スタイルを変えることが出来ます。呼び出すときは```auto_command()```の```()```に敵のレベルを引数として入れることで処理が実行されます。

# returnを使う
関数を作る際に計算式などを入れて、その結果を欲しい場面が多くあります。そこでreturnを使うことで関数を呼び出した際にその結果を返してくれるようになります。

例えば、アイテムの価格を知りたい場合

```diff_python
def item(price):
  result = price * 1.1  # tax = 10%
  return result
```

として```item()```の```()```に値段を入れることで消費税の計算が行われて表示されます。この表示された値を別の変数に入れればその後の処理にも使うことが出来ます。

# ★最終問題★
好きな関数を1つ作りなさい。ただしreturn文を使って何かしらのデータを返す関数にすること。


# 参考文献
この記事は以下の情報を参考にして執筆しました。


[確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)](https://www.amazon.co.jp/%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8FPython%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80-%E7%A2%BA%E3%81%8B%E3%81%AA%E5%8A%9B%E3%81%8C%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F%E3%80%8C%E8%B6%85%E3%80%8D%E5%85%A5%E9%96%80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%8E%8C%E7%94%B0-%E6%AD%A3%E6%B5%A9/dp/4797384409)

[スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BPython%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8B%E5%85%A5%E9%96%80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%9B%BD%E6%9C%AC-%E5%A4%A7%E6%82%9F/dp/4295016365/ref=pd_lpo_d_sccl_1/357-4097415-1030165?pd_rd_w=Bff0K&content-id=amzn1.sym.855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_p=855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_r=6P5B2BTEV9JTKQAXEDRV&pd_rd_wg=pGnzd&pd_rd_r=f0b33b55-8669-49f5-8027-49649fe1966c&pd_rd_i=4295016365&psc=1)