【初心者向け】JavaGoldが解説するPythonの基礎 パート１

##概要

今回の3人のプロジェクトでPythonを使うため1から勉強したので
今回学んだ内容をJavaとの違いを含めて皆様にシェアできればと思います!!
この**パート１ではJavaとの違い&概要**を、**パート２で基本的な構文(if文&例外処理等)**を説明していきます。

ちなみに仕事ではJavaしか使う機会がなく、1年前の3年目の夏にJava SE8 Goldを取得しました。
(本日から令和が始まりましたね！！)
![_106250427_japanera-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378268/37e9cd5b-cde0-d45c-8768-6bc5591dacfe.jpeg)

##アジェンダ
・Javaとは
・Pythonとは
・JavaとPythonの違い
・データ型
　　1. 数値型
　　2. 文字列型
　　3. リスト型
　　4. 辞書型
　　5. タプル型
　　6. 集合型(セット型)
　　7. None
・最後に
・参考文献

##Javaとは
Java仮想マシン(JVM)さえ動作すればJavaはどんなコンピュータ上でも利用することが出来るオブジェクト指向言語。コンパイル言語。
OSを入れ替えてもプログラムはそのまま使用可能。Write once, run anywhere(一度書いたらどこでも動く)。
Javaは、携帯電話やスマートフォンなどで使われる小規模なアプリケーションから、銀行で使われるような大規模な業務システムを開発する際にも用いられる。

#####javaで開発できるもの
①業務システム ex.運送会社の配送システム, 金融の取引システム
②Androidアプリ 
③WEBアプリケーション ex. Twitter
④ゲーム ex. Minecraft 
⑤その他 ex.家電製品や従来の携帯電話、Blu-rayプレーヤーなどに搭載されているソフトウェアなど

#####Tips 
Google三大言語（「Java」「C++」「Python」）
Javaと同じような言語形式を持っているのは、C、C♯、C＋＋などのC系と呼ばれるプログラミング言語。
そもそもJavaは、C＋＋のバグを生みやすい仕様を削除し代わりにガーベジコレクションなどの新しい機能を取り入れた言語として設計されている。

##Pythonとは
シンプルなコード、豊富なライブラリ、汎用性の高さなどが特徴のオブジェクト指向言語。スクリプト言語。
何か決まったものを作るための特化した言語ではなく、Web、ゲーム、データ解析、GUIアプリなど、なんでも作ることができる非常に汎用性の高い言語。
最近では、ビッグデータ処理、統計、機械学習、AIなどの分野に適したライブラリが充実しており、利用されることが多くなってきている。

#####Pythonで開発できるもの
①WEBアプリケーション ex. Dropbox, Instagram, Youtube, Evernote
②デスクトップアプリ
③業務効率化 VBAの様に単純作業を自動化させるツール作成が可能
④組み込みアプリ 
⑤機械学習・統計解析系アプリ
⑥ゲーム

#####Tips 
組み込みアプリの分野では、機械が理解できる形により近く、動作が高速なC言語やC++がよく使われるが、PythonはC言語やC++と親和性が高く、PythonでC言語等の処理を呼び出すことが可能。
Pythonのソースコードは、他のプログラミング言語よりもシンプルに書ける。
　→書かなくてはならないソースコードの量が少ないこと、書き方が限られているため。文法がシンプルで必要最低限のものしか用意されていない。(****オフサイドルール***など)

****オフサイドルール***(Off-side Rule)
ブロックが{}ではなく、インデントで指定する。インデントはコードの見やすさのためではなく文法として意味を持っている。

##JavaとPythonの違い
Javaではデータ型というものを最初に固定で決める形式**（静的型付）**を取る。
　→プログラムを実行する前にコンピュータが実行できる形式に翻訳する（コンパイル）。
一方、＊Pythonではデータ型がプログラムが実行するときに決まる**（動的型付）**という形式をとる。
　~~→コンパイルを必要とせずにプログラムを実行できる。~~
　→スクリプト起動時に、Pythonインタープリタがスクリプトを中間コード（仮想マシン語）にコンパイルしてから実行する。

＊詳細は、shiracamusさんをコメントをご参照下さい。
####またPythonでは、
・for文などで使うブロックが{}ではなく、インデントで指定する。
・変数を宣言する際に何らかのキーワードを指定する必要はない。(JavaのStringなどの型やJavascriptのvarなど) 
・定数という概念は存在しない。
・『else if』が「elif」
・switch~case文がない。その代わり「in」キーワードで同様の実装が可能。＊詳細はパート２で
・for文は、Javaのforeach文に相当。range関数と組み合わせて使うことが多い。また、do-while文は存在しない。＊詳細はパート２で
・例外処理の構文が、「try~except~else~finally」＊詳細はパート２で
・何もしないことを明示的に表すpass文がある。＊詳細はパート２で

