Python

【Python 3】数値と文字列

環境

macOS Big Sur
Python3.8

コメント

プログラム上で特定の文字列をプログラムではないとみなすことで、プログラムに説明(コメント)を残すことができます。

Pythonでは、「#」記号以下の一行がコメントとして認識されます。

複数行のコメントを書く場合、ダブルクォーテーション3でコメントを囲います。(シングルクォーテーション3つでも可能ですが、ダブルクォーテーションの使用が推奨されています。)

数値

「【Python 2】型と変数」でも少し数値を扱いましたが、改めて数値の扱い方をまとめます。

算術演算子

数値は「算術演算子」「数値演算子」(Numeric Operator)ともいいます。)を使用することで、通常の四則演算をすることができます。演算は通常の四則演算と同様の優先順位で計算されます。

算術演算子 説明
+ 足し算
- 引き算
* 掛け算
/ 割り算
% 割り算の余り
// 整数の割り算(切り捨て)
** 累乗

 

>>> 1 + 2
3

>>> (40 - 20) / 5  # 整数同士の計算であっても、除算は常に浮動小数点数を返します。
4.0

 

次のような場合、「-」より「**」を優先して計算してしまいます。-5の2乗は、(-5)**2とします。

>>> -5 ** 2
-25

>>> (-5) ** 2
25

 

整数と浮動小数点数が混在している場合、整数は浮動小数点数に変換されます。

>>> 4 + 5.4
9.4

 

変数の演算結果を同じ変数に代入する場合、算術演算子と代入演算子をつなげた演算子を使用することができます。この演算子を「複合演算子」(Compound Assignment Operator)といいます。(「累算代入演算子」(Augmented Assignment Operator)ともいいます。)

>>> a = 5
>>> a = a + 5
>>> a
10

>>> a = 5
>>> a += 5  # 「a = a + 5」と同じ操作です。
>>> a
10

>>> a = 5
>>> a += 1  # 変数の値を1増加させることを「インクリメント」といいます。
>>> a
6

>>> a = 5
>>> a -= 1  # 変数の値を1減少させることを「デクリメント」といいます。
>>> a
4

 

文字列

文字列を定義するには、引用符(シングルクォーテーション(')またはダブルクォーテーション("))で文字列を囲います。「'」と「"」のどちらも使用できますが、始めと終わりは揃えて囲います。(シングルクォーテーションを使うのが一般的です。)

結果はシングルクォーテーションで表示されますが、文字列自体にシングルクォーテーションを含んでいる場合は、ダブルクォーテーションで表示されます。

>>> a = 'Hello world!'
>>> a
'Hello world!'

# 「print()関数」は文字列や変数等の値を出力します。
# 文字列の場合、引用符は削除されて表示されます。
>>> print(a)
Hello world!

>>> "Don't worry"
"Don't worry"

 

文字列は一行で定義する必要がありますが、引用符を3つ重ねることで複数行に渡る文字列を扱うことができます。(複数行の文字列の場合にはダブルクォーテーションを使用するのが一般的です。)

>>> a = """Hello 
... world!"""
>>> print(a)
Hello 
world!

 

文字列は+演算子で連結することができます。(+演算子を省略し、列挙するだけでも連結できます。)

>>> 'Hello ' + 'world!'
'Hello world!'
>>> 'Hello ' 'world!'
'Hello world!'

 

文字列を掛け算することで同一の文字列を複数個連結できます。

>>> a = 'Hello '
>>> a *= 3
>>> print(a)
Hello Hello Hello 

 

型変換

異なる型のデータ同士を処理する際は、「型変換(キャスト)」によって型を揃える必要があります。数値を文字列に変換する場合は「str()関数」を、文字列を数値に変更する場合は「int()関数」や「float()関数」を使います。

数値と文字列の型変換を説明しましたが、他の型でも基本的にデータ同士を処理する場合は、関数等で型を揃える必要があります。

>>> 7 + '月'  # 数値と文字列を連結するとエラーになります。
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> str(7) + '月'
'7月'

>>> '2.5' + 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> float('2.5') + 4
6.5

# print()関数に数値と文字列をカンマで区切って渡すと、渡した順番通りに連結します。
# 間にスペースが挿入されます。
>>> print(1, '日')
1 日

 

インデックス

文字列の各文字には、「0」から始まる「インデックス」が左から順番に割り振られています。インデックスは空文字(スペース)や記号にも割り振られます。

インデックスを指定することで、文字を取り出すことができます。文字列に角括弧([])をつけ、その括弧内にインデックスを指定します。

また、インデックスにはマイナスを指定することもでき、この場合、最後から順番に「-1」、「-2」と割り振られています。

文字列のインデックス指定

文字列[インデックス]

文字 M y h o m e !
インデックス 0 1 2 3 4 5 6 7
-8 -7 -6 -5 -4 -3 -2 -1

 

>>> a = 'My home!'
>>> a[0]
'M'
>>> a[3]
'h'
>>> a[-1]
'!'
>>> a[-5]
'h'
>>> a[8]  # 範囲外のインデックスを指定するとエラーになります。
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

 

文字列でも「スライス」を使用することができます。スライスについてはリストの項目で説明します。

エスケープ文字

文字列をシングルクォーテーションで囲い、さらに文字列中でもシングルクォーテーションを使用する等、囲いと文字列中の引用符を揃えてしまうとエラーになります。

このような場合、文字列中の引用符の前にバックスラッシュ(\)を入れることで、引用符を文字列として扱うことができ、エラーを回避することができます。(囲いと文字列中で引用符の種類を使い分ければ実行可能です。この場合、むしろこちらの方法が推奨されています。)

文字列に追加したい文字をバックスラッシュに続けて書くことを「エスケープ文字」といいます。エスケープ文字を使用することで、普通の方法では文字列に追加できない文字を扱うことができます。

主なエスケープ文字 内容
\' '
\" "
\t タブ
\n 改行
\\ \

 

>>> a = 'Hello\nworld!'
>>> a  # インタラクティブシェル上では、「\n」はそのまま表示されますが、改行を意味しています。
'Hello\nworld!'
>>> print(a)  # 「print()関数」では改行して表示されます。
Hello
world!

 

raw文字列

引用符の前にrを付けることで「raw文字列」となります。raw文字列は、文字列をそのまま文字列として扱います。エスケープ文字も無視され、バックスラッシュはバックスラッシュとして扱われます。

>>> print(r'C:\usr\name\python')  # 「\n」部分も改行とはみなされません。
C:\usr\name\python

 

ただし、シングルクォーテーションで文字列を囲い、文字列中でもシングルクォーテーションを使用する場合や、逆にダブルクォーテーションで文字列を囲い、文字列中でもダブルクォーテーションを使用する場合は、raw文字列であっても、文字列中の引用符は「\'」あるいは「\"」を使用する必要があります。文字列の囲いと文字列中の引用符の種類を使い分ければエスケープ文字は不要です。

>>> print(r'今日は\'月曜日\'です。')  # エスケープ文字が必要です。
今日は\'月曜日\'です。

>>> print(r"今日は'月曜日'です。")  # エスケープ文字は不要です。
今日は'月曜日'です。

 

また、文字列の最後にバックスラッシュを使用したい場合は、「\'」あるいは「\"」がエスケープ文字として処理されてしまうため。最後のバックスラッシュのみ別の文字列として作成し連結する必要があります。

>>> print(r'C:\usr\name\python' + '\\')
C:\usr\name\python\