Progate無料版をやってみる【Python I】

[前回](https://qiita.com/GodPhwng/items/985bb26d2157ae6f0872)に引き続きProgate無料レッスンをやっていこうと思います。

今回はPythonになります。

未経験です。
インタープリタ言語。
JavaScriptみたいなノリでやればいいのかな？ｗ

#Python I
[公式レッスン](https://prog-8.com/python/study/1/1#/0)

###環境構築
Progateにインストール手順がありました。
→　https://prog-8.com/docs/python-env-win


インストール後はVSCodeで書いて、実行していきたいと思います。
参考にさせていただきました。
→[VS CodeでPython環境を整える](https://qiita.com/ayuchiy/items/82d6d2dfcf1acc3bec00)


レッスンに戻ります。


###文字列
・お決まりの文字列出力
　Pythonでは

```
print
```
を使用するらしい。

```py
print('Hello World')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526982/90ecb91e-3f82-0fc6-7205-c7c9cb6cfe30.png)

###数値・計算してみよう
・いつもの・・・`+ - * / %`

###変数・変数を使ってみよう・変数の値を更新してみよう・文字列の連結
・いつものやつ・・・。

文字列連結は

```python
'{}_{}_{}'.format(1,2,3) # 1_2_3
```
が主流なんですかね？

**＊＊【コメントで指摘いただきました。】＊＊**
今はこのように書けるそうです。

```py
a, b, c = 2020,3,20
print(f'今日は{a}年{b}月{c}日です')
```
VSCodeの結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526982/56070674-b830-fb5b-6115-c0e5bce287b2.png)
**＊＊ ＊＊**

###データ型
・文字と数値の連結には型変換が必要。
　Rubyもそうでしたねたしか・・・？
　C#やjavaは勝手に文字になるんですけどねぇ

・`str(数値)`で文字列
・`int(文字列)`で数値

###条件分岐
・うーん。`==`とイコールを2重にするけど、`:`を使用したり、`{}`ブロックがなくてわかりにくい・・・。すこし冗長になったり、ifが多くなった場合にわかりづらくなるのではないか・・・。

###真偽値・比較演算子
・いつものの為、省略

###else・elif
・Pythonでは`elif`・・・。
　ほかの言語とごちゃごちゃになる。
  `else if` `elseif` `elsif` `elif`

うわぁあああああああああああああああああ
参考にさせていただきました。
→[主要な web 系言語の else if](http://var.blog.jp/archives/51191134.html)

**＊＊【コメントで指摘いただきました。】＊＊**
`else if`は1つの条件分岐ではなく、`else`に連続して`if`が記載されただけのものであり`elsif`や`elif`とは別物。
Pythonでは`else`に続けて1行で`if`が書けないため、改行することになるが

```py
if a == 2:
    print('test')
else:
    if a == 3:
        print('test2')
```
上記のようにネストが深くなってしまうため、`elif`を設けた・・・と理解しました。

仮に`else if`と1行で書けるような仕様だったら
`{}`や`then end`が必要になったり
条件分岐の後に1行しか処理が書けなかったりするのかな。
(Pythonはインデントをそろえておけば複数書ける)
**＊＊ ＊＊**

###条件式を組み合わせよう
・独特すぎる。
　`&&` や `||` にしてほしかった・・・。
  
  `&&` → `and`
  `||` → `or`
  `!=` → `not ==`

うーん。

**Pythonでは`and`と`or`他の使い方ができます**
※コメントで教えていただきました。

```py
message = "test1" and "test2" #test2が代入されます
message = "" and "test2" #""が代入されます
message = "test1" and "" #""が代入されます

message2 = "test3" or "test4" #test3が代入されます
message2 = "" or "test4" #test4が代入されます
message2 = "test3" or "" #test3が代入されます
```
理由：
・文字列の場合、""が偽、それ以外が正と解釈される

・`and`は左の式が正の時、右の結果を返す　→　1番目の式で"test2"、3番目の式で""
　左が偽の時、左を返す　→　2番目の式の結果　

・`or`は左の式が正の時、左を返す　→　1番目の式で"test3"、3番目の式で"test3"
　左が偽のとき、右を返す　→　2番目の式で"test4"

JavaScriptの `&&` や `||` の動作と同じですね！ﾀﾌﾞﾝ

###代金を計算しよう
・特になし
###入力を受け取ろう
・`input`で入力を受け取れるらしい。
　C#でいうところの`Console.Read()`かな？

###条件分岐をしよう
**演習**

```py
apple_price = 200
# 変数moneyに数値1000を代入してください
money = 1000

input_count = input('購入するりんごの個数を入力してください：')
count = int(input_count)
total_price = apple_price * count

print('購入するりんごの個数は' + str(count) + '個です')
print('支払い金額は' + str(total_price) + '円です')

# moneyとtotal_priceの比較結果によって条件を分岐してください
if money > total_price:
    print('りんごを' + str(count) + '個買いました')
    print('残金は' + (money - total_price) + '円です')
elif money == total_price:
    print('りんごを' + str(count) + '個買いました')
    print('財布が空になりました')
else:
    print('お金が足りません')
    print('りんごを買えませんでした')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526982/6835755e-499c-230e-7c87-f9a4baf96cd1.png)


**クリアしました**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526982/2e4e910a-209e-391d-83dc-1f6190ed2cd6.png)

#感想
・まためっちゃ短く終わってしまった・・・。
・Rubyと一緒ですごく簡単にプログラミングできるけど、演算子や条件分岐のやり方が独特すぎて、個人的にはRubyのほうがいいですね。

いずれ機械学習とかもやってみたいので、その時にまたPythonやろうと思います。

次回は[コマンドライン](https://prog-8.com/commandline/study/1/1#/0)をやっていきたいと思います。
→　[次回](https://qiita.com/GodPhwng/items/91470d4b7672d41427b7)