書きながら学ぶ、やさしいPython

この文章の読者は、Pythonをこれからはじめる方を想定しています。
読後、Pythonの基本的なコードの読み書きができるようになることが目標です。

##なぜPython?
　・学習コストが低い
　　シンプルで覚えやすいプログラミング言語。
　・オープンソース
　　無料で利用することができる。
　・機械学習やデータサイエンスのライブラリが豊富
　　DeepLearningの分野では、フレームワークCaffe、TensorFlow、Chainerなどが利用できる。

##Python2系と3系、どちらを使う？
　Pythonには、現在バージョンが3系(Python3)と2系(Python2)の2種類が存在する。
　結論。これからはじめるのであれば、3系がよい。
　
　・機能
　　最新版は3系で、2系に比べ機能改善が図られている。　
　・互換性
　　3系と2系のコードは、互換性がない。
　・サポート
　　2系は、サポートが2020年で終了する。

　※ただし、まだ3系に対応していないフレームワークやサードパーティパッケージもあり、
　2系を完全に切り捨てることはできない。

##実行
　
　①「sample.py」というファイルを作成する。
　②メモ帳などでファイルを開き、print("Hello World")　と書いて保存する。
　③コマンドプロンプトを開き、pythonコマンドを実行する。

    $cd                   # cdコマンドで作成した「sample.py」のフォルダに移動　
    $python sample.py     # pythonコマンドの引数にファイル名「sample.py」を指定し実行
    Hello World           # Hello Worldと表示される。

　・文字は、シングルクォーテーションもしくはダブルクォーテーションで囲む。
　・日本語扱うときは、ファイル先頭に"\# coding: utf-8 "と書く。

　◆演習問題
　　1)　"Hello World"を日本語の"こんにちわ"に変更し、表示せよ。

##基本的な文法
1.　変数
　変数は、アルファベットを使って定義できる。
　また変数は、値を変更することができる。

    >>> cats = 5 
    >>> print(cats)
    5
    >>> cats = 10
    >>> print(cats)
    10

　・Pythonは型は明示的に指定せず、状況に応じて自動的に決定される。
　・Pythonに定数はない。

　◆演習問題　
　　2) 変数catsの値を13に変更し、表示せよ。

