sec01 - 文字列の演算子・型変換

文字列の演算子・型変換

文字列の連結

+演算子を使うことで、文字列を連結させることができます。次のコードを実行してみましょう。

s = 'Hello, ' + 'I am Nico.'
print(s)

上記コードを実行すると、下図のようにHello, I am Nico.の各文字列が連結されて出力されます。

文字の連結時の注意点としては、連結する文字の間にスペースなどの区切り文字が必要な場合は、予め用意しておかなければなりません。文字列が連結されることが分かっている場合は、先にカンマやスペースを仕込んでおくという方法があり、上記コードでは'Hello, 'にカンマとスペースを記述していました。

他には、次のようなコードの書き方があります。

greeting = 'Hello'
my_name = 'I am Nico.'
s = greeting + ', ' + my_name
print(s)

最初の2行で'Hello''I am Nico.'が変数に代入されていますが、それぞれの文字列の前後にスペースやカンマはありません。このまま連結すると、"HelloI am Nico."のようになってしまいます。このような結果にならないように、各文字列の間にカンマとスペースを挿入するようなコードを書いておく必要があります。

次に、数字の入った文字の連結の結果を見ていきます。次のコードを実行してみましょう。

s = '123' + '456'
print(s)

'123'という文字と'456'という文字を連結させるので、下図のように数字が並んだ文字列が出力されます。

数のように『足し算』が行われるわけではありません。String型のデータは、各文字(文字としての数字)が左から順番に並んでいるのを管理しているに過ぎず、数(int/float)として管理しているわけではありません。ですので、文字列の中身がアルファベットであろうと数字であろうと、string型で使用する+演算子は、『文字を連結させる』という挙動になります。

stringとint/float

次に、stringとint/floatを+演算子で繋いだコードを、試しに実行してみましょう。

s = '123' + 456
print(s)

これを実行すると下図のようにエラーになります。

エラー内容は、『str(文字列)のみを文字列に連結できます(整数(int)は不可)』と表示されています。つまり、文字としての'123'と整数の456+演算子で処理を行うことはできないということです。(当然、stringとfloatの組み合わせもできません。)

Stringへの型変換

先の例のように型が合わない場合は、どちらかを型変換する必要があります。もし、文字列の連結をさせたい場合は、str()関数を使い、intやfloatの値を文字列へ変換します。

次のコードは、intの数値をstring型に変換した後、連結させる例です。

age = 10
s = 'I am ' + str(age) + ' years old.'
print(s)

上記コードは、数字を他の文字列と連結させ、'I am 10 years old.'という文字列を生成させるコードです。

1行目は整数を'age'変数へ代入しています。2行目で文字の連結を行っていますが、整数をそのまま連結させることはできないので、str()関数を使って文字列の'10'へと変換しています。str()関数はint/float型の数を適切に文字列へ変換します。

int/floatへの型変換

続いて、文字列をint/floatに変換する場合ですが、整数への変換はint()関数を使い、浮動小数点数への変換はfloat()関数を使います。

次の例は、ユーザーの入力を2つ受け取って、数の足し算を行うコード例です。

str_num1 = input('Enter first number: ')
str_num2 = input('Enter second number: ')
result = float(str_num1) + float(str_num2)
print('The result is:', result)

このコードをVisualStudioCodeで実行すると、TERMINALに下図のようなユーザーの入力を受け付ける行が現れます。(一番最後のところに入力箇所を示す矩形が表示されます。) ここにカーソルを合わせて(マウスでクリックするなどして)から数字を入力し、Enterキーで確定してください。(これを、2回入力します。)

2回数字を入力してEnterを押すと、入力した2つの数字を足し合わせた結果が出力されます。

コードの解説ですが、1行目の最初のinput()関数はユーザーからの入力を受け付ける関数です。丸カッコの中に、ユーザーへのメッセージを設定しています。ユーザーから入力された情報は、入力が数字であっても文字列(String型)として'str_num1'変数へ代入されます。2行目のinput()も同じように、String型の値が代入されます。

3行目で、ユーザーから受け取った入力をfloatへ変換しています。浮動小数点数への変換はfloat()を使います。floatに変換すれば、足し算を行うことができるようになります。(floatへ変換しないと、'123.4555.05'のような文字列の連結が行われてしまいます。) floatの足し算の結果を'result'変数へ代入し、最後に結果をprint出力しています。

このように、数を四則演算させたり、数値としてデータ処理させたいという場合は、intもしくはfloatへ変換してから処理します。

文字列としての数字をint/floatへ変換するときの注意点

今回のコードは、ユーザーが正しく数値を入力してくれれば問題なく動くのですが、数値として変換できない入力があった場合はエラーになります。また、浮動小数点数を表す文字列('12.3'など)でint()関数を使うとエラーになるなどの制約があります。(整数を表す文字列をfloat()関数で変換することはできます。) 詳しい仕様は公式ドキュメントをご確認いただければと思うのですが、コードを実行してエラーが出たときは、そのエラーメッセージを確認して問題点を推測して解決してみてください。

ちなみに、実際の現場(仕事)でユーザーの入力を受け付けるプログラムを書く時は、入力エラーでプログラムが止まらないように、例外処理のコードを書くなどの対策が必要になります。(誤った入力があった時の処理方法を、正しい入力があった場合とは別に記述することでエラーで止まってしまうことを回避します。) 例外処理については、専用のレクチャーで詳しく解説します。

文字列を繰り返し生成する

文字列を繰り返したい場合は、*演算子を使用します。

次のようにコードを記述し、実行してみましょう。

s = 'Hello' * 5
print(s)

s = '=' * 30
print(s)

出力結果は、下図のようになります。

'Hello'が5回繰り返された'HelloHelloHelloHelloHello'が出力され、次の行に'='が30回繰り返された'=============================='が出力されます。

使いどころは多くないかもしれませんが、2行目のように長いラインをprint出力したい時などに使えるテクニックになります。