A THINKING FRUIT > Python 3

基本
# -*- coding: utf-8 -*-
# ・最初の行には文字コードを記す。 # ・文字コードは UTF-8 。 # ・コメントは半角シャープ # 以降。 # ・インデントは半角スペースで 4 文字、またはタブ 1 つ。 # ・行末を \ にすることで次の行を含めて 1 行となる。 # ・インクリメント ++ / デクリメント -- は存在せず、代わりに += / -= を使う。 # ・switch 文は存在せず、代わりに if / elif / else を使う。 # ・文字列はシングルクォーテーション「'」(またはダブルクォーテーション「"」)で囲む(両記号で動作の違いはない)。 # ・return 文の無い関数は None を返す。 #(用語) # ・シャローコピー:浅いコピーと呼ばれ、同じものを複製する。 # C/C++ の用語を使って説明すると……シャローコピー元の要素にポインタ(アドレス)が含まれている場合、 # アドレスそのものをコピーするためシャローコピー先でも同じインスタンスへアクセスする事になる。
数値
# -*- coding: utf-8 -*-
# 2 進数 v2 = 0b10 # 結果: 2 # 8 進数 v8 = 0o10 # 結果: 8 # 16 進数 v16 = 0x10 # 結果: 16 # 10 進数 v10 = 10 # 結果: 10
関数の定義
# -*- coding: utf-8 -*-
# 関数の定義。 #def で関数の定義を示し、関数名、引数リスト、コロンの順で記す。 def DisplayHelloWorld() :     print( 'Hello world!' ) # 定義した関数の呼び出し DisplayHelloWorld()
文字列の結合、数値と文字列の結合
# -*- coding: utf-8 -*-
s1 = 'Hello' s2 = 'world!' print( s1 + ' ' + s2 ) n1 = 99 # 数値と文字列は直接結合できない # 数値は str 関数を使って文字列に変換して結合する print( str(n1) + ' ' + s1 )
文字列の長さ
# -*- coding: utf-8 -*-
s1 = 'Hello' s2 = 'world!' print( len(s1) ) # 結果: 5 print( len(s2) ) # 結果: 6 s3 = 'あ' s4 = '日本語' print( len(s3) ) # 結果: 1 print( len(s4) ) # 結果: 3
文字列の部分取り出し
# -*- coding: utf-8 -*-
# 012345 s1 = 'world!' # 1 文字目のインデックスは 0 。(0 ベース) print( s1[2] ) # 結果: 'r' ... 位置 2 の文字を取り出す print( s1[3:] ) # 結果: 'ld!' ... 位置 3 から最後まで取り出す print( s1[:5] ) # 結果: 'world' ... 位置 0 から位置 5 の手前(位置 4)まで取り出す print( s1[2:3] ) # 結果: 'r' ... 位置 2 から位置 3 の手前(位置 2)まで取り出す print( s1[:] ) # 結果: 'world' ... 全て取り出す print( s1[-2] ) # 結果: 'd' ... 後ろから 2 番目の文字を取り出す print( s1[-2:2] ) # 空文字列を返す
文字列書式
# -*- coding: utf-8 -*-
s1 = 'No. {}'.format( 1 ) print( s1 ) # 結果: "No. 1" s2 = '{1}/{0:2}'.format( 2019, 10 ) print( s2 ) # 結果: "10/2019" s3 = f"{s2} ... {s1}, {3 + 1}" print( s3 ) # 結果: "10/2019 ... No. 1, 4"
数値の割り算
# -*- coding: utf-8 -*-
n1 = 1 n2 = 3 print( n1 / n2 ) # 結果: 0.3333333333333333 (float 型) print( n1 // n2 ) # 結果: 0 ... 切り捨て (int 型) print( (int)(8 / 5) ) # 結果: 0 ... int 型でキャストしても切り捨て
別の .PY ファイルで定義している関数を呼び出す
routine.py
# -*- coding: utf-8 -*-
def xxxx() :     print( 'process xxxx ...' )
main.py
# -*- coding: utf-8 -*-
# routine.py に定義されている関数を全て呼び出せるようにする from routine import * xxxx()
if 文(分岐)
# -*- coding: utf-8 -*-
def branch( n ) :     # A == B ... A と B が一致     # A != B ... A と B が不一致     # A > B ... A が B より大きい     # A < B ... A が B より小さい     # A >= B ... A が B 以上     # A <= B ... A が B 以下     if n == 1 :         print( 'O.K. ... 1' )     elif n == 2 :         print( 'O.K. ... 2' )     else :         print( 'N.G.' ) branch( 1 )    # 数値 結果: O.K. ... 1 branch( 2 )    # 数値 結果: O.K. ... 2 branch( '1' )    # 文字列 結果: N.G.
if 文(分岐 条件×2)
# -*- coding: utf-8 -*-
if n >= 0 and n < 10 :     print( 'n は 0 以上 10 未満' ) if n <= 14 or n >= 17 :     print( 'n は 14 以下もしくは 17 以上' ) if not A == 1 : # not は比較演算子よりも優先順位が低い     print( 'A は 1 以外です' )
演算子
# -*- coding: utf-8 -*-
A += 1 # A に 1 を加算する A -= 1 # A から 1 を減算する A <<= 1 # 算術左シフト。A を 2 倍にする A >>= 1 # 算術右シフト。A を 1/2 倍にする A ** 2 # = A * A -1 ** 2 # = -(1 ** 2) = - (1 * 1) = -1
配列(リスト)
# -*- coding: utf-8 -*-
colors = [ '赤', '緑', '青', ] # 要素数は len で求める print( len(colors) ) # 結果: 3 print( colors[1] ) # 結果: 緑 # 例外 IndexError が発生 print( colors[4] )
連想配列(辞書)
# -*- coding: utf-8 -*-
x = { 'Red' : '赤', 'Green' : '緑', 'Blue' : '青', } # 要素数は len で求める print( len(x) ) # 結果: 3 # キーは大文字/小文字を区別する print( x['Red'] ) # 結果: 赤 # キー&バリューを削除 del x['Red'] # キーの存在確認 if 'Red' in x :     print( '有' ) else :     print( '無' )
タプル(基本)
# -*- coding: utf-8 -*-
# () で定義するとタプルになる # 配列(リスト)と同じように数値、文字列などなんでも値にできる # 配列(リスト)との違いは変更できない値となる(イミュータブル) x = ( '赤', 2, '緑', '青' ) # 要素数は len で求める print( len(x) ) # 結果: 4 # キーは配列(リスト)と同じで数値で指定する print( x[1] ) # 結果: 2 # 例外 TypeError が発生する x[1] = '黒'
タプル(配列(リスト)を参照するタプル)
# -*- coding: utf-8 -*-
# 配列(リスト)を値とするタプルを定義 x = ( '赤', [10, 11, 12], ('緑', 'みどり'), '青' ) # 要素数 print( len(x) ) # 結果: 4 print( x[1][1] ) # 結果: 11 # 参照している配列(リスト)の要素には代入できる x[1][1] = 50 print( x ) # 結果: ('赤', [10, 50, 12], ('緑', 'みどり'), '青') # 以下のように参照している配列(リスト)を変更することはできない # x[1] = [ 20, 21, 22 ]
タプル(タプルにタプルを加える)
# -*- coding: utf-8 -*-
# 配列(リスト)を値とするタプルを定義 x1 = ( '赤', [10, 11, 12], ('緑', 'みどり'), '青' ) # もう一つタプルを定義 x2 = ( 'Red', 'Green', 'Blue' ) a1 = x1[1] # 要素数 print( len(x1) ) # 結果: 4 print( len(x2) ) # 結果: 3 # 変数の ID を求める # ※ id 関数で求められる ID は実行環境によって変わる print( id(x1) ) # 結果: 1854286562472 print( id(x2) ) # 結果: 1854282775672 x1 += x2 # これは x1 に x2 の要素を加えるわけではなく # x1 と x2 の要素を持つ新しいタプルが作成され x1 はそれを参照する a1[2] = 99 print( x1 ) # 結果: ('赤', [10, 11, 99], ('緑', 'みどり'), '青', 'Red', 'Green', 'Blue') print( id(x1) ) # 結果: 1854286650168 ← 加える前と x1 の ID が変わっている # 以下のように参照しているタプルを変更することはできない # x1[2] += x2
例外
# -*- coding: utf-8 -*-
x = { 'Red' : '赤', 'Green' : '緑', 'Blue' : '青', } try : del x['red'] except KeyError : print( 'キーが不正です' ) except Exception : print( 'その他の例外発生' ) else : # 例外が発生しなかった場合に処理される print( '通過' ) finally : # 例外が発生してもしなくても処理される print( '処理終わり' )
ループ
# -*- coding: utf-8 -*-
# 配列(リスト) x = ( 'Red', 'Green', 'Blue', ) for i in range( len(x) ) : # インデックスを表示 print( i ) # 値を表示 print( ' ' + x[i] ) # 連想配列(辞書) y = { 'Red' : '赤', 'Green' : '緑', 'Blue' : '青', } for key in x : # キーを表示 print( key ) # 値を表示 print( ' ' + y[key] )
正規表現
# -*- coding: utf-8 -*-
import re pattern = r"^(\d+)(?:\.(\d*))?$" rg = re.compile( pattern ) m = rg.match( '23.8' ); if m :     print( 'Hit' )     print( len(m.groups()) ) # 2     print( m[0] ) # '23.8' ... m.group(0) と同じ     print( m[1] ) # '23' ... m.group(1) と同じ     print( m[2] ) # '8' ... m.group(2) と同じ else :     print( 'No hit' )
クラス
# -*- coding: utf-8 -*-
class base :     # static 変数(クラス変数)     nInstance = 0     # コンストラクタ     def __init__( self ) :         base.nInstance += 1         # メンバ変数(インスタンス変数)         self.id = base.nInstance         print( r"base : コンストラクタ" )     # デストラクタ     def __del__( self ) :         print( r"base : デストラクタ" )     # メソッド     def display( self ) :         print( r"base : display メソッド" ) # インスタンス生成 o = base() # メソッド呼び出し o.display() # 動的にメンバ変数(インスタンス変数)を追加 o.x = 100 # 動的にメンバ関数(メソッド)を追加 # その1)メンバ関数(メソッド)の実態を定義 def add_x( self, n ) :     self.x += n # 動的にメンバ関数(メソッド)を追加 # その2)static 変数(クラス変数)へ代入 base.add_x = add_x # 動的にメンバ関数(メソッド)を追加 # その3)メンバ関数(メソッド)を呼び出す o.add_x( 3 ) print( o.x )
派生クラス
# -*- coding: utf-8 -*-
# base クラスから character を派生 # カンマで区切る事で多重継承することができる # 多重継承し、同名のメソッドが定義されていた場合は左側のスーパークラスのメソッドが優先される class character ( base ) :     # コンストラクタ     def __init__( self ) :         parent = super()         parent.__init__()         print( r"character : コンストラクタ" )     # デストラクタ     def __del__( self ) :         print( r"character : デストラクタ" )     # メソッド     def display( self ) :         print( r"character : display メソッド" ) # インスタンス生成 o = character() # メソッド呼び出し o.display()
ライブラリ datetime(日付)
# -*- coding: utf-8 -*-
from datetime import datetime print( datetime.now() ) # 結果: 2019-10-14 19:18:51.636616
ライブラリ openpyxl(.XLSX ファイル)