Pythonでは「文字列」を使って文字や文章を扱えます。
文字列は「python」「プログラミング」といった単語のような短いものから、詩や小説といった文章のような長いものもあります。
Pythonでの文字列の特徴として、文字を順番に並べて文字列として扱っていると考えることができます。文字列には先頭の文字から順番に「0」から始まる番号(インデックス)が振られていて、これを指定することで文字列を操作したりできます。
“Python” という文字列では”P”のインデックスが「0」で、”y”が「1」、”t”が「2」、”h”が「3」、”o”が「4」、最後の”n”が「5」というインデックスが振られていることになります。
このように文字列は順序を持つ型なのでシーケンス型のひとつになっています。
それでは、文字列を表示するところからやっていきましょう。
文字列の定義
文字列データを扱う時には、その文字列をダブルクォーテーション「”文字列”」で囲みます。文字列の中にダブルクォーテーションがあることもあるのでシングルクォーテーション「’文字列’」で囲むこともできます。
文字列の表示
では、実際のコードでやって行きましょう。別のところでもやったことはありますね。
s = "Hello"
print(s)
print("Hello")
print('Hello')
type("Hello")
greeting = "Hello Python!"
print(greeting)
len(greeting)
順番に対話型シェルで順番に実行していくと結果はこのようになります。
一つ目は文字列”Hello”を変数sに代入してprintで出力しています。
次はダブルクォーテーションとシングルクォーテーションでそれぞれ囲んだ文字列を直接printで表示しています。
次のtype()で確認すると’str’と表示され文字列型であるのがわかりますね。ちなみに’str’は’string’の略です。
その次はgreetingという変数に短いですが”Hello Python!” という文章を代入して出力しています。
最後のlen()は、要素数を取得する関数です。これを利用すると”Hello Python!”という文字列がスペースも含めて13文字であることがわかりますね。
文字列としての数値
数値をダブルクォーテーションで囲むと文字列として扱えます。
次のようにやってみましょう。
ダブルクォーテーションで囲んだ数字をtype()で確認すると’str’と表示されて数値ではなく文字列であることが確認できます。
文字列ですから、足し算をしても計算されるのではなく、文字の連結として表示されていますね。
連結ではなく、文字列を繰り返して出力したい時には掛け算の記号なども使えます。
3回表示するのに「* 3」を使っているのがわかりますね。
クォーテーションを内包する文字列
Pythonでは文字列をダブルクォーテーション「””」で囲みますが、ダブルクォーテーションが文字列に含まれる場合はどうなるかを見てみましょう。
こういった文例が考えられますね。
Are you studying “Python”?
これをダブルクォーテーションで囲んで表示をさせるとエラーになります。
ダブルクォーテーションで囲んだところを文字列としてPythonは認識します。この場合はどこからどこまでが囲まれているのかがわからなくなるのでエラーになるのです。
これを回避するためには、シングルクォーテーションを利用するか、文字列として扱いたいところの前にエスケープ文字であるバックスラッシュ(\)を使います。
次のようにコードを修正して出力してみましょう。
print('Are you studying "Python"?')
print("Are you studying \"Python\"?")
先ほどのシェルの続きに入力してみると、このようになります。
最初がシングルクォーテーションで囲んだもの。次がバックスラッシュを利用したものです。
このようにクォーテーションとバックスラッシュを上手く使えばコードのエラーを回避することができますね。”I’m fine.” というようなアポストロフィを使った文章も同じですね。”I\’m fine.”という入力になります。
文字列の改行と複数行表示
文章を途中で改行して出力するにはどうすればいいでしょうか?
これもエスケープ文字を使います。バックスラッシュと”n”を使って改行することができます。(\n)
たまには日本語の文章も例に使ってみますかね。
こんにちは。ただいまPython勉強中です!
この文章を、こう表示させたいわけです。
こんにちは。
ただいまPython勉強中です!
次のように、改行したいところに(\n)を入れて出力します。
print("こんにちは。\nただいまPython勉強中です!")
対話型シェルで実行すると、こうなります。
改行して表示されているのがわかりますね。
関連して、複数行にわたる長い文章の表示などはトリプルクォート(””” “””)で囲むことで可能です。トリプルクォートで囲んだ部分では、改行も自由にできます。
例として国歌の「君が代」を出力してみましょう。
君が代は
千代に八千代に
さざれ石の
いわおとなりて
苔のむすまで
トリプルクォートを使ってkimigayoという変数にこの文字列を入れてprintで出力するコードを書いてみるとこうなります。
kimigayo = """君が代は
千代に八千代に
さざれ石の
いわおとなりて
苔のむすまで"""
print(kimigayo)
途中で改行していますが、特に特別な記号などは入れていません。
これを対話型シェルで入力するとこのように出力されます。
改行して表示されているのがわかりますね。
もちろん、(\n)を使って次のように1行で入力しても構いません。
kimigayo = """君が代は\n千代に八千代に\nさざれ石の\nいわおとなりて\n苔のむすまで"""
print(kimigayo)
コードの改行でもう一つ。
コードの1行が長くなって読みにくくなってしまうことがあります。その時は、丸括弧の中で改行する文ごとにダブルクォーテーションで囲むか、改行する場所でバックスラッシュを入れることでコードを途中で改行して見やすくすることができます。
具体的には次のような書き方です。
どちらも出力すると1行で表示されているのがわかりますね。
まとめ
文字列は文字の先頭を0としてインデックスが割り当てられています。
文字列の入力には文字列をダブルクォーテーションで囲みますが、ダブルクォーテーションを文字列として表示したい場合は、シングルクォーテーションやエスケープ文字のバックスラッシュを活用します。
数字であっても、ダブルクォーテーションで囲めば、文字列として認識されます。
文字列の改行には(\n)を、複数行の表示をするにはトリプルクォートを利用します。
文字列を置き換えたり分割したりする処理もできますが、これは別の機会に扱います。ここまでとは別の方法も、やっていくうちに身につけていくことにもなると思います。慣れていくと自然と応用が効いてくるはずですよ。