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
参考:JSONPython で言う「配列」は 「リスト」のことで、[ ] を使って表記しますが、「異なる型のデータを混在できる」、「事後的にデータの追加ができる(要素数を増やせる)」など、他の言語の配列とは様子が異なります。
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
実行する文 3x = [ "Orange", "Apple", "Lemon" ]
for val in x:
print( val )
Orange
Apple
Lemonfor i in range(10):
print( i )
0
1
:
while 条件式:
条件式が真の時に実行する文1
条件式が真の時に実行する文2
条件式が真の時に実行する文3n = 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.14class 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