基本
# -*- 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