はじめてのPython

# 前提
どうもです。
初投稿です。
いつもお世話になってるQiitaに投稿する日が来るなんて...!!
つい最近までQiitaの読み方知りませんでした。

今まで学習した言語はJavaで
「JSP-Servlet-Service-DAO-MySQL」
みたいな感じのwebシステムの作り方を学んで
SpringMVCちょこっとかじって
って程度ですが
Pythonを触ってみたくなって、いろいろ調べてみました。

同じような境遇でPython触りたいって思ってる方がいれば
ぜひ参考にしていただけたらうれしいです。

~~ちなみにこの記事長いです。~~

# 環境
##### OS : windows7 (10のほうがいいかと)
※コマンドプロンプトを多用するのでmacの人はコマンドが多少違うかと思います。
　随時、相違点があれば調べつつ対応していただければ。
##### IDE : Atom
※軽いって理由で使っています。日本語化プラグイン推奨。「atom 日本語」とかで~~ggrks~~
##### IDE : eclipse
※まぁね、使うよね。最初のほうだけです。重いので無ければatomでも良いかと。

# 全体の流れ
1.まずはPythonの書き方になれるために
変数の作り方やメソッド(関数?)の定義の方法、配列や連想配列などを
eclipse上でガツガツ書きます。IDEはなんでもいいけどeclipseわかりやすいです。
Javaで言うライブラリはPythonだとモジュールと呼ぶそうですが(importするやつ)
まぁ長く触ってないとどうしたって覚えられないので
とりあえず書きましょ。

2.webシステムを作っていきます。
Pythonでもユーザ-サーバ間のやり取りの基本は同じですが、いろいろ面倒なので
Django(ジャンゴ。ディージャンゴじゃないよ)っていうフレームワークを使います。

そいじゃ本編

# 1.PythonでHello World
いつも思うんですがなんでHello Worldなんでしょうね。
そいじゃあ書いていきましょう。
IDEはeclipseでやりましょう。
っとその前に...

##### pythonが入ってるか確認する
winキー+Rで「ファイル名を指定して実行」から「cmd」と入力してコマンドプロンプト(以下cmd)を開きます。とりあえずpythonって打ってみましょ。\は円マークと同じです。このブログって円マークを入力できないのね...

```
C:\Users\(ユーザー名)>python
```

認識されていませんとか なんかだめっぽいこと言われたら入ってません。
以下、入力するコマンドのみ記述します。
なんか成功したっぽかったら入ってます。入ってる人は

```
python -V
```

でpythonのバージョンが見られます。大文字のVね。
前提かと思いますがcmdでは

```
help 
```

や

```
help コマンド
```

または

```
コマンド/?
```

