Python の基本文法
Pythonの変数には、オブジェクトの代入が可能です。数値も文字列もオブジェクトの一つとして扱われます。
>>> x = 256 >>> a = "hello"
対話型の操作では、変数名+ [Enter] で変数の内容が表示されます。
>>> a "hello"
整数と浮動小数点数の2種類があります。
>>> text = """ I have a pen. . . . You have a notebook.""" >>> print(text) I have a pen. You have a notebook.
>>> text ="abcdefg" >>> text += "hijklmn" >>> text 'abcdefghijklmn'
>>> text ="abc"*3 >>> text 'abcabcabc'
形式 [ 開始位置 : 終了位置 : ステップ ] ) >>> text = "ABCDEFG" >>> text[1] 'B' >>> text[2:] 'CDEFG' >>> text[3:5] 'DE' >>> text[1:7:2] 'BDF'
コレクション型とは、複数の値をまとめるデータ型で、一般の配列に相当する「リスト」と「タプル」、また一般の連想配列に相当する「辞書」と「集合」、計4つの型が存在します。
x = [ ] (空のリスト) data = [ 60, 70, 85, 40, 65 ] colorlist = [ "Blue", "Red", "Green" ] person = [ 25, "Yamada", True ] (異なるデータ型の指定も可)
x = () (空のタプル) data = ( 5, 8, 2, 9, 3 ) colorlist = ( "Blue", "Red", "Green" ) person = ( 100, "Tokyo", True ) (異なるデータ型の指定も可)
>>> data = { "left":100 , "right":80 } >>> data["left"] 100参考:JSON
Python で言う「配列」は 「リスト」のことで、[ ] を使って表記しますが、「異なる型のデータを混在できる」、「事後的にデータの追加ができる(要素数を増やせる)」など、他の言語の配列とは様子が異なります。
x = [] for i in range(10): x.append( i ) print(x) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = [0] *10 print(x) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
x = list( range(0,10) ) print(x) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python で用意されている演算子には以下のようなものがあります。
演算子 | 意味 | 例 | 出力 |
+ | 加算 | 2+1 | 3 |
- | 減算 | 3−4 | -1 |
* | 乗算 | 4*5 | 20 |
/ | 除算 | 7/8 | 0.875 |
% | 剰余 | 8%3 | 2 |
// | 切り捨て除算 | 9/2 | 4 |
** | 指数 | 7**2 | 49 |
divmod | 商と余り | divmod(8,3) | (2,3) |
Python で用意されている比較演算子は以下。結果は True または False です。
演算子 | 意味 |
x == y | x と y が等しい |
X != y | x と y が等しくない |
x > y | x は y よりも大きい |
x < y | x は y よりも小さい |
x >= y | x は y と等しいか大きい |
x <= y | x は y と等しいか小さい |
x in y | x という要素 が y に存在する |
x not in y | x という要素 が y に存在しない |
Python で用意されている論理演算子は以下。結果は True または False です。
演算子 | 意味 | 解説 |
x or y | 論理和 | どちらか 1 つが True なら True それ以外は False |
x and y | 論理積 | x と y がどちらも True なら True それ以外は False |
not x | 否定 | x が True なら False、 x が False なら True |
if 文や for 文などの制御では複合文の記載が必要になるます。JavaScript や PHP では { から } までが複合文が書かれる「ブロック」となりますが、Pythonでは、囲み記号を使わず、同じインデント(字下げ)がなされている文をブロックとして扱います。
if 条件式: ブロック内の処理1 ブロック内の処理2
インデントの位置をさらにずらすことでブロックの「入れ子」が実現します。
if 条件式: ブロック内の処理1 ブロック内の処理2 if 条件式: ブロック内の処理1 ブロック内の処理2
if 条件式1: 条件式1が真の時に実行する文 ... elif 条件式2: 条件式1が偽で条件式2が真の時に実行する文 ... else: すべての条件式が偽のときに実行する文 ...
for 変数 in イテラブルオブジェクト: 実行する文 1 実行する文 2 実行する文 3
x = [ "Orange", "Apple", "Lemon" ] for val in x: print( val ) Orange Apple Lemon
for i in range(10): print( i ) 0 1 :
while 条件式: 条件式が真の時に実行する文1 条件式が真の時に実行する文2 条件式が真の時に実行する文3
n = 0 while n < 6: print( "n = " + str( n ) ) n += 1 n = 1 n = 2 n = 3 n = 4 n = 5
def 関数名( 引数1, 引数2, ... ) : 関数内で実行する処理1 関数内で実行する処理2 関数内で実行する処理3 : return 戻り値
定義した関数は、以下のようにして主たるプログラムで利用できます。
# 自作関数の定義 def MyFunc(x): # 入力:引数(ひきすう)として x を受け取る y = 2*x+1 # 処理 return y # 出力:戻り値として y を返す #自作関数を利用したメインプログラム s = input("数を入力して下さい >>>") # 入力 x = float(s) # 処理(文字列を数値に変換) y = MyFunc(x) # 処理(計算) print("計算結果:", y) # 出力 --- 実行結果 --- 数字を入力して下さい >>> 2.5 計算結果: 6
オブジェクト指向プログラミングでは、プロパティ(属性)とメソッド(関数)をカプセル化したクラスを定義するとともに、そのクラス(雛形)からインスタンス(オブジェクトの実体)を生成させて、利用します。
プロパティやメソッドは、以下のように [ . ] 接続で記述します。
class クラス名 : # ここにコード
class MyClass: def __init__( self ): # コンストラクタ self.name = "" # インスタンス変数 myInstance = MyClass() myInstance.name = "John" print( myInstance.name ) ------実行結果------- John
class MyClass: PI = 3.14 #クラス変数 print( MyClass.PI) ------実行結果------- 3.14
class MyClass: count = 0 # クラス変数を初期化 def __init__( self ): # コンストラクタ MyClass.count += 1 # クラス変数をカウントアップ myInstance1 = MyClass() myInstance2 = MyClass() print( MyClass.count ) ------実行結果------- 2
メソッドとはクラスが持つ関数です。メソッドの第一引数には、クラスのインスタンスを指定し、第二引数以降で、メソッドの引数を受けます。
class MyClass: def setName( self, name ): # 第一引数は self self.name = name myInstance = MyClass() myInstance.setName("John") print( myInstance.name ) ------実行結果------- John
# クラスの定義 class myClass: def __init__( self ): # コンストラクタ(メソッドの一種) self.a = 0 # インスタンス変数1 self.b = 0 # インスタンス変数2 def add( self , a, b ): # メソッド self.a = a # インスタンス変数1 self.b = b # インスタンス変数2 s = self.a + self.b # 合計を計算 return s # メインプログラム obj1 = myClass() #初期化 obj2 = myClass() #初期化 print("初期のインスタンス変数:", obj1.a , obj1.b, obj2.a , obj2.b ) sum1 = obj1.add( 3 , 5 ) #メソッドの実行 sum2 = obj2.add( 7 , 8 ) #メソッドの実行 print("実行後のインスタンス変数:", obj1.a , obj1.b, obj2.a , obj2.b ) print("実行後の戻り値:", sum1, sum2 ) --- 実行結果 --- 初期化時点の変数: 0 0 0 0 メソッド実行後の変数: 3 5 7 8 メソッド実行後の戻り値: 8 15
Pythonが機能を分類する単位をモジュールといいます。例えば、sin関数などの数学関連の機能は math という名前のモジュールに含まれていて、これを利用する場合は、まずそのモジュールを import 文でインポートします。
import モジュール名 import モジュール名 as 略称名
import math import pandas as pd
モジュール名.関数名() 略称名.関数名()
y = math.sin(x) df = pd.read_csv(https://・・・・・.csv)
自作関数は、以下のように別ファイルとして利用することができます。
以下、myModule と main.py が同じフォルダ内にある場合の例です。
def myFunc( a, b ): s = a + b return s
import myModule as mm a = input("数を入力して下さい a = ") b = input("数を入力して下さい b = ") x = float(a) y = float(b) s = mm.myFunc( x, y ) print( "計算結果:", s )
数を入力して下さい a = 5.2 数を入力して下さい b = 2.8 計算結果: 8.0
Python では # 記号以降はコメントとして扱われます。プログラム上で文の機能を一時的に無効にする(コメントアウト)場合にも利用可能です。
#から行末までは実行時に無視されます。#より前のコードは有効です。
a = 1 # comment
行頭に#を書くと、行全体コメントとなり、実行時には無視されます。
a = 1 # b = 2 # c = 3 d = 4