乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

python

                  16.代入演算子

プログラミングではデータを格納することを
「代入」といっています。

その代入の仕方に関わる演算子が「代入演算子」です。

代入は = イコール 記号となります。

文字を代入する場合は シングルクォートやダブルクォートで囲み
数値を代入する場合は そのまま数字を入力します。

In [1]:
# 変数a に数値 121を代入
a = 121

print(a)
121

「代入」はイコールの左側にある変数に
右側の計算結果を入れ込むような働きをします。

In [2]:
# 変数 a , b を用意
a , b = 2 , 3

print(a)

# a = a + b と同じ意味合い
a += b
print(a)
2
5

a に b を足した結果を 再度 aに代入する ということになります。
a = a + b と同じ意味合いになります。
結果は 最初に a に2 b に 3が入っているので 2 + 3 が
aの中に入ります。

この代入演算子を使った方法はプログラムでよく用いられます。
特に += 1 でその変数の値を1ずつ足していく方法は
かなりの頻度で用いられます。

その他の「代入演算子」について

In [3]:
a = b         # a に b を代入する
a += b        # a = a + b に同じ
a -= b        # a = a - b に同じ
a *= b        # a = a * b に同じ
a /= b        # a = a / b に同じ
a %= b        # a = a % b に同じ
a **= b       # a = a ** b に同じ
a //= b       # a = a // b に同じ

左側の変数に、右側の変数を足したり引いたりした
結果を代入するというようなことが行えます。

In [4]:
# 変数 a , b を用意
a , b = 2 , 3

print(a)

# 何度か足してみる
a += 2
a += 5
print(a)
2
9

代入するたびに変数の値は変化します。

この1行で変数の中身が大きく変化していきますので
どこでどう値を変更しているのかといったことが
すぐに把握できるように、演算子の使い方は
押さえておきましょう。

                 15.算術演算子

プログラミング言語の中では
各種の演算を表わす記号・シンボルが存在します。

それを「演算子」と言っています。

大きく四つに分けると

1.算術演算子(代数)

2.代入演算子

3.関係演算子(比較)

4.論理演算子

になります。
今回はその中で 「算術演算子」 についてとり扱っていきます。

算術演算子(または代数演算子)

算術演算子は四則計算をするのに使われる「演算子」です。

加算(足し算)) + 
減算(引き算) - 
乗算(掛け算) * 
除算(割り算) / 
剰余(余り) % 
べき乗 ** 

足すプラス と 引くマイナス は そのままですが
掛け算と割り算では使える記号が変わります。

掛け算は アスタリスク
割り算は スラッシュ
その他、珍しいものでは「剰余」があります。

In [1]:
# 足し算(加算)
1+2
Out[1]:
3
In [2]:
# 引き算(減算)
1-3
Out[2]:
-2
In [3]:
# かけ算(乗算)
2*3
Out[3]:
6
In [4]:
# 割り算(除算)
10/3
Out[4]:
3.3333333333333335

Python3ではスラッシュ1つの場合は結果は小数点まで出ます。

整数値だけにしたい場合はスラッシュを二つ重ねます。
これで切り捨て除算になります。

In [5]:
# 割り算(余りなし、切り捨て除算)
10//3
Out[5]:
3
In [6]:
# べき乗
2**3
Out[6]:
8

べき乗の記号を用いてルート計算もできます。

In [7]:
# ルート
print(2**0.5)
print(9**0.5)
1.4142135623730951
3.0

特殊な演算方法として
剰余といいますが 割った際の余りを求める方法です。
余りを求める際には % の記号を使います。

In [8]:
# 剰余(割った際の余り)
print(5%3)
print(5%2)
print(5%5)
2
1
0

この余りという計算は、プログラム内では様々な条件分岐や判定に応用できます。

In [9]:
# 掛け算や引き算の優先順位は算数と一緒
2 * 3 + 4
Out[9]:
10

足す、引くを優先したい場合は () カッコを用いる

In [10]:
a,b,c = 2,3,4
d = a * b + 4
e = a * (b + 4)

print(d)
print(e)
10
14

四則計算はプログラミングの基本になるので
しっかりと書き方を覚えてください。

                 14.文字列のフォーマット

