Python無学エンジニアの資格挑戦記 #4 変数と入出力
Python学習の第4回目。
前回はprint関数を使った四則演算とコメントについて学習した。
今回はデータに対して一時的に名前を付けておくための「変数」と、ターミナルでの入出力について学んでいく。
ここを取り入れると、プログラムに深みを持たせることができるようになるんだ。
それじゃ、いってみよう。
文字列と数値
前回にもたびたび出てきた「文字列」と「数値」。
Pythonでは、これらはそれぞれ異なるものとして扱われる。
足し算をしても、数値同士では通常の足し算、文字列同士では文字列の連結と判断されるんだ。
新たにstring.pyファイルを作成し、以下のプログラムを実行してみよう。
print(123 + 456)
print("123" + "456")
「579」と「123456」が表示された。
最初の出力結果は数値の足し算、次の出力結果は文字列が連結された結果だ。
このように同じ演算子でも、int型やfloat型の数値なのか文字列型なのかによって結果は大きく異なるんだ。
数値と文字列の演算
では数値と文字列を足し算したら?
string.pyに以下のプログラムを追加して実行しよう。
print(123 + "456")
「TypeError」というエラーが表示されてしまった。
型が合わないというエラー内容だ。
Pythonでは、数値のデータと数字文字列のデータは、全く違うデータとして厳密に区別される。
PHPやJavaScriptのような自動型変換はされないので、注意が必要だ。
数値用の演算子を数字文字列に使用することはできない。
それは、他の数値用演算子にも当てはまる。
先ほどの行をコメントにし、string.pyに以下のプログラムを追加して実行しよう。
# print(123 + "456")
print("456" - "123")
今度は文字列同士で計算したのに、またしても「TypeError」となる。
これは演算子「-」が、数値同士の計算にしか使うことができないためだ。
文字列から数値への型変換
では、数字文字列を計算するにはどうしたらいいのだろうか。
それには文字列を整数化する「int関数」を使用する。
先ほどの行をコメントにし、string.pyに以下のプログラムを追加して実行しよう。
# print(123 + "456")
# print("456" - "123")
print(123 + int("456"))
print(int("456") - int("123"))
数字文字列をint関数を使って型変換したため、エラーとならずに579と333が表示された。
また、文字列を浮動小数点数化するには「float関数」を使用する。
string.pyに以下のプログラムを追加して実行しよう。
print(123 + float("456.456"))
計算結果として579.456が表示された。
値として認識できる文字列であれば、int関数やfloat関数で数値型に変換できるんだ。
ここで注意しなければならないのは、先ほどの「456.456」のような浮動小数点数を表す文字列は、int関数では変換することができないということだ。
string.pyに以下のプログラムを追加して実行しよう。
print(123 + int("456.456"))
今度は「ValueError」というエラーとなってしまった。
ややこしいが、int関数を使って浮動小数点数から整数にすることはできる。
先ほどの行をコメントにし、string.pyに以下のプログラムを追加して実行しよう。
# print(123 + int("456.456"))
print(123 + int(456.456))
整数型に変換した計算結果である579が表示された。
つまりint関数は、浮動小数点数から整数への変換はできるが、浮動小数点数を表す文字列のような《整数として解釈できない文字列》の変換はできないんだ。
また、int関数もfloat関数も、数値として認識できない文字列を変換することはできない。
string.pyに以下のプログラムを追加して実行しよう。
print(float("Hello World"))
この場合も同様に「ValueError」となってしまった。
つまり、int関数やfloat関数に文字列を渡す場合は、必ず変換可能な文字列を渡す必要があることに注意しなければならない。
数値から文字列への型変換
逆に、数値を数字文字列に変換するにはどうしたらいいのだろうか。
この場合は「str関数」を使用する。
先ほどの行をコメントにし、string.pyに以下のプログラムを追加して実行しよう。
# print(float("Hello World"))
print(str(123) + "456")
str関数で数値を数字文字列へ型変換したため、エラーとならずに文字列連結が実行され、「123456」と表示された。
このように、数値と文字列が混在する場合は、適切な型に型変換をしてから演算を行う必要があるんだ。
変数と代入文
どのプログラム言語でも似たようなものがあるが、Pythonでも例にもれず、値に名前を付ける「変数」という仕組みがある。
そして、その名前を使って値を参照することができる。
名前を定義するには
$${名前 = 値}$$
の形式で記述する。
この名前を変数と呼び、名前を定義することを「変数定義」というんだ。
そして、この行を「代入文」と呼び、代入文を実行することを「代入」というんだ。
値を代入した変数は、その値と同じように扱うことができる。
新たにvariable.pyファイルを作成し、以下のプログラムを実行してみよう。
variable = 10
print(variable + 2)
print(10 + 2)
「12」と続けて表示された。
変数と値のどちらを使っても、同じ結果となることが分かる。
変数を利用すると、プログラムを分かりやすく表現することができるんだ。
例えば、底面の直径が10cm、高さが7cmの円錐の体積を求めるプログラムを書き換えてみる。
variable.pyに以下のプログラムを追加して実行しよう。
print((((10 / 2) ** 2) * 3.14 * 7) / 3) # 体積算出
diameter = 10
pi = 3.14
height = 7
area = ((diameter / 2) ** 2) * pi
print((area * height) / 3) # 体積算出
どちらの結果も「183.1666…」と表示された。
1行目と2行目以降は同じ結果だけど、変数を使うことでそれぞれが何を指しているのかが明確となる。
つまり、変数にはプログラムが分かりやすくなる特徴も持っているんだ。
なお、変数には以下のルールが存在するよ。
アルファベットと数字、一部の記号が使用可能。
記号は「_」(アンダーバー)が使用可能。「+」や「-」などは使用不可。
変数名を数字から始めることはできない。例えば、「abc123」は使用可能だが、「123abc」は使用不可。
「if」「while」などのPythonによって予め決められた単語(予約語)は使用不可。
ひらがな、漢字なども変数名に使用できるが、可読性から基本的には半角アルファベットと数字、「_」にすべき。
Pythonの代表的な入力規則であるPEP8の中では、変数名の付け方についてこう記載されている。
関数や変数の名前
関数の名前は小文字のみにすべきです。また、読みやすくするために、必要に応じて単語をアンダースコアで区切るべきです。
変数の名前についても、関数と同じ規約に従います。
つまり、「pythonVariable」ではなく、「python_variable」にすべきということになる。
入出力
これまで、ターミナルへの出力はprint関数を使用してきた。
では入力はどうやるのだろう。
ターミナルからプログラムにデータを入力するには、「input関数」を使用するんだ。
新たにio.pyファイルを作成し、以下のプログラムを実行してみよう。
input_str = input("何か入力してください。")
print(input_str)
プログラムを実行すると、ターミナルに「何か入力してください。」と表示され、そこでターミナルが入力待ちの状態になっている。
仕方ないな、入力してやるか…(←自作自演)