2.　コメント
　   \#ではじめると、行の以降のコードはPythonで処理されない。
　複数行をコメントにしたい場合は、"""で前後を囲む。

3.　算術計算
　加算や乗算ができる。

    >>> 5 + 2    # 足し算
    7
    >>> 13 - 8   # 引き算
    5
    >>> 7 * 4    # 乗算
    28
    >>> 7 / 5    # 割り算 
    1.4
    >>> 4 ** 2   # 累乗     
    16
    >>> 13 % 3   # 余り
    1

　◆演習問題
　　3) 66 - 19 の計算結果を表示せよ。
　　4)  9 ** 3 の計算結果を表示せよ。

4.　if文
　条件分岐。

    >>> cats = 12    
    >>> if cats == 2:                 # コロン忘れずに
    >>>     print(“ネコが2匹”)         # catsが２の場合の処理
    >>> elif cats > 10:               # コロン忘れずに   
    >>>     print(“ネコは10匹より多い”) # catsが10より大きい場合の処理
    >>> else:                        # コロン忘れずに
    >>>     print(“それ以外の値”)      # どちらの条件でもない場合の処理
    ネコは10匹より多い

　インデントとして４つの空白文字を置く。タブ文字でも代用できる。
　比較演算子は、==、!=、>=、 <=、<、>などがある。

　◆演習問題
　　5) catsの値が5以上のとき、"5匹以上です"と表示する条件を追加せよ。

5.　for文
　繰り返しの処理。

    >>> for x in [5, 10, 12]:  # コロン忘れずに
    >>>     print(x)         # インデント
    5
    10
    12

 　繰り返しの途中で抜ける場合は、break。
 　もし1〜100まで繰り返したい場合は、range(1, 100)を利用する。

　◆演習問題
　　6) 1〜50までの値を合計し、表示せよ。

6.　関数
　処理のまとまり。
　インデントとして4つの空白文字を入れる。タブ文字でも代用可能。
    
    >>> def thank():                # defで関数の宣言。コロンを忘れずに
    >>>     print(“thank you!!”)    # インデント    
    >>> thank()                     # thank関数を呼び出す
    thank you!!

　関数には、引数に値を与えることもできる。

    >>> def goodbye(name, message):               # コロンを忘れずに
    >>>     return “goodbye ” + name + message    # returnで戻り値
    >>> x = goodbye(“Tom”, ". see you again!")
    >>> print(x)
    goodbye Tom. see you again!   

　◆演習問題
　　7) 足し算の関数を作成せよ。
　　　また作成した関数を使って、3 + 49の計算結果を表示せよ。
　　8) 以下の３つの条件を満たすプログラムを完成させよ。
　　　a. 最初のplayerは、「1」と表示せよ。
　　　b. 次のplayerは、直前のplayerの次の数字を表示していく。
　　　c. ただし、3で割り切れる場合は「Fizz」、
　　　　5で割り切れる場合は「Buzz」、
　　　　両者で割り切れる場合は「Fizz Buzz」を数字の代わりに表示せよ。

##型について、もう少し
1.　データ型
　データの性質を表す。

    >>> type(29)      # 整数型
    <class 'int'>
    >>> type(“japan”) # 文字列型
    <class 'str'>
    >>> type(5.291)   # 浮動小数点型
    <class 'float'>

　int()でinteger型、str()で文字列型に変換できる。

    >>> print(　int(50) + 9 )
    59


　◆演習問題
　　9) 以下のコードを実行し、発生したエラーを解消せよ。

    >>> count = 100               
    >>> x = "200"    
    >>> print(count + x)
    
2.　ブーリアン型
　TrueとFalse。
　条件分岐に利用する。

    >>> clever = True    
    >>> beautiful = False
    >>> type(clever)
    <class 'bool'>
    >>> clever and beautiful  # and = どちらもTrueである
    False
    >>> clever or beautiful   # or = どちらかがTrueである
    True

3.　リスト型
　配列のこと。

    >>> a = [4, 81, 47, 28, 3]
    >>> print(a)
    [4, 81, 47, 28, 3]
    >>> len(a)               # 配列の数
    5
    >>> a.sort()             # ソート
    >>> print(a)
    [3, 4, 28, 47, 81]
    >>> a[0]                 # 先頭の値
    3
    >>> a[4] = 55            # 値を変更
    >>> print(a)
    [3, 4, 28, 47, 55]

　配列は、a[0]から始まる。
　[]の添字をインデックスと呼ぶ。

    >>> print(a)
    [3, 4, 28, 47, 55]
    >>> a[0:2]       # 0から2つ要素を取り出す
    [3, 4]
    >>> a[1:]        # インデックス1〜要素を取り出す
    [4, 28, 47, 55]    
    >>> a[:-1]       # 要素を一つ減らす
    [3, 4, 28, 47]

　大きい順に並び替える場合は、reverse()。
　要素を追加する場合は、append()。


4.　辞書型
　単語とデータを辞書のように紐づけられる。

    >>> cat= {}                       # 空の辞書型を作成
    >>> cat = {‘age’: 8, 'weight': 2} # ageが年齢、weightが体重
    >>> cat[‘age’]
    8
    >>> cat[‘weight’] = 4             # 値を代入
    >>> cat['weight']
    4

　◆演習問題
　　10) 例の変数catに名前'mike'を追加せよ。

5.　クラス
　用意されている文字型などの組み込み型以外に、自分で任意の型を作ることができる。
 
    >>> class Car(object):
    >>>     def __init__(self, name): # コンストラクタ。初期化処理
    >>>         self.name = name
    >>>     def tellme_name(self):          # 第一引数はself
    >>>         print("Mycar's name is {0}".format(self.name))
    >>> myCar = Car("Prius") 
    >>> myCar.tellme_name()
    Mycar's name is Prius

　◆演習問題
　　11) 足し算と引き算ができる電卓のクラスを作成せよ。

##外部ライブラリを便利に使う
　lenやstrなどの標準ライブラリのほかに、Pythonには便利なライブラリが用意されている。
　http://docs.python.jp/3/library/

　これら外部ライブラリは必要に応じてimportが必要となる。

    >>> import random                 # 乱数のライブラリをインポートする
    >>> i = random.randrange(1, 6)    # 1-6までの乱数を生成する
    >>> print(i)
    3

    >>> import requests               # HTTPライブラリをインポートする
    >>> url = "http://google.co.jp"   # 接続先urlにgoogleを指定
    >>> parameter = "{'code': 81}"     
    >>> url = requests.get(url, params=parameter) # get!
    >>> print (r.status_code)                     # 接続結果コード。取得が成功すると200を返す。内容はtextで取得。
    200

　◆演習問題
　　12) random関数を用いて、
　　　「大吉」、「中吉」、「末吉」、「大凶」がランダムに表示されるおみくじを作成せよ。