#author("2021-11-15T02:21:45+00:00","default:mizutu","mizutu")
[[私的AI研究会]] > Python覚書

* Python入門 [#g7979353]
#ref(画像一覧/python_logo.jpg,right,around,25%,python_logo.jpg)
#contents
RIGHT:&size(12){※ 最終更新:2021/11/15 };

** コマンドライン [#g35e56ea]
>python2 の場合
 $ python
 Python 2.7.16 (default, Oct 10 2019, 22:02:15) 
 [GCC 8.3.0] on linux2
 Type "help", "copyright", "credits" or "license" for more information.
 >>> print 'test'
 test
 >>> print('test')
 test
 >>> 

>python3 の場合 &color(red){(python2とは文法の違うものがあるのに注意)};
 $ source ~/env/bin/activate
 (env) $ python
 Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
 [GCC 8.3.0] on linux
 Type "help", "copyright", "credits" or "license" for more information.
 >>> print 'test'
   File "<stdin>", line 1
     print 'test'
                ^
 SyntaxError: Missing parentheses in call to 'print'. Did you mean print('test')?
 >>> print('test')
 test
 >>> 
いずれも、終了は''「Ctrl+d」'' または ''quit()'' あるいは ''exit()''

** python2/python3 悩ましい違い! [#c7f29dc7]
>  python2 からpython3 への移行はソースコードに変更を加えないといけない。変換をサポートするツールもあるようだが、最終的には手動のよう。python2 のソースコード資産も多くあるようなのでいまだに両バージョンが混在している模様。~
取り敢えずの問題は「print」
 python2 → print 'ABCD'  または print "ABCD"
 python3 → print('ABCD') または print("ABCD")
python3 の書式は python2 でもOK のようなので、''print 文は print() と表現''することにしよう。

> 参考サイト:[[Python2とPython3の違い>+https://qiita.com/ty21ky/items/e5ce2fd04c2ef07955a1]]

** Hello world [#i299f83f]
- PythonでHello Worldを出力する方法は、print関数の引数に文字列を指定するだけでOK。~
ターミナルを起動して、Pythonのプログラムを実行するファイル「hello.py」を作成。~
 $ cd ~/Programs
 $ vi hello.py
 $ print("Hello world!")
Pythonのプログラムを実行するには、コマンド「python 実行ファイル名」。~
 $ python hello.py
 $ Hello world!

** 変数の使い方 [#acaae24a]
- 変数はまず宣言を行い、宣言した変数に対して値の代入する。
 num1 = 100
 num2 = 200
 num3,num4 = 300,400
 
 print("num1=",num1)
 print("num2=",num2)
 print("num3=",num3)
 print("num4=",num4)
 
 # 実行結果
 num1= 100
 num2= 200
 num3= 300
 num4= 400
- 変数名の左に、=を挟んで値を代入。num3,num4 のように連続して変数を定義して、300,400のように連続して値を代入することもできる。~
- 変数名として使える文字列~
小文字の英字/大文字の英字/数字/アンダースコア &color(red){数字だけの変数名は作れない};~

** コメント [#ea5b874c]
- 1行コメントする場合は、「#」(シャープ)を使用する~
 # Hello Worldを出力する
 print("Hello world!!")
複数行コメントする場合は「'」(シングルクォーテーション)または「"」(ダブルクォーテーション)を3つ指定する必要があある。
 '''
 print("コメント1")
 print("コメント2")
 print("コメント3”)
 '''
シングルクォーテーションで囲った箇所は出力されない。クォーテーションマーク3つで囲んだ部分は文字列として扱われるので、実質コメントとして機能する。~

** 文字コードの指定 [#me6bce9f]
- 1行目または2行目にコメント文として挿入する。~
 # -*- coding: utf-8 -*-
あるいは
 # _*_ coding: utf-8 _*_

** データ型 [#mcf02c36]
- Pythonでは変数の型を宣言する必要はない。~
動的に型付けを行うため、代入された値によって型が自動的に判断される(動的型付け)。~
 num = 100
 pi = 3.14
 str_ = "samurai"
  
 print("num = ",num)
 print("pi = ",pi)
 print("str_ = ",str_)
  
 # 実行結果
 num =  100
 pi =  3.14
 str_ =  samurai

** 演算方法 [#w788c3c5]
- 演算子~
・ 四則演算 (+、-、*、/)~
・ 余剰 (%) 余りを出す計算~
・ 除算 (//) /と//は少し挙動が違うので注意!~
・ べき乗 (**)~
 num = 100
  
 print(num + 100)  # 足し算
 print(num - 50)   # 引き算
 print(num * 10)   # 掛け算
 print(num / 10)   # 割り算
 print(num % 30)   # 余剰
 
 # 実行結果
 200
 50
 1000
 10.0
 10

** 条件分岐(if文) [#oba3078d]
- 処理を分岐する~
 age = 25
  
 if age > 20:
    print("あなたの年齢は20歳以上ですね!")
 
 # 実行結果
 あなたの年齢は20歳以上ですね!
比較演算子などのbool型(Ture, False)を返す演算で条件を指定する。~
Pythonの比較演算子は以下の通り。
|演算子|結果|h
|x < y|xがyより小さければTrue|
|x <= y|xがyより小さいか等しければTrue|
|x > y|xがyより大きければTrue|
|x >= y|xがyより大きいか等しければTrue|
|x == y|xとyの値が等しければTrue|
|x != y|xとyの値が等しくなければTrue|
|x is y|xとyが同じオブジェクトであればTrue|
|x is not y|xとyが同じオブジェクトでなければTrue|
|x in y|xがyに含まれていればTrue|
|x not in y|xがyに含まれていなければTrue|

** リスト(配列) [#gb9712d5]
- 一つの値ではなく、一連の値を格納できる変数。~
 ○ リストの初期化~
各要素をカンマで区切り、カッコ[ ]内に記述~
 a = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
 ○ リストの参照~
リスト名[n]でリストの要素にアクセスできPythonでは要素番号は 0 から始まる。~
 a = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
 b = a[5]
  
 print(b)


** 辞書(dictionary)型 [#fa14baf1]
- キーと値を組み合わせた値が格納されているデータ。~
 # 辞書を定義
 fruits = {"apple":100, "orange":80, "melon":300}
 
 # 値を取り出す
 print(fruits["apple"])
 print(fruits["orange"])
 print(fruits["melon"])
  
 # 実行結果
 100
 80
 300
 辞書

** タプル [#i018ebe0]
- 要素を変更できないリスト、初期化時のカッコの形が( )。座標(X・Y)、画像の大きさ(幅・高さ)、色情報(青・緑・赤)などに使われる。~
 a = (10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
 b = a[5]
  
 print(b)

** ループ処理(for文) [#zfc40356]
*** python for文:書き方 [#l7a81178]
 for 変数 in オブジェクト:
     実行する処理

*** python for文:具体例(配列) [#wb445b1b]
- 以下のようなwordsという配列がある
 words = ['Japanese', 'English', 'French']
- 配列の要素3つを繰り返し処理したい場合
 for w in words:
     print (w)
結果
 Japanese
 English
 French
・変数wに、配列wordsの最初の要素(Japanese)が代入されてprintで出力
・変数wに、配列wordsの二番目の要素(English)が代入されてprintで出力
・変数wに、配列wordsの三番目の要素(French)が代入されてprintで出力

*** python for文:具体例(range関数) [#l607cf79]
- range関数の使い方①
5回繰り返すfor文を書きたい場合
 for num in range(5):
     print(num)
結果
 0
 1
 2
 3
 4
- range関数の使い方②
 for num in range(5, 10):
     print(num)
結果
 5
 6
 7
 8
 9
「range(5, 10)」と記述することで、5から9までの範囲を指定することができる。
- range関数の使い方③
 for num in range(0, 10, 3):
     print(num)
結果
 0
 3
 6
 9
範囲と増加量を指定する。0以上10未満の数字の中で、3ずつ増加する。
- range関数まとめ
 range(5) → 0,1,2,3,4
 range(5,10) → 5,6,7,8,9
 range(0,10,3) → 0,3,6,9
 
*** python for文:breakについて [#b51062bb]
- breakの使い方
 for num in range(20):
     print num
     if num == 3
         break
結果
 0
 1
 2
 3
- python for文:continueについて~
それ以降のブロックをスキップしてブロック先頭に戻る処理。~
 for num in range(2, 10):
     if num % 2 == 0:
         print("偶数", num)
         continue
     print("奇数", num)
結果
 偶数 2
 奇数 3
 偶数 4
 奇数 5
 偶数 6
 奇数 7
 偶数 8
 奇数 9

** ループ処理(while文) [#b24b06d4]
- 指定した条件がTrueのときに処理を繰り返す。
 i = 0
 while i < 5:
     print("i = ",i)  
     i = i + 1
  
 # 実行結果
 i =  0
 i =  1
 i =  2
 i =  3
 i =  4

#br

* Tips [#y5133cc1]
** Python には swich分がない [#n9e27c6b]
- switch文の代用としてif-elif-else 文をつかう。
 str = "A"
 if str = "A" or str == "B":
     print "a or b"
 elif str == "C":
     print "c"
 elif str == "D":
     print "d"
 else:
     print "unknown"
さらに簡潔な書き方
 str = "A"
 if str in {"A", "B"}:
     print "a or b"
 elif str == "C":
     print "c"
 elif str == "D":
     print "d"
 else:
     print "unknown"

#br

* 参考資料 [#m7cd4197]
- [[Python入門 基本文法をまとめて解説>+https://www.sejuku.net/blog/49951]]
- [[Pythonエラー一覧(日本語)>+https://qiita.com/soutarrr7/items/84e529d87aa3b3a9adcb]]
- [[pythonで自作関数をモジュール化・パッケージ化>+https://qiita.com/ren094275/items/5d42f7c6be8c5d3cd014]]
- [[Python で文頭に記載する文字コード>+https://qiita.com/KEINOS/items/6efc1147b917d7811b5b]]
- [[Pythonでのswitch文の書き方>+https://uxmilk.jp/12397]]
- [[Pythonのif文による条件分岐の書き方>+https://note.nkmk.me/python-if-elif-else/]]
- [[Pythonで数字の文字列strを数値int, floatに変換>+https://note.nkmk.me/python-str-num-conversion/]]
- [[python for文を初心者向けに解説!for文基礎はこれで完璧>+https://udemy.benesse.co.jp/development/web/python-for.html]]
- [[Python, formatで書式変換(0埋め、指数表記、16進数など)>+https://note.nkmk.me/python-format-zero-hex/]]
- [[Python入門(6) リスト>+https://www.isc.meiji.ac.jp/~mizutani/python/intro6_python.html]]
- [[【追加/削除】Pythonのlist(リスト)の使い方を徹底解説>+https://www.modis.jp/staffing/insight/column_98/]]
- [[【Python】list(配列)の取り出し方>+https://pg-chain.com/python-list-2]]

#br