プログラムを入力する枠のことをセルと呼ぶ。
セルごとにプログラムを実行可能。
あるセルで実行した結果は他のセルで引き継ぐことができる。
セルはドラッグ・アンド・ドロップで順序を入れ替えることが可能。
セルをまとめたファイルのことをノートブック(.ipnbファイル)と呼ぶ。
.ipnbファイルは.pyとは異なるため、ノートブックを直接Pythonインタプリタで実行することは出来ない。
Jupiter Notebook
はJupiterLab
の前身。既に開発が終了していて今は使われていないのでJupiterLab
を使ったほうが良い。
print('Hello World!')
コメントアウトしたい行の先頭に#
をつける。
# print('Hello World!')
"""
から"""
までの間の行がすべてコメントとして解釈される。def abc():
""" abcメソッドは〇〇の機能を提供します。 """
class abc():
""" abcクラスは〇〇の機能を提供します。 """
"""
print('Hello World!')
print('Hello World!2')
print('Hello World!3')
"""
または、シングルクォートを用いても可能。
'''
print('Hello World!')
print('Hello World!2')
print('Hello World!3')
'''
以下のように記述した場合、
print('Hello World!0')
"""
print('Hello World!')
print('Hello World!2')
print('Hello World!3')
"""
print('Hello World!4')
実行結果は以下のようになる。
Hello World!0
Hello World!4
型 | 説明 |
---|---|
int型 | pythonでは整数の制度に制限がないため、メモリが許す限り何桁でも扱える。 |
float型 | float同士の演算結果はfloat型になる。<br>pythonでは無限大もfloat型として扱う。正の無限大はfloat(inf) と記述し、負の無限大はfloat(-inf) と記述する。<br>数値として扱えないNaN もfloat型として扱い、float(nan) と記述する。数値同士の演算にNaNが含まれる場合は、演算結果もNaNになる。 |
complex型 | 複素数を扱う型で、数値リテラルにj またはJ を付けるとcomplex型になる。 |
_
を用いることで桁区切りをすることができる。
num = 1_000_000_000
print(num)
実行結果は以下のとおり
1000000000
組み込み変数のint()
、float()
、complex()
を使うことで、数値型を変換することができる。
# int型
num = int(100)
print(num)
# float型
print(float(num))
# complex型
print(complex(num))
実行結果は以下のとおり
100
100.0
(100+0j)
print(100 + 100)#200 加算
print(100 - 10)#90 減算
print(100 * 10)#1000 乗算
print(100 / 10)#10.0 割り算。結果は小数点で返ってくる。
print(100 // 10)#0 割り算。結果は整数で返ってくる。
print(4 // 3)# 1 割り算のあまり。
print(4 ** 3)#64 べき乗
優先順位 | 演算子 |
---|---|
高 | ** |
中 | * 、/ 、% |
低 | + 、- |
式の一部を()
で囲むことで優先順位を最上位にすることができる。
文字リテラルを使うときは"
か'
を使う。
print('100' + '100')#100100
文字列 * 数値
または数値 * 文字列
で文字列を反復することができる。
文字列 * 数値
の場合print('123' * 2)#123123
数値 * 文字列
の場合print(2 * '456')#456456
()
内の複数の連続する文字は1つの文字として解釈されます。
str = ('aaaaa'
'bbbbb'
'ccccc')
print(str)
実行結果は以下のとおり
aaaaabbbbbccccc
3つの"
で括ると改行も含む文字列を生成できます。
str = """aaa
bbb
ccc"""
print(str)
実行結果は以下のとおり
aaa
bbb
ccc
バックスラッシュ\
とその後ろに続く文字からなる表記。
表記 | 意味 |
---|---|
\n |
改行 |
\\ |
バックスラッシュ\ の記号文字 |
\' |
シングルクォーテーション' の記号文字 |
\" |
ダブルクォーテーション" の記号文字 |
※バックスラッシュと円マークはコンピュータ内部では同じ文字として解釈される。 Linuxの場合は区別している場合があるがあるのでうまくいかない場合は適宜修正する。
print('あいうえお\nかきくけこ\nさしすせそ')
結果は以下のとおり
あいうえお
かきくけこ
さしすせそ
print('あいうえお\\かきくけこ\\さしすせそ')
結果は以下のとおり
あいうえお\かきくけこ\さしすせそ
print('あいうえお\'かきくけこ\'さしすせそ')
結果は以下のとおり
あいうえお'かきくけこ'さしすせそ
print('あいうえお\"かきくけこ\"さしすせそ')
結果は以下のとおり
あいうえお"かきくけこ"さしすせそ
変数の定義は以下のように変数名=値
の形で記述する。
Pythonには定数が存在しないため、すべての変数は上書き可能です。
name='taro'
使用例は以下のとおり。
name='taro'
print(name)#taro
複数の変数定義を1行で記述する方法。
変数名1, 変数名2 = 値1, 値2
の形で記述する。
name, age = 'jiro', 20
使用例は以下のとおり。
name, age = 'jiro', 20
print(name)#jiro
print(age)#20
演算子 | 意味 |
---|---|
+= |
左辺と右辺を加算して、結果を左辺に代入 |
-= |
左辺と右辺を減算して、結果を左辺に代入 |
*= |
左辺と右辺を乗算して、結果を左辺に代入 |
/= |
左辺と右辺を除算して、結果を左辺に代入 |
キーボード入力待ち受ける関数。
入力された値は文字列で受け取れる。
str = input('何か入力してください。')
print('入力された文字は' + str + 'です。')
結果は以下のとおり。
何か入力してください。111
入力された文字は111です。
Pythonのデータ型には以下の種類がある。
データ型 | 説明 |
---|---|
int | 整数型 |
float | 小数型 |
str | 文字列型 |
bool | 真偽値 |
<mark>変数自体はデータ型を持たないが、値はデータ型を持つ。</mark>
変数に格納されている値が、何の型なのかを調べるための関数。
var1 = 1
var2 = '2'
var3 = 'あいうえお'
var4 = True
var5 = 'True'
print(type(var1))
print(type(var2))
print(type(var3))
print(type(var4))
print(type(var5))
結果は以下のとおり
<class 'int'>
<class 'str'>
<class 'str'>
<class 'bool'>
<class 'str'>
True
もしくはFalse
と記述する必要がある。
true
もしくはfalse
と記述するとコンパイルエラーになる。
var1 = True
var2 = true #コンパイルエラー
var3 = False
var4 = false # コンパイルエラー
関数 | 説明 |
---|---|
int(x) | 変数xをint型に変換する。<br>xが少数の場合は、切り捨てられて整数になる。<br>xが数値として解釈できない文字列の場合はエラーになる。 |
float(x) | 変数xをfloat型に変換する。<br>xが数値として解釈できない文字列の場合はエラーになる。 |
str(x) | 変数xをstr型に変換する。 |
bool(x) | 変数xをbool型に変換する。 |
値が1.00
の場合
var1 = 1.00
var2 = '1.00'
floatVar1 = float(var1)
floatVar2 = float(var2)
print(floatVar1)
print(floatVar2)
print(type(floatVar1))
print(type(floatVar2))
実行結果は以下のとおり。
1.0
1.0
<class 'float'>
<class 'float'>
値が1.09
の場合
var1 = 1.09
var2 = '1.09'
floatVar1 = float(var1)
floatVar2 = float(var2)
print(floatVar1)
print(floatVar2)
print(type(floatVar1))
print(type(floatVar2))
実行結果は以下のとおり。
1.09
1.09
<class 'float'>
<class 'float'>
各データ型をstr型に変換して出力する関数。
name = 'ドラえもん'
age = 10
height = 129.3
boolVar = True
moji = 'ぼく{}です。年齢は{}歳です。身長は{}cmです。〇〇は{}です。'.format(name, age, height, boolVar)
print(moji)
結果は以下のとおり。
ぼくドラえもんです。年齢は10歳です。身長は129.3cmです。〇〇はTrueです。
name = 'ドラえもん'
age = 10
height = 129.3
boolVar = True
moji = 'ぼく{2}です。年齢は{1}歳です。身長は{3}cmです。〇〇は{0}です。'.format(boolVar,age,name,height)
print(moji)
結果は以下のとおり。
ぼくドラえもんです。年齢は10歳です。身長は129.3cmです。〇〇はTrueです。
name = 'ドラえもん'
age = 10
height = 129.3
boolVar = True
moji = 'ぼく{n}です。年齢は{a}歳です。身長は{h}cmです。〇〇は{b}です。'.format(n=name, a=age, h=height, b=boolVar)
print(moji)
結果は以下のとおり。
ぼくドラえもんです。年齢は10歳です。身長は129.3cmです。〇〇はTrueです。
dora = {'name':'ドラえもん','age':'10','height':'129.3'}
moji = "ぼく{name}です。年齢は{age}歳です。身長は{height}cmです。".format(**dora)
print(moji)
結果は以下のとおり。
ぼくドラえもんです。年齢は10歳です。身長は129.3cmです。〇〇はTrueです。
以下のように書いても同じ結果になる。
dora = {'name':'ドラえもん','age':'10','height':'129.3'}
moji = "ぼく{name}です。年齢は{age}歳です。身長は{height}cmです。"
result = moji.format(**dora)
print(result)
f-string
format関数を使わずにもっと直感的に書けるようにしたもの。
Python3.6
以降で利用可能な機能。
name = 'ドラえもん'
age = 10
height = 129.3
boolVar = True
moji = f'ぼく{name}です。年齢は{age}歳です。身長は{height}cmです。〇〇は{boolVar}です。'
print(moji)
結果は以下のとおり。
ぼくドラえもんです。年齢は10歳です。身長は129.3cmです。〇〇はTrueです。
データの集合をPythonでは「コレクション」または「コンテナ」と呼び、以下の種類がある。
list
)dictionaly
)tuple
)set
)list
)list
)は、複数の値を1列に並べて管理するためのコレクション。[]
を使って宣言する。,
で区切る。リストを宣言するには以下のように記述する。
リスト名 = [要素1, 要素2, 要素3]
初期値を設定する場合は以下のように記述する。
nameList = ['taro', 'jiro', 'saburo']
空のリストを作成するには以下のようにlist関数を呼び出す。
nameList = list()
また、以下の記述でも空のリストを作成可能。
nameList = []
nameList = ['taro', 'jiro', 'saburo']
print(nameList) #{'taro', 'jiro', 'saburo'}
print(nameList[1]) #jiro
実行結果は以下のとおり。
['taro', 'jiro', 'saburo']
jiro
append
メソッドで追加する。nameList = ['taro', 'jiro', 'saburo']
print(nameList) #追加前を出力
nameList.append('shiro')
nameList.append('goro')
print(nameList) #追加後を出力
実行結果は以下のとおり。
['taro', 'jiro', 'saburo']
['taro', 'jiro', 'saburo', 'shiro', 'goro']
特にメソッドは存在せず、=
で再代入する。
nameList = ['taro', 'jiro', 'saburo']
print(nameList[0]) #変更前を出力
nameList[0] = 'ichiro' #←ここで変更
print(nameList[0]) #変更後を出力
実行結果は以下のとおり。
taro
ichiro
remove
メソッドを用いる。nameList = ['taro', 'jiro', 'saburo']
print(nameList) #削除前を出力
nameList.remove('jiro')
print(nameList) #削除後を出力
実行結果は以下のとおり。
['taro', 'jiro', 'saburo']
['taro', 'saburo']
sum
関数)num = [10, 20, 30]
print(sum(num)) #60
コンパイルは通るが実行時エラーになる。
num = ['10', '20', '30']
print(sum(num))
以下のエラーが出力される。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-75-ce5b7b2cd510> in <module>()
1 num = ['10', '20', '30']
2
----> 3 print(sum(num))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
len
関数)num = [10, 20, 30]
print(len(num)) #3
[:]
と記述する。[n:]
と記述する。[:n]
と記述する。[x:y]
と記述する。※添字を指定しているわけではないので、適当な数値でもエラーになったりはしない。
num = [10, 20, 30, 40, 50]
print(num[:]) #すべての添字を参照
print(num[2:]) #添字2以降を参照
print(num[:3]) #添字3未満を参照
print(num[1:4]) #添字1以上4未満を参照
print(num[0:5]) #添字0以上5未満を参照
実行結果は以下のとおり。
[10, 20, 30, 40, 50]
[30, 40, 50]
[10, 20, 30]
[20, 30, 40]
[10, 20, 30, 40, 50]
負の数を指定することで、リストの末尾から参照することが可能。
num = [10, 20, 30, 40, 50]
print(num[-1])
print(num[-2])
print(num[-3])
print(num[-4])
print(num[-5])
実行結果は以下のとおり。
50
40
30
20
10
以下のように存在しない添字を指定すると実行時エラーになる。
num = [10, 20, 30, 40, 50]
print(num[-6])
以下、エラーの内容。
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-83-0acb11719e5d> in <module>()
1 num = [10, 20, 30, 40, 50]
2
----> 3 print(num[-6])
IndexError: list index out of range
{}
で宣言する。,
で区切る。Pytyon3.7
以降であれば、データが追加した順になっている。(Pytyon3.6
以下の場合、ディクショナリの順番は保証されない。)yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
参照するには波括弧{}
ではなく角括弧[]
を使うことに注意。
yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
print(yasai) #全部指定
print(yasai['ninjin']) #個別指定
実行結果は以下のとおり。
{'kyabetsu': 50, 'ninjin': 80, 'tamanegi': 30}
80
存在しないキーを参照した場合は実行時エラーになります。
yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
print(yasai['apple'])
実行結果は以下のとおり。
KeyError Traceback (most recent call last)
<ipython-input-94-eb0b01918080> in <module>()
1 yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
2
----> 3 print(yasai['apple'])
KeyError: 'apple'
存在しないキーに対して値を代入すると追加になります。
yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
yasai['hakusai'] = 300
print(yasai['hakusai'])
実行結果は以下のとおり。
300
存在するキーに対して値を代入すると更新になります。
yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
print(yasai['ninjin']) #更新前の出力
yasai['ninjin'] = 70 #値の更新
print(yasai['ninjin']) #更新後の出力
実行結果は以下のとおり。
80
70
削除するにはdel
構文を使用する。
yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
print(yasai) #削除前の出力
del yasai['ninjin']
print(yasai) #削除後の出力
実行結果は以下のとおり。
{'kyabetsu': 50, 'ninjin': 80, 'tamanegi': 30}
{'kyabetsu': 50, 'tamanegi': 30}
.values()
メソッドを用いると、キーを除いた値だけの集合を取得することができる。
yasai = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
gokei = sum(yasai.values()) #合計を取得
print(gokei)
実行結果は以下のとおり。
160
in
演算子を使うことでキーが存在するかどうかを調べることができる。
yasaiDict = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
key = 'ninjin'
if key in yasaiDict:
print('指定したキーは存在します。')
else:
print('指定したキーは存在しません。')
キーが存在しない場合のみ追加したい場合は、以下のように記述する。
yasaiDict = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
key = 'hakusai'
if (key in yasaiDict) != True:
print('指定したキーは存在しません。')
yasaiDict[key] = '100'
print(yasaiDict)
実行結果は以下のとおり
指定したキーは存在しません。
{'kyabetsu': 50, 'ninjin': 80, 'tamanegi': 30, 'hakusai': '100'}
not
演算子を使って以下のように記述しても同じ結果に成る。
yasaiDict = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30}
key = 'hakusai'
if not(key in yasaiDict):
print('指定したキーは存在しません。')
yasaiDict[key] = '100'
print(yasaiDict)
()
で宣言する。,
で区切る。,
であるとされている。0
から始まる。yasaiTuple = ('daikon', 'piman', 'tomato')
yasaiTuple = ('daikon', 'piman', 'tomato')
print(yasaiTuple[1])
実行結果は以下のとおり。
piman
numTuple = (100, 50, 120)
print(sum(numTuple))
実行結果は以下のとおり。
270
len
メソッドで要素数を求めることができる。
yasaiTuple = ('daikon', 'piman', 'tomato')
print(len(yasaiTuple))
実行結果は以下のとおり。
3
以下のように記述すると実行結果はstr型と判定されてしまう。
yasaiTuple = ('daikon')
print(type(yasaiTuple))
実行結果は以下のとおり。
<class 'str'>
なぜstr型になってしまうかというと、('daikon')
と記述すると、文字列を()
で括って優先順位を引き上げているように解釈されるため。
要素数1のタプルを生成するには、'daikon',
のように後ろにカンマをつけて記述する必要がある。
yasaiTuple = ('daikon', )
print(type(yasaiTuple))
実行結果は以下のとおり。
<class 'tuple'>
append
の代わりにadd
で要素の追加を行う。{}
で宣言する。,
で区切る。
yasaiSet = {'daikon', 'piman', 'tomato'}
print(yasaiSet)
print(len(yasaiSet))
yasaiSet.add('jagaimo')
print(yasaiSet)
実行結果は以下のとおり。
{'piman', 'daikon', 'tomato'}
3
{'piman', 'jagaimo', 'daikon', 'tomato'}
&
2つのセットの中から共通の要素を見つけ出し、それだけのセットを作成する。
carrySet = {'jagaimo', 'ninjin', 'tamnegi','currySauce'}
nikujagaSet = {'jagaimo', 'ninjin', 'tamnegi','kinoko'}
resultSet = carrySet & nikujagaSet
print(resultSet)
実行結果は以下のとおり。
{'tamnegi', 'jagaimo', 'ninjin'}
|
2つのセットの内容をすべて含めたセットを作成する。
carrySet = {'jagaimo', 'ninjin', 'tamnegi','currySauce'}
nikujagaSet = {'jagaimo', 'ninjin', 'tamnegi','kinoko'}
resultSet = carrySet | nikujagaSet
print(resultSet)
実行結果は以下のとおり。
{'jagaimo', 'currySauce', 'tamnegi', 'ninjin', 'kinoko'}
-
セットAに存在して、セットBには存在しない要素から成るセットを作成する。
carrySet = {'jagaimo', 'ninjin', 'tamnegi','currySauce'}
nikujagaSet = {'jagaimo', 'ninjin', 'tamnegi','kinoko'}
resultSet = carrySet - nikujagaSet
print(resultSet)
実行結果は以下のとおり。
{'currySauce'}
^
セットAにしか存在しない要素、セットBにしか存在しない要素から成るセットを作成する。
carrySet = {'jagaimo', 'ninjin', 'tamnegi','currySauce'}
nikujagaSet = {'jagaimo', 'ninjin', 'tamnegi','kinoko'}
resultSet = carrySet ^ nikujagaSet
print(resultSet)
実行結果は以下のとおり。
{'currySauce', 'kinoko'}
list
関数を用います。yasaiDict = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30} #ディクショナリ
yasaiTuple = ('daikon', 'piman', 'tomato') #タプル
yasaiSet = {'daikon', 'piman', 'tomato'} #セット
print(list(yasaiDict))
print(type(list(yasaiDict)))
print(list(yasaiTuple))
print(type(list(yasaiTuple)))
print(list(yasaiSet))
print(type(list(yasaiSet)))
実行結果は以下のとおり
['kyabetsu', 'ninjin', 'tamanegi']
<class 'list'>
['daikon', 'piman', 'tomato']
<class 'list'>
['piman', 'daikon', 'tomato']
<class 'list'>
tuple
関数を用います。yasaiList = ['daikon', 'piman', 'tomato'] #リスト
yasaiDict = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30} #ディクショナリ
yasaiSet = {'daikon', 'piman', 'tomato'} #セット
print(tuple(yasaiList))
print(type(tuple(yasaiList)))
print(tuple(yasaiDict))
print(type(tuple(yasaiDict)))
print(tuple(yasaiSet))
print(type(tuple(yasaiSet)))
実行結果は以下のとおり
('daikon', 'piman', 'tomato')
<class 'tuple'>
('kyabetsu', 'ninjin', 'tamanegi')
<class 'tuple'>
('piman', 'daikon', 'tomato')
<class 'tuple'>
set
関数を用いる。yasaiList = ['daikon', 'piman', 'tomato'] #リスト
yasaiDict = {'kyabetsu':50, 'ninjin':80, 'tamanegi':30} #ディクショナリ
yasaiTuple = ('daikon', 'piman', 'tomato') #タプル
print(set(yasaiList))
print(type(set(yasaiList)))
print(set(yasaiDict))
print(type(set(yasaiDict)))
print(set(yasaiTuple))
print(type(set(yasaiTuple)))
実行結果は以下のとおり
{'piman', 'daikon', 'tomato'}
<class 'set'>
{'ninjin', 'kyabetsu', 'tamanegi'}
<class 'set'>
{'piman', 'daikon', 'tomato'}
<class 'set'>
「キーを保持したリスト」と「値を保持したリスト」の2つを用意することで、dict(zip(keyList,valueList))
の形でディクショナリに変換することができる。
vegetableKeyList = ['daikon','hakusai','tamanegi']
vegetableValueList = ['大根','白菜','玉ねぎ']
resultDict = dict(zip(vegetableKeyList, vegetableValueList)) #ディクショナリに変換
print(resultDict)
print(type(resultDict))
実行結果は以下のとおり
{'daikon': '大根', 'hakusai': '白菜', 'tamanegi': '玉ねぎ'}
<class 'dict'>
IndentationError
が発生する。TabError
が発生する。num = int(input('値を入力してください→'))
if(num >=50):
print('入力された値は50以上です')
else:
print('入力された値は49以下です')
print('この文はifブロックを抜けています')
elif
構文で記述する。
num = int(input('値を入力してください→'))
if(num >=50):
print('入力された値は50以上です')
elif(num >=30):
print('入力された値は30以上です')
else:
pass
print('この文はifブロックを抜けています')
「何もしない」を表現したい場合はpass
を用いる。
pass
と明示的に記述しないとコンパイルエラーになる。
num = int(input('値を入力してください→'))
if(num >=50):
print('入力された値は50以上です')
else:
pass
print('この文はifブロックを抜けています')
演算子 | 意味 | 使用例 |
---|---|---|
and |
かつ | if num >=50 and num <=100 <br>50以上100以下の場合True |
or |
または | if num1 <=30 or num2 <=50 <br>num1が30以下もしくはnm2が50以下の場合True |
not |
否定 | if not(key in yasaiDict): <br>キーが野菜dictに含まれていない場合True |
False
として解釈される値False
の他にFalse
として解釈される値として以下があります。
None
はJavaでいうNull
と同義です。
num = int(0)
f_num = float(0.0)
nonStr = None
tmpStr = ''
tmpList = []
tmpDict = {}
tmpTuple = ()
print(bool(num))
print(bool(f_num))
print(bool(nonStr))
print(bool(tmpStr))
print(bool(tmpList))
print(bool(tmpDict))
print(bool(tmpTuple))
実行結果は以下のとおり
False
False
False
False
False
False
False
while
文は何回繰り返すかわからないときに使う。
以下のようにも記述できるが、繰り返す数が決まっているときはfor
文を使う。
cnt = 0
limit = 5
while cnt < limit:
print(f'cntの値は{cnt}です')
cnt += 1
実行結果は以下のとおり
cntの値は0です
cntの値は1です
cntの値は2です
cntの値は3です
cntの値は4です
while
文は以下のように、いつかフラグを変えてループを終了するようなときに使う。
flag = True
while flag:
num = int(input('数値を入力してください>'))
if num == 100:
print('100が入力されました。ループを終了します。')
flag = False
else:
print(f'入力された値は{num}です。ループを続けます。')
print('ここはwhile文を抜けてます。')
実行結果は以下のとおり
数値を入力してください>1
入力された値は1です。ループを続けます。
数値を入力してください>10
入力された値は10です。ループを続けます。
数値を入力してください>50
入力された値は50です。ループを続けます。
数値を入力してください>100
100が入力されました。ループを終了します。
ここはwhile文を抜けてます。
pythonではwhile文にelse句を使うことができます。
else句には、while文が終了したときに一度だけ実行させたい処理を記述することができます。
なお、break
文でwhile
文を抜けた際にはelse
句の処理は実行されません。
flg = True
while flg:
print(flg)
flg = False
else:
print('ループを抜けています。')
実行結果は以下のとおり
True
ループを抜けています。
以下のようにbreak文がある場合はelse句の処理は実行されません。
flg = True
while flg:
print(flg)
break
else:
print('ループを抜けています。')
実行結果は以下のとおり
True
リストなどデータの集合に対して繰り返し処理をしたい場合はfor文がおすすめ。
num = [10, 20, 30, 40, 50]
for n in num:
print(n)
print('ここはもうfor文が終了してます。')
実行結果は以下のとおり
10
20
30
40
50
ここはもうfor文が終了してます。
range
関数range
関数は、指定した数より1小さい整数列を生成することができる。
range(5)とした場合は、0,1,2,3,4の整列を生成することができる。
for n in range(5):
print(n)
print('ここはもうfor文が終了してます。')
実行結果は以下のとおり
0
1
2
3
4
ここはもうfor文が終了してます。
break
とcontinue
繰り返し処理を抜けるにはbreak
、次のループに行くにはcontinue
を用いる。
以下の処理は10以上の値を抽出してリストに詰める処理のサンプル
targetList = [0, '100' ,80 , '晴れ', 30, 60, '曇り',20]
resultList = list() #結果リスト
for data in targetList:
# 結果リストが3以上の場合、ループを抜ける。
if len(resultList) >=3:
print(f'要素を3個取得したのでループを抜けます。')
break;
# int型以外を弾く。
if not(isinstance(data, int)):
print(f'この値はint型でないためスキップされました。{data}')
continue
# 10以上の場合、結果リストに格納する。
if data >= 10:
resultList.append(data)
print(resultList)
実行結果は以下のとおり
この値はint型でないためスキップされました。100
この値はint型でないためスキップされました。晴れ
要素を3個取得したのでループを抜けます。
[80, 30, 60]
enumerate
組み込み関数enumerate
を用いると、リストのインデックスも一緒に取得することができます。
animals = ['dog', 'cat', 'cow', 'bear', 'pig']
for cnt, animal in enumerate(animals):
print(f'{cnt}番目の動物は{animal}')
実行結果は以下のとおり
0番目の動物はdog
1番目の動物はcat
2番目の動物はcow
3番目の動物はbear
4番目の動物はpig
pythonではfor文にelse句を使うことができます。
else句には、for文が終了したときに一度だけ実行させたい処理を記述することができます。
なお、break
文でfor
文を抜けた際にはelse
句の処理は実行されません。
animals = ['dog', 'cat', 'cow']
for cnt, animal in enumerate(animals):
print(f'{cnt}番目の動物は{animal}')
else:
print('これで処理を終了します。')
実行結果は以下のとおり
0番目の動物はdog
1番目の動物はcat
2番目の動物はcow
これで処理を終了します。
以下のようにbreak文がある場合はelse句の処理は実行されません。
animals = ['dog', 'cat', 'cow']
for cnt, animal in enumerate(animals):
print(f'{cnt}番目の動物は{animal}')
if cnt == 1:
break
else:
print('これで処理を終了します。')
実行結果は以下のとおり
0番目の動物はdog
1番目の動物はcat
try-except-finally
キーワード | 説明 |
---|---|
try句 | 例外が発生する可能性のある処理を記述する。 |
except句 | try句の中で例外が発生した場合に、どんな処理を実行したいかを記述する。 |
else句 | except句が存在する場合のみelse句は記述できる。<br>try句で例外が発生しなかった場合の処理を記述する。 |
finally句 | 例外が発生したかに関わらず必ず最後に実行したい処理を記述する。<br>finally句はexcept句が無くても利用可能 |
as | 例外オブジェクトをexcept句ブロック内で利用できる。 |
以下のコードは、実際に例外を発生させた例です。
animals = ['dog', 'cat', 'cow']
try:
print('ここはtry句です。')
print(animals[3]) #あえて存在しないindexを指定する。
except IndexError as e:
print('ここはexcept句です。')
print(f'例外をキャッチしました。→{e}')
finally:
print('ここはfinally句です。')
実行結果は以下のとおり
ここはtry句です。
ここはexcept句です。
例外をキャッチしました。→list index out of range
ここはfinally句です。
else
句の使用例は以下のとおりです。
animals = ['dog', 'cat', 'cow']
try:
print('ここはtry句です。')
str = animals[2]
except IndexError as e:
print('ここはexcept句です。')
print(f'例外をキャッチしました。→{e}')
else:
print('ここはelse句です。')
print(str)
finally:
print('ここはfinally句です。')
実行結果は以下のとおり
ここはtry句です。
ここはelse句です。
cow
ここはfinally句です。
raise
文raise
文を用いると、意図的に例外を発生させることができます。
try:
print('ここはtry句です。')
raise TypeError('型エラーです。')
except IndexError as e:
print('ここはexcept句です。')
print(f'例外をキャッチしました。→{e}')
except TypeError as e2:
print(f'例外をキャッチしました。→{e2}')
else:
print('ここはelse句です。')
finally:
print('ここはfinally句です。')
実行結果は以下のとおり。
ここはtry句です。
例外をキャッチしました。→型エラーです。
ここはfinally句です。
except
句にraise
文を用いると例外のログを出力することが出来ます。
try:
print('ここはtry句です。')
raise TypeError('型エラーです。')
except IndexError as e:
print('ここはexcept句です。')
print(f'例外をキャッチしました。→{e}')
except TypeError as e2:
print(f'例外をキャッチしました。→{e2}')
raise
else:
print('ここはelse句です。')
finally:
print('ここはfinally句です。')
実行結果は以下のとおり
ここはtry句です。
例外をキャッチしました。→型エラーです。
ここはfinally句です。
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-ead17b6739b8> in <module>
3 try:
4 print('ここはtry句です。')
----> 5 raise TypeError('型エラーです。')
6 except IndexError as e:
7 print('ここはexcept句です。')
TypeError: 型エラーです。
独自関数を定義するには以下のように記述する。
def
は「定義する」という英単語のdefine
に由来する。
def 関数名():
処理
呼び出すには、呼び出したい箇所で以下のように記述する。
関数名()
例えばPythonが標準で用意しているinput
関数と同じ名前で自分でinput
という名前の関数を作ってしまうと、Python標準のinput
関数は使えなくなってしまう。
def tashizan():
return 10 + 20
# 関数の呼び出し
result = tashizan()
print(result) # 30
def tashizan(x, y):
return x + y
# 関数の呼び出し
result = tashizan(5,5)
print(result) # 10
return
文が書かれていない関数は、return None
という記述が省略されたものとみなされる。
def tashizan(x, y):
print(x + y)
# 関数の呼び出し
result = tashizan(10, 30)
print(result) # None
result
をカンマ区切りで記述することによってタプルでreturnすることができる。
def calc(x, y):
tasizan = x + y
hikizan = x - y
kakezan = x * y
warizan = x / y
return tasizan, hikizan, kakezan, warizan
result = calc(30,10)
print(result) #(40, 20, 300, 3.0)
以下のように受け取ることも出来る。
tasizan, hikizan, kakezan, warizan = calc(30,10)
print(tasizan) # 40
print(hikizan) # 20
print(kakezan) # 300
print(warizan) # 3.0
def calc(x=10, y=20):
return x + y
# 引数を渡して実行
result = calc(30, 40)
print(result) # 70
# 引数を渡さずに実行
result2 = calc()
print(result2) # 30
ただし、以下のような関数定義はエラーになる。デフォルト引数を設定したい場合は、最後の引数から順にデフォルト値を設定する必要がある。
def calc(x=10, y, z):
キーワード指定をすると、関数に渡した順番とは関係なく、値を渡すことが出来る。
def calc(x,y,z):
print(f'引数xには{x}が渡されました。')
print(f'引数yには{y}が渡されました。')
print(f'引数zには{z}が渡されました。')
return x + y + z
result = calc(z=50, x=10, y=30)
print(result)
実行結果は以下のとおり。
引数xには10が渡されました。
引数yには30が渡されました。
引数zには50が渡されました。
90
type
で方を調べることが可能。
def calc(x, y, z):
return x + y + z
print(type(calc))
実行結果は以下のとおり
<class 'function'>
作成した関数は、変数に代入して実行することが可能です。
def calc(x, y, z):
return x + y + z
keisan = calc
print(keisan(10, 15, 20))
実行結果は以下のとおり
45
def calc(x,y,z, other=()):
i = 0;
for tmp in other:
print(tmp)
i = i + tmp
return x + y + z + i
result = calc(10,20,30,(1,3,5))
print(result)
実行結果は以下のとおり。
1
3
5
69
*
を使用した可変長引数(タプル編)*
を用いることでタプルを使用して明示的に可変長引数だと表すことが出来る。*args
と記述する慣習がある。def calc(x,y,z, *other):
i = 0;
for tmp in other:
print(tmp)
i = i + tmp
return x + y + z + i
result = calc(100,200,300,10,30,50)
print(result)
10
30
50
690
**
を使用した可変長引数(ディクショナリ編)**
とすることで可変長引数にディクショナリを使用することが出来る。**kwargs
と記述する慣習がある。def calc(**kwagrs):
num = 0
for key in kwagrs:
num = num + kwagrs[key]
return num
result = calc(aaa=10, bbb=20, ccc=30)
print(result) # 60
global
文を使うことで、関数内でグローバル変数を使うことを表明することが出来る。(グローバル変数の値を書き換えることが出来る。)num = 100
def aaa():
print(num)
def changeGlobal():
global num
num = 10
aaa()
print(f'変更前のnumは{num}')
changeGlobal()
aaa()
print(f'変更後のnumは{num}')
実行結果は以下のとおり
変更前のnumは100
変更後のnumは10
id
関数を使って調べることが可能。id(obj1) == id(obj2)
を使う。obj1 == obj2
を使う。# int型
num1 = int(10)
num2 = int(10)
print(id(num1) == id(num2))
# str型
moji1 = str('taro')
moji2 = str('taro')
print(id(moji1) == id(moji2))
# list
obj1 = list([10 ,20, 30])
obj2 = list([10 ,20, 30])
print(id(obj1) == id(obj2))
print(obj1 == obj2)
実行結果は以下のとおり
True
True
False
True
Pythonでは、以下は不変オブジェクトとされている。
不変オブジェクトの内容を書き換えようとすると、別のオブジェクトとして生まれ変わる。代入前のオブジェクトは捨てられる。
text = input('何か入力してください>')
file = open('sample.txt','a') # 指定したファイルが存在しない場合は自動的に作成する。
file.write(text + '\n')
file.close()
with
文を用いると、withブロック終了時に自動的にファイルを閉じてくれる。
text = input('何か入力してください>')
with open('sample.txt','a') as file: # 指定したファイルが存在しない場合は自動的に作成する。
file.write(text + '\n')
import文はどこにでも記述することができるが、散らばっていると、何のライブラリを取り込んだのかが分かり辛くなってしまうので、ファイルの先頭にまとめて記述することが推奨されている。
import math # mathモジュールを使うことを宣言
print(math.pi) # mathモジュールの変数piを使用
長すぎる名前などには、自分がわかりやすいように別名を付けておくことができる。
import math as m # mathモジュールを使うことを宣言
print(m.pi) # mathモジュールの変数piを使用
取り込むときに変数名や関数名だけ取り込んでおけば使用するときにライブラリ名.変数名
の形ではなく単に変数名
で参照可能になる。
from math import pi
print(pi) # mathモジュールの変数piを使用
from math import floor as shisyagonyu
print(shisyagonyu(3.3))
from math import *
print(floor(pi))
import
の右側に注目する。import 〇〇
と宣言した場合は呼び出し時に〇〇
で使用可能になる。
以下のコマンドでインストール可能。
pip install ライブラリ名
ただし、anacondaを利用している場合はpip
コマンドだと環境が壊れてしまうため、以下のコマンドを使用した方がいい。
conda install パッケージ名