前の講義では文字列の関数について取り扱いました。
その中でも文字列のフォーマットに関する部分は覚えることが多いので
詳しくやっていきたいと思います。

フォーマットとは文字列の出力を制御すること

文字列のフォーマットを行う方法としては3つ方法があります。

1つ目 文字列に特定のフォーマット文字をさしこんでフォーマットする。

2つ目 format関数を使う。

3つ目 文字列型のformat関数を使う。

2,3つ目はformat用の関数を使い、少しだけ書き方が違うだけでほぼほぼ一緒です。

format文字でフォーマットする方法

'文字列 %差し込みするデータがに対応する記号' % (変数)

%s : 文字列型

%d : 整数型

%f : 小数点型

%x : 16進法表記

%o : 8進法表記

%%%d : %を付けたい場合

In [1]:
errmsg = "Can't open file"
errcode = 19042
# 文字列に変数の結果を差し込む % s , %d
msg = "ERROR: %s (%d)" % (errmsg, errcode)
print(msg) 
ERROR: Can't open file (19042)

上記の例だと通常のprint関数では
文字列型のデータと数値のデータを一緒には取り扱えないが
フォーマット文字を使った差し込みであれば
%s の部分に文字列型
%dの部分に整数型のデータを差し込むことができる。

In [2]:
# 文字列型
print ("%s" % "ABC")
# 整数型
print ("%d" % 123)
# 小数点型
print ("%f" % 1.23)
# 16進法
print ("%x" % 255)
# 8進法
print ("%o" % 255)
# %を表示したい場合
print ("%%%d" % 80)
ABC
123
1.230000
ff
377
%80

フォーマットで便利な点としては、% に続く数値で
文字幅や桁数を指定することができる。

In [3]:
#=> |  ABC| : 右寄せ5文字分
print ("|%5s|"   % 'ABC')      

#=> |ABC  | : 左寄せ5文字分
print ("|%-5s|"  % 'ABC')      

#=> |  123| : 右寄せ5桁
print ("|%5d|"   % 123)     

#=> |123  | : 左寄せ5桁
print ("|%-5d|"  % 123)        

#=> | +123| : ±符号付き
print ("|%+5d|"  % 123)        

#=> | 1.23| : 全体桁数.少数点以下の桁数
print ("|%5.2f|" % 1.23)       

#=> |00123| : 0埋め
print ("|%05d|"  % 123) 
|  ABC|
|ABC  |
|  123|
|123  |
| +123|
| 1.23|
|00123|

format関数を使う方法

format(差し込むデータ , 差し込む先の文字列)

差し込む先の文字列.format(差し込むデータ)

※個人的には 文字列.format()の方が使いやすい

差し込む先の文字列には {} 波カッコ を付けて
その中に文字を差し込む。

In [4]:
aaa = 'このあとに文字を差し込む {}  差し込んだ'.format('さしこ')
print(aaa)
このあとに文字を差し込む さしこ  差し込んだ

複数個の文字の差し込みにも対応

{} 波カッコ内のインデックス番号が、format関数に入れる順番に対応する。

In [5]:
# 1番目は0、2番目は1に、3番目のデータが2のところに入る。
print('{0}-{1}-{2}'.format('100', '二百', 300))
100-二百-300

波カッコ内に任意の名前を指定し、キーワード引数として入力することも可能

In [6]:
# それぞれの名称に対応する文字が入る
print('{year}{month}{day}日'.format(year=2018, month=1, day=11))
2018年1月11日

左寄せ、中央寄せ、右寄せ

< ^ >で左寄せ、中央寄せ、右寄せができる。全体の文字数を数値で指定
埋める文字を指定することもできる。省略するとスペース。

一文字であれば全角でもOK。

{:寄せ記号 桁数}.format(数値など)

In [7]:
print('left  : {:<10}'.format(100))   # 左寄せ
print('center: {:^10}'.format(100))   # センター寄せ
print('right : {:>10}'.format(100))   # 右寄せ

print('left  : {:*<10}'.format(100))  # 左寄せ
print('center: {:a^10}'.format(100))  # センター寄せ
print('right : {:鬼>10}'.format(100)) # 右寄せ
left  : 100       
center:    100    
right :        100
left  : 100*******
center: aaa100aaaa
right : 鬼鬼鬼鬼鬼鬼鬼100