##データ型
Pythonでは、大きく分けて***7種類***の型がある。
1. 数値型
2. 文字列型
3. リスト型
4. 辞書型
5. タプル型
6. 集合型(セット型)
7. None

##1.数値型
①整数型　
~~→Javaなどの他の言語と変わりなし。~~
→Javaなど他の言語は固定長整数。
Pythonの整数型は可変長整数で、文字列と同様に可変長データなので、値の上限がないのが特徴。大きな値ほど、メモリを多く消費する。

②浮動小数点型
→**除算(/)の場合は、整数と整数の演算でも結果が浮動小数点(Float)になる。**切り捨て除算(//)だと結果は整数(Integer)に。

③複素数型
→複素数が利用できる。(バージョン３.４以降)。数値に添字(j)を付けると複素数リテラルとして扱うことができる。Javaではない。

④真偽値
→Falseは『０』、Trueは「１」として定義される。そのため、これらの値を数値と直接演算することも可能。ちなみに**先頭を大文字にしないと真偽値として認識されない。**

##2.文字列型
文字列は４種類の記述ができる。３重のクォートを使うと複数行にまたがる文字列(ヒアドキュメント)を定義することが可能。

　①値をシングルクォートで囲う
　②値をダブルクォートで囲う
　③値を３重のシングルクォートで囲う
　④値を３重のダブルクォートで囲う

##3.リスト型
**Javaで言う配列。**内容の書き換えが可能で、かつシーケンシャルに扱うことができる。含める値の型は一致している必要はない。
データはブラケット[ ] の中に値をカンマで区切って宣言する。引数には負数を指定することができ末尾から表示できる。

```python

lst=['test', 10, False]
print(lst[1])  #10
lst[1]=1000
print(lst[1])  #1000
lst[-1]=False
```

##4.辞書型
**Javaで言うMap。**内容の書き換えが可能で、キーと値のセットでデータを管理。
データは波括弧 { } の中にキーと値をセットにしたデータをカンマで区切って宣言する。
キーに対する値の型は辞書内で一致しなくても良い。

```python

directory={'key1': 'value1', 'key2': 'value2'}
print(directory['key1'])  #value1
```

##5.タプル型
**Javaで言うfinal宣言した配列。**リスト型の様にシーケンシャルを持つが要素の変更はできない。
データはカッコ ( )の中に値をカンマで区切って宣言する。含める値の型は一致していなくて良い。
タプルに含める値が一つだけの場合は末尾にカンマを付与する必要がある。
**辞書のキーとして使用することも可能。**

```python

tuple1=('test', 10, True)
print(tuple[0]) #test
tuple2=('test', ) #タプルに含める値が一つ
```

##6.集合型
**Javaで言うSet。**シーケンシャルではなく重複した値を持たない。そのため各々の出力結果は常に例の通りになるとは限らない。
データは波括弧 { } の中に値をカンマで区切って宣言するか、setという関数に値を渡して生成する。
「set」関数は引数としてリスト型の値か文字列を受け取り、文字列を受け取った場合は一文字ずつバラして管理。

```python

sets1={'test',999,True}
print(sets1)# {True, ‘test’, 999}#
print(sets1[0])# 順番を持たないためこれはNG

sets3=set('hogehoge')
print(sets3) # {'e', 'h', 'o', 'g'} #重複は排除される
```

##7.None
Null値を表す。

##最後に

さすがシンプルなコードと謳っているだけあって、Javaのクラス宣言など書かずに済み、ソース量が少ないですね♪Java経験があると理解しやすそう！
if文や例外処理などの基本的な構文はパート２で説明します。
近日、公開します＾＾

##参考文献
・【2017年】JavaとPython徹底比較を専門用語ゼロで解説
https://www.sejuku.net/blog/36782

・JavaプログラマがPythonを勉強してみた。(型について）
https://qiita.com/riekure/items/57f306500636727bc125

・PythonとJavaのクラス、インスタンス、スコープの違いを比較
http://kkv.hatenablog.com/entry/2015/04/12/164817

・The 2018 Top Programming Languages - IEEE Spectrum Rankin
https://spectrum.ieee.org/at-work/innovation/the-2018-top-programming-languages

・現役エンジニアがよく使う！Python機械学習ライブラリ厳選9選
https://www.sejuku.net/blog/11551

・2018年大注目のPython！WEBフレームワーク3つを徹底比較
https://www.sejuku.net/blog/3713

・AmadaShirou. Programing Keikensya No Tameno Python Saisoku Nyumon (Japanese Edition) Kindle 版