15:「型」を理解してプログラミングの基礎を固める

前回の続きです。

Python の型とはなにか

続いて「型というプログラミングの基礎」という話をしていきたいと思います。型を意識してプログラミングすることが上達につながります。

型というのはプログラミングでは重要な概念です。型とは何かというと、プログラムの効率や信頼性などを担保する機能の一つです。この効率とか信頼性、具体的に言うと基本的に違う型同士は演算できないと言うことで効率とか信頼性を担保しています。

型には色々なものがあり、例えば文字列型、数値型、リスト型、辞書型なんていうものがあります。そして型によってできることが異なってきます。

文字列型というのは何ができるかというと、全て大文字にしたり、文字列の先頭だけ大文字にしたり、特定の文字を置き換えたりするメソッド(操作)があります。

リストというのは、複数のデータを追加できる型です。あるリストにデータを追加するとか、データを並び替えたりデータの数を数えたり、合計したりというメソッドがあります。

以下のプログラムを実行すると、Hello World!と表示されます。このコードの “Hello World!” のように “ (ダブルコーテーション)で囲われたものを文字列型と言います。

string = "Hello World!"
print(string)

さらに次の行をつけくわえます。すると、すべて大文字になってHELLO WORLD!と表示されます。upperというのは大文字のことです。

print(string.upper())

以下のコードは、先頭の文字を大文字にするというものです。

print(string.capitalize())

また、リプレイスというものがあります。びっくりマークをはてなマークに変えてみます。以下のコードを実行すると、! が  ? に置き換わります。

print(string.replace("!", "?"))

なお、これらのコードは変数 string の後に .(ドット)を打って入力するものです。ドットの後に続くものをメソッドと言います。使えるメソッドは型によって変わってきます。

次は別の型を見てみましょう。

例えば、以下はint型 (integer = 整数) の例です。

number = 100

numberの後にドットを入力すると、さまざまな候補が表示されると思います。

先ほどの文字列型に対してドットの後に表示される候補が変わってきます。これが型によってできることが異なるという意味です。それぞれの型については後でそれぞれ解説していきます。

Pythonでは、今自分が扱っているデータの型がどんな型かが少しわかりにくいです。

プログラミング言語の中には、変数宣言の時に型を自分で明示するものもあります。しかしPythonはそうではなく、動的型付け言語といって、この右辺の型によって変数の型が決まります。

ちょっとわかりにくいPythonの型ですが何型か表示する方法があります。

print(type(string))
print(type(int))

このようにtype関数使うと、変数の型が表示されます。今回の場合は、str型とint型ですね。

このようにPythonは動的型付け言語、つまり動的なので、後から変数の型を変えることができます。

string = "Hello World"
print(type(string))
string = 200
print(type(string))

このプログラムを実行すると、最初のprint関数では、str型であるのに対して、変数の中身を書き換えると、int型に変数の型が変わります。

動的型付け言語ですから変数の型も合わせて変わっているということになります。

この型という概念、ちょっと初心者のうちはよくわからないと思いますが、型を理解するというのはプログラミングにおいて重要なことです。

何ができるか変わってきますし、違う型同士は演算できないと言うものがありますので、型の理解はプログラミングに欠かせません。

では、違う型同士は演算できないというのは、いったいどういうことでしょうか?

以下のコードのstr_numberはstr型、numberはint型です。この文字列の”1″と数値の1は演算できるかというと、演算できません。

str_number = "1"
number = 1
print(str_number + number)

既に警告が出ていますが、実行するとエラーになります。タイプエラーということで、型にまつわるエラーということです。

翻訳してみますと、str型同士でしか連結できませんというメッセージが表示されます。

ここまでのまとめです。

型を意識してプログラミングすることが上達につながります。

型というのはプログラミングにおいて重要な機能で、プログラムの効率や信頼性などを担保しています。

基本的に違う型同士は演算できません。そして、型によってできることに違いがあります。そして型にはいろいろな型があります。

Pythonでは扱っているデータがどんな型かわかりにくいですが、type関数を使うとその型を表示することができます。

Pythonは動的型付け言語と言われるもので、変数の方は格納するデータ型によって変わってきます。

数値型を理解してプログラム内で数値を扱えるようにする

続いて数値型で演算する、というものを見ていきます。数値型というのは四則演算できる型です。代表的なものにはint型、float型というものがあります。

int型

まずはint型から見ていきます。これは整数を扱う型です。整数というところがポイントです。

num_1 = 100
num_2 = 200
print(num_1 + num_2)

プログラムの実行結果は300になります。このように演算することができます。もちろん引き算もできます。

float型

続いて小数を含む値、float型を見てみます。日本語では浮動小数点数型といいます。浮動なのでfloatです。浮動小数点数はすこし難しい概念なのでここでは割愛します。

float型を使った以下のコードの結果は4.0となります。

float_1 = 1.5
float_2 = 2.5
print(float_1 + float_2)

このようにfloat型では少数の演算ができます。

それぞれの型をtype関数で表示してみると、上がint型、下がfloat型と表示されます。

num_1 = 100
num_2 = 200
print(num_1 - num_2)
print(type(num_1), type(num_2))
float_1 = 1.5
float_2 = 2.5
print(float_1 + float_2)
print(type(float_1), type(float_2))

以下のように変数同士の演算も可能です。int型同士の演算は、int型になります。

num_1 = 100
num_2 = 200
num_3 = num_1 - num_2
print(type(num_1), type(num_2), type(num_3))

float型同士の演算も、結果はfloat型になります。

float_1 = 1.5
float_2 = 2.5
float_3 = float_1 + float_2
print(type(float_1), type(float_2))

int型とfloat型の演算

次にint型とfloat型の演算です。

前回のレクチャーで基本的に違う型同士は演算できないと言う話をしましたが、例外のひとつがint型とfloat型です。

多くの型では違う型同士は演算できないのですが、int型とfloat型は演算することができます。演算した結果どうなるかというと、結果は常にfloat型になります。

また、int型同士を割り算すると、結果は常にfloat型になります。

以下のコードの演算結果は、101.5、型はfloat型ということになります。

num_4 = num_1 + float_1
print(num_4, type(num_4))

以下のコードの演算の結果は0.5で、型はfloat型です。

num_5 = num_1 / num_2
print(num_5, type(num_5))

以下のようにすると1÷1なので結果は1ですが、型はfloat型ということになります。

num_6 = 1 / 1
print(num_6,type(num_6))

また以下のようにすると、結果はfloat型になります。値に小数点が含まれると、その値がたとえ.0であってもfloat型になります。

num_7 = 100.0
print(num_7, type(num_7))

というわけで、int型、float型でした。

int型は整数を扱う型、float型は小数を含む数値を扱う型、そしてint型とfloat型を計算すると常にfloat型になります。

次は四則演算に使える演算子を見ていきます。