ターミナルには、入力した文字「Hello World!!!」が表示された。
ターミナルから入力した文字をinput関数が受け取り、その値が変数「input_str」に代入され、print文で画面に表示されたのだ。
これを応用すると、先ほど作った円錐の体積を求めるプログラムを、より実用的なものにすることができる。
新たにcone_volume.pyファイルを作成し、以下のプログラムを実行してみよう。
print("円錐の体積を求めます。")
diameter = input("底面の円の直径:")
height = input("高さ:")
pi = 3.14
area = ((diameter / 2) ** 2) * pi
print((area * height) / 3) # 体積算出
体積が表示されると思いきや、「TypeError」となってしまった。
これは、input関数で取得できる値が文字列であるためだ。
そう、型変換が必要となる。
float関数を使って、文字列を浮動小数点数に変換するんだ。
cone_volume.pyを以下のように書き換えて実行しよう。
print("円錐の体積を求めます。")
diameter = float(input("底面の円の直径:"))
height = float(input("高さ:"))
pi = 3.14
area = ((diameter / 2) ** 2) * pi
print((area * height) / 3) # 体積算出
先ほどのプログラムに倣い、直径は「10」、高さは「7」で入力してみたところ、「183.1666…」と表示された。
このように入出力を使うと、より汎用性の高い実用的なプログラムを作ることができるようになるんだ。
まとめ
今回は文字列と数値という型、変数、入出力について学んでいった。
まだまだ入口だけど、入力ができるようになったことによって、ようやくプログラムらしいことができるようになってきたかな。
Pythonは型の指定はしないけど、内部では厳密に型を扱っている。
数値同士の演算では型が自動的に調整されることもあるけど、文字列と数値のような異なる型同士では、基本的に自動変換されないところが特徴的だと感じた。
JavaやC言語はどんな型を使うかという型宣言を明示的にしたうえで、厳密に型を扱っている。
PHPやJavaScriptは型の指定はしないけど、ある程度は自動で型変換をしてくれる。
そのどちらでもない、中間的な存在だと感じたね。
次回はいよいよ関数の仕組みと作り方について学んでいくよ。
無理せず頑張っていこう。
最後まで読んでくださりありがとうございます。
記事が少しでもあなたの心に残ったら、【スキ】で知らせてくれると嬉しいです。
それでは、また!
参考資料
PEP8 日本語版
https://pep8-ja.readthedocs.io/ja/latest/
東京大学 - Pythonプログラミング入門
https://utokyo-ipp.github.io/
Python Japan - ゼロからのPython入門講座
https://www.python.jp/train/index.html