0埋め

ゼロ埋めして桁数を合わせたい場合は埋める文字を0に指定して右寄せする。

{:0桁数}.format(数値)

In [8]:
# 5けたで0埋め
print('zero padding: {:05}'.format(123))
zero padding: 00123

桁区切り(カンマ、アンダースコア)
3ケタ毎にカンマ,またはアンダースコアの区切りを入れる。

{:,}.format(数値)

なお、アンダースコアはPython3.6で追加されたオプションなので
バージョンが古い場合は使えません。

In [9]:
# カンマで3ケタ区切り
print('{:,}'.format(100000000))

# _ で3ケタ区切り
#print('{:_}'.format(100000000))
100,000,000

小数点以下の桁数指定

全体の桁数を指定するには . のあとに桁数を書く。
小数点以下の場合は固定小数点数を表す f を付ける

{:.桁数}.format(数値)
{:.桁数f}.format(数値)

In [10]:
#2桁分まで表示
print('{:.2}'.format(1.234321))

#5桁分まで表示
print('{:.5}'.format(21.23432))

# 小数点5桁分
print('{:.5f}'.format(221.234543))
1.2
21.234
221.23454

                 13.文字列

pythonのデータ型の中でも文字列型は一番よく使うデータ型です。

なので、文字列型の取り扱い方を詳しく見ていきましょう。

文字列型について

文字列型にする場合は
シングルクォートやダブルクォートで囲みます。
変数に格納する際も同様です。

In [1]:
st = 'abcde'
print(st)
print(type(st))
abcde
<class 'str'>

シングルクォートやダブルクォートの使い分け

"..." の中では ' を、'...' の中では " を使うことができます。
"..." の中で " を、'...' の中で ' を使用するには、
\ バックスラッシュを用いて引用符をエスケープ(無効化)します。

In [2]:
# \ バックスラッシュを用いるとその後に続く引用符が無効になり、表示させることができる。
st = "We can use \" in the string."
print(st)

st = 'We can use \' in the string.'
print(st)
We can use " in the string.
We can use ' in the string.

特殊な文字列を打ち込む場合には、このエスケープ文字を使用する。

macは \ バックスラッシュ 
windowsは ¥ マーク

\n とすると改行コード、\tと打ち込むとタブを表現できる。

In [3]:
# 改行コード
print('aaaa \n bbbb')

# タブ
print('cccc \t dddd')
aaaa 
 bbbb
cccc 	 dddd

改行はエンターキーだが、打ち込むことはできないので
改行を含ませたい場合はエスケープ文字を使って表現できる。

このようにエスケープ文字を使って表現する特定の文字のことを
エスケープシーケンスと言います。

他にもいくつかエスケープシーケンスがありますが、
余り使わないかもしれません。

三重クォート """...""" や '''...''' は、
複数行にまたがった文字列を記述することができます。

三重クォートはしばしば、複数行のコメントとして利用されることがあります。

In [4]:
mail_text = '''
林様

お世話になっております。木森です

本日はウェルカムトゥーザジャングルをお届けいたします。
'''
print(mail_text)
林様

お世話になっております。木森です

本日はウェルカムトゥーザジャングルをお届けいたします。

メールの差し込み文章を作るときなどによく使われる手法です。
文章をあらかじめ変数に用意しておいて
その一部を取り替えると、いろいろな人向けの本文が作成できます。

文字列関数について

Pythonでは文字列を操作するいろいろな関数が備わっています。

その中からよく使うものをご紹介します。

replace:文字列を置換する

置換対象文字列.replace('置換前文字列','置換後文字列')

In [5]:
aaa = 'abcdefg'
print(aaa)
# replaceでdef を zzzz に変換
print(aaa.replace('def','zzzz'))
abcdefg
abczzzzg

in , startswith , endswith:対象の文字列に対して検索文字列を含むかどうかの判定をする

検索文字列 in 対象の文字列 :文字列を含むかどうかの判定する

対象の文字列.startswith(検索文字列): 始まりの文字列かどうかを判定する

対象の文字列.endswith(検索文字列) : 終端の文字列かどうかを判定する

