長らくC, Javaをやってて初めてPythonを触った感想 

最近**AtCoder**という単語がよく目にするようになりました．
[AtCoder](https://atcoder.jp/?lang=ja)はオンラインで参加できるプログラミングコンテストのサイトだそう．

僕の経験言語はC，Java，C#（Unity）.
少年期からプログラム（C言語に近いもの）を触っていたこともあり，プログラムには自信はあるぞ！！
というわけでプログラミングコンテストに挑戦したいと思いたったわけです．

しかし，プログラミングコンテストにおいて，最近はPythonで投稿されることが多いみたいですね．
僕は**Pythonといえば機械学習**というイメージだったんですけど，競技プログラミングでもよく使われてるんですね．

ひとまず使ってみることにしました．

##環境構築
実は環境構築の時点でかなりつまずきました……
現行のエディタ（VSCode）で使えるようにするか悩んだ挙げ句，今回は参考サイト通りAnacondaとPyCharmを使うことにしました．

参考サイト：[Anacondaを利用したPythonのインストール(Windows)](https://pythondatascience.plavox.info/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-windows)

参考サイトに記載されたAnacondaのダウンロード先だと522エラーを吐かれたので，ダウンロードは直接[公式サイト](https://www.anaconda.com/)から行いました．バージョンは2019/04/10現在最新の3.7 Version．
また，PyCharm上ではAnacondaを使用するように設定しました．

##HelloWorld
PyCharmが起動したら，新しいプロジェクトでHelloWorld.pyというファイルを作成します．
こんにちは世界．プログラムの第一歩といえばこれですね．
これから広がる新しい世界に「こんにちは」というわけです．かっくいい～！

内容は，コンソールに「Hello,world」と表示させます．
それが次のコードです．

```python:HelloWorld.py
print("Hello, World.")
```

**は？おわり？？？**

おまじない（importやらmainやら）とかセミコロンはどうしたの？？？

命令以外の記述をすることなく終わりました．
なるほど，この手軽さなら競技プログラミングで使われているのもうなずけます．

print命令で文字列「Hello,World.」を出力しました．

##基本的な処理
プログラミング頻出の処理についてまとめます．
###変数定義
変数を定義します．プログラム実行中に数字を変える処理がほしい時にはほぼ変数を使いますね．

```python:
num = 2               #変数numに2を代入
str = "Hello,world"   #変数strに"Hello,world"を代入
```
CやJavaのように型の種類を指定せずとも，文字列・数字問わず自動で判別してくれるようです．
優しい．
###条件分岐
「もし○○が□□なら」というように，条件によって処理を分けたい時にif文と呼ばれるものを使います．

```python:if文
num = 2                             #変数numに2を代入
if num == 1:                        #もし変数numが1なら
    print("num is 1")               #「num is 1」と出力
elif num == 2:                      #そうではなくて，もし変数numが2なら
    print("num is 2")               #「num is 2」と出力
elif num == 3:                      #そうではなくて，もし変数numが3なら
    print("num is 3")               #「num is 3」と出力
else:                               #そうではなくて，もし変数numが上記のもの以外なら
    print("num is not 1 , 2 or 3")  #「num is not 1 , 2 or 3」と出力
```
```:実行結果
num is 2
```
**注意すべきはインデント．**
このインデントでブロック（CやJavaなどの中括弧部分）を表すらしい．
これならインデント皆無な激ヤバコードになることもないね！！！……ないよね？

あと，else if ではなく **elif**.
Java，CのSwitch文の代わりとしてもif-elif-elseが使われている模様．

###繰り返し
ある処理を繰り返したい時に使います．

```python:for文
for num in range(3):   #変数numが0から2まで変化しながら処理を繰り返す．3は出力しない．
    print(num)
for num in range(6,9): #変数numが6から8まで変化しながら処理を繰り返す．9は出力しない．
    print(num)
```
```:実行結果
0
1
2
6
7
8
```
回数分だけ繰り返す処理といえばfor文．Pythonではrange関数を条件として使います．
range関数は，返り値として連続した数字のリストを返し，その中身を指定の変数に入れながら処理を繰り返します．
Javaの拡張for文，C#のforeachのような要素がPythonのデフォルトのfor文になってるようですね．

##FizzBuzz
ここまでまとめて，プログラマの登竜門である**FizzBuzz**を行うプログラムを書いてみたいと思います．
FizzBuzzとは，グループで順に1から数字を言って，ある倍数のときに数字ではなく”Fizz”，また別のある倍数のときには”Buzz”と言う言葉遊びです．どちらの数字の倍数でもあったときは”FizzBuzz”と言います．
~~3の倍数のときと3がつく数字のときだけアホになる芸人さんいたよね．~~

今回は，1から100まで順に数字を出力し，2の倍数のときには”Fizz”，3の倍数のときには”Buzz”と出力するプログラムとして実現したいと思います．以下がそのプログラムです．

```python:FizzBuzz.py
for num in range(1,101):
    if num % 2 == 0 and num % 3 == 0:
        print("FizzBuzz")
    elif num % 2 == 0:
        print("Fizz")
    elif num % 3 == 0:
        print("Buzz")
    else:
        print(num)
```
```:実行結果
1
Fizz
Buzz
︙
Fizz
Buzz
Fizz
```
少し驚いたのは**Pythonでは && や || が使えなかった**こと．→[参考サイト](http://omake.accense.com/wiki/PythonIntroLogicalAnd)
&& と同義のものとして **and** ，|| と同義のものとして **or** を使います．

##感想
コーディング全体の感想として，僕が使っていた言語より「かなり手軽」という印象を受けました．
インデントでブロックを扱う点はプログラム初学者にとってもいい練習になると思います．
まだまだ扱えていない機能も多いので，じっくり触って競プロに挑もうと思います．

##参考文献
[Anacondaを利用したPythonのインストール(Windows)](https://pythondatascience.plavox.info/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/python%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB-windows)
[Anaconda公式サイト](https://www.anaconda.com/)
[Python:&&が無い](http://omake.accense.com/wiki/PythonIntroLogicalAnd)