文字列 (str型オブジェクト)
Python では 文字列型データ (strクラスのオブジェクト) はシングルクォーテーション (') あるいはダブルクォーテーション (") で囲むという約束事があります。
# PYTHON_STRING
# In[1]
my_str = "Pythonは楽しい"
print(type(my_str))
# <class 'str'>
一般的には、どちらの引用符を使用しても文字列を作成することができますが、コード内で引用符を含む文字列を作成する場合には、使っていない引用符で文字列を囲みます。たとえば、ダブルクォーテーションを含む文字列を作成する場合は、シングルクォーテーションで囲みます。
# In[2]
my_string = 'He said, "Hello, world!"'
print(my_string)
# He said, "Hello, world!"
逆にシングルクォーテーションを含む文字列を作成したい時は、ダブルクォーテーションで全体を囲みます。
# In[3]
my_string = "She said, 'Hello, world!'"
print(my_string)
# She said, 'Hello, world!'
IDLE、VSCode、Jupyter NoteBook、Google Colab など、ほとんどの開発環境では、シンタックスカラー機能がはたらいて、文字列や関数、演算子などはそれぞれ色分けされるので、どの部分が文字列なのかひと目でわかるようになっています。
特定文字列の参照
Python における 文字列 (str クラスのオブジェクト) は テキストシーケンス に分類されます。文字列を構成するひとつひとつの文字(要素)には 0 から始まるインデックスが割り当てられます。たとえば "Python" という文字列を定義した場合、P に 0, y に 1, t に 2, ...... が割り当てられ、インデックス番号を指定することで、特定の文字が取り出せるようになっています。
# PYTHON_STRING_INDICES
# In[1]
# 文字列の定義
my_str = "Python"
# インデックス3の値を取り出します
x = my_str[3]
print(x)
# 'h'
文字列のスライス
次の構文で文字列を任意の位置でスライスできます。
str[開始インデックス : 終了インデックス + 1]
文字列は immutable なオブジェクト なので、スライスによってもとのオブジェクトは変更されずに、新しい str 型オブジェクトが返されます。以下のコードで動作を確認してください。
# PYTHON_STRING_SLICING
# In[1]
my_str = "ABCDEFG"
# インデックス0 ~3を切り出す
x = my_str[0:4]
print(x)
# 'ABCD'
# In[2]
# インデックス3以降をすべて切り出す
x = my_str[3::]
print(x)
# 'DEFG'
# In[3]
# インデックス0から1文字ずつ飛ばしながら切り出す
x = my_str[::2]
print(x)
# 'ACEG'
文字列の連結
文字列同士を連結 するときは 算術演算子 の「+」を使います。
# PYTHON_STRING_JOIN
# In[1]
mystr1 = "今日は日曜日。"
mystr2 = "どこかに遊びに行きたいな。"
print(mystr1 + mystr2)
# 今日は日曜日。どこかに遊びに行きたいな。
乗算演算子「*」を文字列に作用させることもできます。
# In[2]
mystr = "Pythonは楽しいな♪ "
print(mystr*3)
# Pythonは楽しいな♪ Pythonは楽しいな♪ Pythonは楽しいな♪
このように文字列を 3 倍すると、3 回同じ言葉を繰り返します。
str.center()
str.center() は文字列を中央寄せします。
str.center(全体の幅 [, 埋める文字])
# PYTHON_STRING_CENTER
# In[1]
my_str = "サイバーセキュリティ"
# 文字列を中央寄せ
str_1 = my_str.center(15, "x")
str_2 = my_str.center(20, "□")
print(str_1)
print(str_2)
# xxxサイバーセキュリティxx
# □□□□□サイバーセキュリティ□□□□□
str.rjust()
str.rjust() は文字列を右寄せします。
str.rjust(全体の幅 [, 埋める文字])
# PYTHON_STRING_RIGHT
# In[1]
my_str = "数理計画法"
# 文字列を右寄せ
str_1 = my_str.rjust(12, "△")
print(str_1)
# △△△△△△△数理計画法
str.ljust()
str.ljust() は文字列を左寄せします。
str.ljust(全体の幅 [, 埋める文字])
# PYTHON_STRING_LEFT
# In[1]
my_str = "画像解析"
# 文字列を左寄せ
str_1 = my_str.ljust(12, "〇")
print(str_1)
# 画像解析〇〇〇〇〇〇〇〇
数値型を文字列型に変換
Python では異なる型同士の連結は認められていません。内部で上手いこと処理して勝手にやってくれるような言語もあるのですが、Python では設計したソフトの誤作動を未然に防ぐために厳密なルールが適用されています。しかし、科学の世界では数値に単位を添えるなど、数値と文字列を合わせて表示したいケースはよくあります。そのようなときには str() 関数を使って数値を文字列に変換 します。例として木星と地球の質量比を計算するプログラムを書いてみます。# が添えてある行はコメント行で、プログラムとは関係のない部分です。
# PYTHON_NUMERICAL_STRING
# In[1]
#木星の質量
mass_J = 1898e24
#地球の質量 (kg)
mass_E = 5.972e24
#木星と地球の質量比を計算 (kg)
mass_ratio_JE = int(mass_J / mass_E)
#質量比を添えて出力
print("木星の質量は地球の" + str(mass_ratio_JE) + "倍です")
# 木星の質量は地球の 317 倍です
上のコードでは、木星と地球の質量を数値で与えて比を計算させ、int() 関数で小数部分を切り捨てた値を mass_ratio_JE という名前の変数に入れて、それを文字と連結させて出力しています。最後の行でうっかり str() による変換を忘れて
print("木星の質量は地球の" + mass_ratio_JE + "倍です")
と書いてしまうとエラーが表示されます。
[補足] 5.972e24 は 5.972 × 1024 という浮動小数点数型数値を意味しています。
【お知らせ】
旧式コードナンバーを Jupyter Notebook 用に書き直しました。
AIに文字列をネタにコントの脚本を書かせてみました
[舞台セット:オフィスのデスク]
キャラクター1: (興奮気味に)おい、おい!聞いてくれよ、新しいプログラミング言語を見つけたんだ!それはPythonっていうんだ!
キャラクター2: Python?まさか、新しい蛇の種類を見つけたのか?
キャラクター1: いや、いや、それは違う!Pythonはコンピュータのプログラミング言語だよ。めちゃくちゃ使いやすいんだ。
キャラクター2: 本当に使いやすいのか?例えば、文字列を逆にする方法を教えてくれ。
キャラクター1: それは簡単だよ!文字列をスライスして逆順にするだけさ。
キャラクター2: ほんとうに?じゃあ、この文字列を逆さにしてみてよ。”Hello, Python!”
キャラクター1: もちろんだよ!(考え込んで)えーと、”Hello, Python!” か。うーん、ちょっと待ってね。
[キャラクター1が手早くコードをタイプする]
キャラクター1: できたよ!逆さになったよ!”!nohtyP ,olleH”
キャラクター2: すごい!本当に逆さになった!Python、便利なんだね!
キャラクター1: そうなんだよ!Pythonは他にもたくさんの便利な機能があるんだ。まだまだ驚くようなことができるんだから。
キャラクター2: それはすごい!じゃあ、次は何か面白いことをやってみよう!
[舞台が暗転し、カーテンが閉まる]