In [6]:
apple = 'apple'
# apple に pp が含まれるかどうかを判定する
print('pp' in apple)

# apple がapp で始まるかどうかを判定する
print(apple.startswith('app'))

# apple が le で終わるかどうかを判定する
print(apple.endswith('le'))
True
True
True

split , rsplit , splitlines : 文字列をリストに変換

文字列.split(区切り文字) : 指定したセパレーターをもとに文字列を区切り, リストを返す

文字列.rsplit(区切り文字 , 区切り個数) : 区切りはじめる方向がsplit()と逆から引数指定分までを返す

文字列.splitlines() : 改行ごとに文字列を区切り, リストを返す

リスト型については詳細は次項で説明する。

In [7]:
# , 区切りでリスト型にする
print('aaaa,bbb,ccc'.split(','))

# 区切りはじめる方向がsplit()と逆から引数指定分までを返す
print('aaaa,bbb,ccc'.rsplit(',',1)) 

# 改行ごとに文字列を区切り, リストを返す
print('aaaa\nbb\ncc'.splitlines())
['aaaa', 'bbb', 'ccc']
['aaaa,bbb', 'ccc']
['aaaa', 'bb', 'cc']

join() : かっこの中のリスト型の文字列を連結する

'区切り文字'.join([文字,文字])

In [8]:
aaa = ','.join(['a','b','c'])
print(aaa)
a,b,c

count() : 文字の個数をカウントする

検索対象文字列.count(カウントしたい文字列)

見つからない場合は0を返します。

In [9]:
aaa = '平平平平'.count('平')
print(aaa)

aaa = '平平平平'.count('米')
print(aaa)
4
0

ここから下は使う頻度は少ないものですが文字列関数として備わっているものです。

find , rfind , index , rindex : 文字列の位置の判定

対象の文字列.find(検索文字列) :検索文字列を探し, あった場合は, 最小のインデックスを返す. なければ-1を返す

対象の文字列.rfind(検索文字列)) :検索文字列を探し, あった場合は, 最大のインデックスを返す. なければ-1を返す

対象の文字列.index(検索文字列) :検索文字列を探し, あった場合は, 最小のインデックスを返す. なければエラーを返す

対象の文字列.rindex(検索文字列) :検索文字列を探し, あった場合は, 最大のインデックスを返す. なければエラーを返す

In [10]:
# appleから p を探し, あった場合は, 最小のインデックスを返す. なければ-1を返す
print('apple'.find('p'))  

# appleから p を探し, あった場合は, 最大のインデックスを返す. なければ-1を返す
print('apple'.rfind('p')) 

# pen pine apple pen から e を探し, あった場合は, 最小のインデックスを返す. なければエラーを返す
print('pen pine apple pen'.index('e'))  

# pen pine apple pen からe を探し, あった場合は, 最大のインデックスを返す. なければエラーを返す
print('pen pine apple pen'.rindex('e')) 
1
2
1
16

isalnum , isalpha , isdigit , islower , isspace , istitle : 文字列の構成要素の判定

文字列.isalnum() : 文字がすべて英数文字かどうかの判定

文字列.isalpha() : 文字がすべて英字かどうかの判定

文字列.isdigit() : 文字がすべて数字かどうかの判定

文字列.islower() : 大小文字の区別がある文字がすべて小文字かどうかの判定

文字列.isspace() : 文字がすべて空白かどうかの判定

文字列.istitle() : 文字列がタイトルケース(先頭が大文字)かどうかの判定

In [11]:
# 文字列が英数字だけかどうかを判定する
print('az189898ssss'.encode('utf-8').isalnum()) 

# 文字列が全て英字だけかを判定する
print('aaaaAAAZZZzz'.encode('utf-8').isalpha()) 

# 文字列が数字だけかを判定する
print('123112399876'.encode('utf-8').isdigit()) 

# 小文字だけかどうかを判定する
print('abcdefghijkl'.encode('utf-8').islower()) 

# 文字が空白かどうかを判定する
print('            '.encode('utf-8').isspace()) 

# 文字列がタイトルケース(先頭が大文字)かどうかの判定
print('Apple Zedd  '.encode('utf-8').istitle()) 
True
True
True
True
True
True

capitalize , swapcase , title , lower , upper : 大文字, 小文字の変換