でいろいろ教えてもらえるので、わかんなくなったらググるよりもまずそっちで確かめてみると良いかもです。
入ってない人は
Anaconda社が提供してるpythonパッケージをインストールしましょう。のちのち使う機能とか入ってるのでとりあえず入れればいいとおもわれ。
[Anaconda公式様](https://www.anaconda.com/)
自分のPCに見合ったの入れてください。Download的なの押しまくってればたぶんできます。
##### ※注意　インストールの最後のほうで環境変数がどうのみたいな、パスを通しますかみたいなチェックボックスがあります。入れないと今後使えないのでぜひ入れてください。非推奨ってでるけどやりましょう。

そいじゃeclipse開いてください。
写真があればよかったんですが面倒なので文字列で説明します。ごめんね。

上のバーのヘルプ(H)ってとこからEclipseマーケットプレースを選び、PyDevで検索してインストール。
PythonDeveloperTool的なやつだと思います。
入れたらPyDevパースペクティブを開いて、いつもどおり作業開始って感じです。
PyDevプロジェクトを新規作成して、いつもどおりパッケージとかファイルとか作っていきましょう。
JavaでクラスだったものがPythonだとモジュールです。拡張子も.javaでなく.pyです。
そしたらいよいよPythonを書いていきます。
個人的に最初に覚えたいのはコメントアウトの方法なので...

```python:commentout.py
'''
ブロックコメント
'''

# 一行コメント
```

具体的なことは↓↓のコード見ながら書いていくとわかりやすいかと。コピペは非推奨。

```python:practice.py
'''
はじめてのpython
自分はJavaの次にこれをやってるよ
宣言するときの型(intとかStringとか)がない
インデントで区切ってるから{}がない
いろいろ注意深く書こうな
'''

# 関数の定義宣言
def main():
    print ('Hello World!')

# 戻り値の型の宣言なんていらない
def run(IntegerNumber):
    if IntegerNumber == 5:
        practiceOfSuperStatement = "わっほい"
        return practiceOfSuperStatement
    else:
        return "わっしょい"

# run関数を実行してみた
print (run(5))

# main関数の実行はこう
if __name__ == '__main__':
    main()

# スクリプトとしてファイルを実行した場合は関数名が__name__って変数に入ってる
# ちなみにアンダーバーは2個だからきをつけて

# if文の練習
practiceTrue = True
practiceFalse = False

if practiceTrue:
    print ("こっちがTrueだよ")
else:
    print ("こっちはFalseだよ")

if practiceFalse:
    print ("bのばーじょん")
elif True == False:
    print ("おもくそデッドコードじゃねーか")
else:
    print ("Bばーじょん")


# 変数の定義宣言
practiceInteger = 100
practiceType = type(practiceInteger)
print(practiceType)

practiceString = "整数"
practiceType2 = type(practiceString)
print(practiceType2)
# 文字列の一文字分だけ取り出せる。これすごくね？w
print(practiceString[0])


# クォーテーションの違いは文法上はない
single = 'hello1'
double = "hello2"
print (single + '/' + double)

# エスケープ処理
escapePractice = 'foo\'bar'
print (escapePractice)

# リストほど高級じゃないけど配列、タプル、連想配列
# まずは配列。いつもお世話になってます
practicelist = [1, 2, 3, 4, 5]
print(practicelist)
practiceListSuperVersion = []
print(len(practiceListSuperVersion))
practiceListSuperVersion.append(100)
practiceListSuperVersion.append(3)
practiceListSuperVersion.remove(3)
print(len(practiceListSuperVersion))
print(practiceListSuperVersion)
practiceTenLists = [0] * 10
print(len(practiceTenLists))
# タプル。型なんでもぶっこめる配列
tapurururu = (0,) * 5
print(tapurururu)
# タプルは変更不可
tapuppuru = (0, "a", 1)
print(tapuppuru)
# みなさんお待ちかねArrayです
import array
a = array.array("i", [0] * 5)
print(a)
# 連想配列
asociateArray = {"year":"2019", "month":"7", "day":"1"}
print(asociateArray)
print(asociateArray.get("year"))
del asociateArray["year"]
print(asociateArray)
asociateArray ["year2"] = "2020"
print(asociateArray)

# そいじゃ最後に繰り返しな
for c in "python":
    print(c)
a = [1, 2, 3]
for b in a:
    print(b)
i = 0
while i < 3:
    print(i)
    i = i + 1

# 1から100までのlistを作って
num = list(range(1, 100))
# 奇数のものだけを取り出す
odd_nuber = [i for i in num if not i % 2 == 0]
# for文が1行とか攻撃力高すぎわろた


# おっと忘れてた クラスを作ってみよう
# コンストラクタはinitって組み込み関数だ
class SuperClass ():
    def __init__ (self, message):
        self.value = message
# これで、this.なんとかみたいな感じになったわけだ
# つまり、クラスの引数になったやつがそのまま帰り値になる的な
# 引数とかじゃないけどあくまでイメージね
instanceSuperClass = SuperClass("HelloWorld")
print(instanceSuperClass.value)
# 継承もやってみるべそ
class OyaClass ():
    def oya_function (self):
        print("I am OYA")

class KodomoClass (OyaClass):
    def kodomo_function (self):
        print("I am KODOMO")

k = KodomoClass ()

# 継承してるから1度のインスタンスでどっちの定義関数もつかえる
k.oya_function()
k.kodomo_function()
```

です。ほかにもいっぱいありますがまぁ細かいことは自分がやりたいことを見つけたら調べつつやってけば良いと思います。がんば。

「スクリプトとして実行」とか書いてあると思いますが、pythonの実行には2通りの方法があるみたいです。
1つめは今回のようにスクリプトを作成してそれを実行する方法。
2つめはcmdやターミナルのようなCLIから、リアルタイムで1行ずつ実行していく対話式って方法らしいです。
cmdで

```
python
```

と入力してから

```
1+1
```

と入力して改行すると、たぶん実行して2って答えを返してくれます。
すごいですね。

次。

# 2.Djangoを使ってブラウザからHello World
~~コンソールだけじゃ満足できないよくばりさんのために~~
webアプリを作る方法を書いておきます。
Djangoとかで調べれば公式がいろいろくわしく教えてくれてると思いますので、そちらも併用していただけたらよりわかりやすいかと。
自分もそこまで深いところまで行ってないので、DBにつなげる方法などまでは今回は行きません。
まじでHello Worldって出力するとこまでです。

##### 仮想環境について
仮想環境でプロジェクトを作り、そのディレクトリをatomから開いて編集して...
って感じで作っていきます。　仮想環境について詳しく知りたい人はググってください。
なのでまず仮想環境を作ります。
そのために
##### virtualenv または virtualenvwrapper-win
を入れます。念のためどっちも入れれば良いと思います。
virtualのenvironmentですかね。そのまんま。
前者はOSの問題なのか、一部コマンドが反応しませんでした。
個人的な話ですがwindowsなら後者が推奨されます。winってついてるし。

まずはcmdで

```
pip install virtualenv
```

と入力。インストール終了後に

```
pip list
```

で、入ってるもの一覧が見られるので
virtualenvが入っていれば成功です。

あらかじめ仮想環境を作りたいディレクトリを作成してから

```
dir
```

や

```
cd (移動先ディレクトリ タブ補完あり)
```

を駆使して、その作ったディレクトリに移動してください。

んで

```
virtualenv (なまえ)
```

とコマンドを入力すれば、名前のとおりの仮想環境がそこに作られます。
んでその配下をエクスプローラとかで見てもらえばわかりやすいですが

```
Scripts\activate.bat
```

というバッチファイルがあるので、それを実行してあげれば仮想環境が起動されます。
ようはScripts\activateって打ってくださいってことです。

```
(仮想環境の名前) C:Users\(ユーザー名)...
```

って感じになったら成功です。

バッチファイルの起動(Scripts\activateと入力すること)ではなくて

```
activate
```

っていうコマンドだけで起動すると

```
(base) C:Users\(ユーザー名)...
```

って感じになるので、よくわからんのでだめです。
で、仮想環境を停止する方法なんですが

```
deactivate
```

ってコマンドで停止するはずなんですが、認識されなかったのでむりやりexitとかで終わりました。
なんなんでしょうね。


なので、そんなことがおきないようなvirtualenvwrapper-winを使います。

cmdを新しく開きましょう。新しくというか、閉じてから開きなおしましょう。
んで

```
pip install virtualenvwrapper-win
```

を入力しましょう。例のごとく

```
pip list
```

で一覧を表示して、virtualenvwrapper-winが入っていれば成功です。
アルファベット順なのでしたの方みてね。

今回は現在のディレクトリに仮想環境を作るのではなく、命名したディレクトリを勝手に作ってくれて、しかもそこに仮想環境を作ってくれます。天才かよ。

```
workon
```

と入力。なんかでましたか?現在持っている仮想環境の一覧を表示ってことですかね。　次に...

```
mkvirtualenv (作りたいやつの名前)
```

と入力すると、make virtual environmentしてくれるし、勝手に仮想環境起動してくれてるっていうね。最強か?
停止したいときはdeactivateコマンドを入力してあげてください。

次回以降、既存の環境を起動したいときは

```
workon (仮想環境名)
```

と入力すれば、カレントディレクトリは変わらないままで勝手に指定した仮想環境を起動してくれます。

##### Djangoのインストールと起動
んじゃまぁプロジェクトを作成したい仮想環境を作っていきましょう。
名前はtest_envとか良いんじゃないですかね。
workon test_envとかで仮想環境を起動しておきましょう。
そしたら...

```
pip install django
```

を入力。これでようやくDjabgoがインストールされて、そろそろpython書く段階に入れそうです。

一応pip listでDjangoが入っているかどうかを確認してください。入ってればおｋ

そいじゃあ今度はDjangoを置きたいディレクトリを作成します。
つくりましたか?

```
cd (Djangoを置きたいディレクトリ名)
```

で移動します。cdコマンドについてつまずいたら別途ggrks。
ggrksってもう死語ですかね...?

移動したら

```
django-admin startproject [プロジェクト名]
```

と入力。これでDjangoプロジェクトが、移動したディレクトリ内に作成されます。

以降はエクスプローラを見ながらのほうが階層や内部のファイル一覧が見やすいと思いますので(無論 人によりますが)、適宜確認しながらcmdをいじっていきます。

```
cd [プロジェクトフォルダ名]
```

で移動してからdirとかでmanage.pyファイルを探してください。
ありますよね。そしたら

```
python manage.py runserver
```

を入力。~~タブ補完なしで文字入力するのめんど...~~

今これは何をしているかというと、Djangoを起動しています。
http://127.0.0.1:8000/
をブラウザで開いてみてください。

起動画面でましたよね。cmdに書いてある英語のメッセージを読めばなんとなくわかると思いますが、これで大体の設定は終わった感じです。いよいよpython使っていきます。
とりあえずCtrl + CとかCtrl + breakでサーバ停止してください。

##### アプリの作成

[Django公式様からの教鞭](https://docs.djangoproject.com/ja/2.2/intro/tutorial01/)

上記も適宜見ていただければ。


```
python manage.py startapp [なまえ]
```

これでディレクトリが作成されるかと思います。今回は公式様に習ってpollsって名前にしましょうか。

そしたら...
とりあえず以下を修正してください。

```python:polls/views.py
# Create your views here.
from django.http import HttpResponse


# これがdoGetメソッドの役割。たぶん。
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")
```

pollsフォルダにurls.pyを追加して以下を作成。


```python:polls/urls.py
from django.conf.urls import url
from . import views
'''
pollsアプリのURLの設定
処理内容「r'URLパターン', 'viewsってファイルのindexってメソッド, indexって名前をつけよう」
URLの指定の方法は「^が開始, $が終了を意味する」
下に書いてあるのは
「このページのURLはindexって文字列と完全一致しないとだめよ」ってこと
プロジェクト自体のURL指定のとこで
url(r'^polls/', include('polls.urls'))ってやってるから
このページがプロジェクト名みたいな感じの立ち位置
いままでは「localhost8080:プロジェクト名/ServletのURL」
今回は「127.0.0.1:8000/全体の設定で指定したURL/ここで指定するURL」
だから「127.0.0.1:8000/polls/index」になるわけだ
'''

urlpatterns = [
    url(r'^index$', views.index, name = 'index'),
]
```

```python:プロジェクトフォルダ/urls.py

from django.conf.urls import include, url
from django.contrib import admin

'''
プロジェクト全体についての設定的な感じ
include()っていうのは、ほかのURLconfへの参照が可能。
Djangoくんがinclude()を見つけたら
今回だとpollsディレクトリのurls.pyファイルを指定して、呼び出してくれるよてっこと
ここがServletのアノテーションのurlPatternsに該当するわけだ
r'URLパターン', include('対応するアプリのurlパターンを記述したファイル')
だから「127.0.0.1:8000/admin」ってやるとなんかページ開くよ やってみ
'''
urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]
```

こんな感じです。
ファイル作ったときにもともと書いてあるコメントアウトとかあるかもですがとりま無視でおｋ
↑↑の3つのコードについては、それぞれコメントアウトで自分なりに説明を付け加えてみたので
必要な人は適宜読んでおいてくだせぇ

それじゃ
http://127.0.0.1:8000/polls/index
にブラウザからアクセスしてみましょう。

いかがでしたでしょうか。


ということで、はじめてのPythonでした。
とりあえず備忘録がてら書いていますが、これからもどんどん記事を書いていけたらいいなと思います。
ありがとうございました~