文字列.capitalize() : 最初の文字のみを大文字にする

文字列.swapcase() : 大文字を小文字に, 小文字を大文字に変換する

文字列.title() : 文字列をタイトルケース(先頭が大文字)にする

文字列.lower() : 文字をすべて小文字に変換する

文字列.upper() : 文字をすべて大文字に変換する

In [12]:
# 最初の文字のみを大文字にする
print('az189898ssss'.capitalize()) 

# 大文字を小文字に, 小文字を大文字に変換する
print('az189898SSSS'.swapcase())   

# 文字列をタイトルケース(先頭が大文字)にする
print('az189898ssss'.title())      

# 文字をすべて小文字に変換する
print('Za189898SsSs'.lower())      

# 文字をすべて大文字に変換する
print('az189898ssss'.upper()) 
Az189898ssss
AZ189898ssss
Az189898Ssss
za189898ssss
AZ189898SSSS

                 12.データ型

プログラム言語で取り扱うデータにはデータの型があり
書き方などが決まっている。

Pythonのデータ型

Pythonでデータ型を調べる際には type関数を用いる

整数型

int型とも言う(integer の略)

In [1]:
num = 1234
print(type(num))
<class 'int'>

プログラムでは通常の数値を書くと10進法で解釈されるが
その他に2,8,16進法を用いることができる。

2進法は 0b  をはじめにつけます。
8 進法は 0o をはじめにつけます。
16進法は 0x をはじめにつけます。

In [2]:
# 2進法
num = 0b11000100
print(num)

# 8 進法
num = 0o777
print(num)

# 16進法
num = 0xffff
print(num)
196
511
65535

10進法は0から9まで数えて10までいくと1つ桁が繰り上がります。
2進法は0 , 1 で2つ数えて繰り上がり、
8進法は0から7まで行ったら繰り上がり
16進法は0から9までいったら次は英語のabcdefまでいくと
繰り上がるというものです。

小数型

浮動小数点型、float型ともいいます。

In [3]:
num = 1.234
print(type(num))
<class 'float'>

指数表記も使えます。指数表記は英文字のeをつけます。
e3は10の3乗を表します。
-を付けると逆に-乗になります。

In [4]:
# 1.2の10の3乗
num = 1.2e3
print(type(num))
print(num)

# 1.2の10の -3乗
num = 1.2e-3
print(num)
<class 'float'>
1200.0
0.0012

同じ数値でも、整数型と小数型では違う形なので注意!!

小数型と整数型の計算結果は小数型

In [5]:
# 整数割る整数
print(10/4)
# 整数割る整数(余りなし)
print(10//4)
# 整数割る小数
print(10//4.0)
# 小数割る小数
print(12.3/4.0)
2.5
2
2.0
3.075

論理型

booleanを略してbool型とも言う
True か False どちらかの値が入る型です。

In [6]:
answer = True
print(answer)
print(type(answer))
True
<class 'bool'>

計算の判定結果もbool型

==で==の左側と右側が等しいかどうかを判定

In [7]:
1==2
Out[7]:
False

bool型は等しければTrue , 違えばFalse の値となる。

文字列型

string型ともいう
文字列(str)は、ダブルクォート " 、またはシングルクォート ' で囲む。

In [8]:
# 文字列型
print(type('12345'))

# こちらは数値
print(type(12345))
<class 'str'>
<class 'int'>

文字と数値の変換

文字列を整数型に直す場合は
int('数字')

整数型や小数型を文字列に直す場合は
str(数値)

In [9]:
# 文字列を整数型に
a = '12345'
# 文字を数値に変換したので計算できるようになる
print(int(a) + 12345)
24690
In [10]:
# 小数点を文字列に変換
b = 2.5
# 数値を文字列に変換したので文字列として加えられる
print('江頭' + str(b) + '分')
江頭2.5分

byte型

バイト列として扱いたい文字列の "..." や '...' 
の前に b または B を記述して、バイト列(bytes)であることを示す。

In [11]:
byte_st = b'0123456789abcdef'
print(byte_st)
print(type(byte_st))
b'0123456789abcdef'
<class 'bytes'>

b がついていたら byte型で文字列型とは別物

このページのトップヘ