データ型 (Data Type) と演算子 (Operator)

データ型

数値型

数値型には、整数型と小数点を含む浮動小数点型がある。他に複素数型があるが、高等学校でのプログラミングでは使用しないので、ここでは紹介しない。

  • 整数型 (int型)
  • 浮動小数点(実数)型 (float型)

整数型 (int 型)

整数型の表記例と出力プログラム例を示す。print命令の括弧 [ () ] 内に書いた数値などのデータは、プログラムを実行するとPCやタブレットの画面に出力される。

print(10)     # 普通の整数
print(+20)    # 正の整数に符号を明示できる
print(-3)     # 負の数の場合には、先頭に [ - ] を付ける
10
20
-3

数値に正の符号をつけて入力しても、出力される際には特別な指示をしない限り、正の符号は付与されない。

整数型の表記法を確認しよう。

  • 連続する0-9の数字列で記述される。
  • ただし、数値の0を除き、整数値の最初の文字は0にしてはならない。
    • 0で始まる整数表現はC言語などのいくつかの言語で8進数の表記法として使用されており、0の有無で、数値の基数を10 か8かで誤って認識する可能性があることが指摘されていたため、Pythonではこの表現は意図的に使用できないようにされている。
  • 必要に応じて、前述の形式で表現された数値の前に+/-の符号を置くことができる。

次の整数表現は、先頭の数字が0になっているため、エラーとなる。

print(0123)   # 整数の先頭に [ 0 ] を置くことはできない、この行はエラーになる

浮動小数点型 (float 型)

浮動小数点型の表記例と出力プログラム例を示す。

print(1.5)
print(-0.5)
print(.5)         # 小数点前の0は省略できる。
print(10.0)
print(-10.)       # 小数点後に0しかない場合には、省略できる
1.5
-0.5
0.5
10.0
-10.0

浮動小数点型の数値の、小数点の直前直後の0を省略して入力することができるが、浮動小数点値が出力される際には特別な指示をしない限り、0は省略されない。

浮動小数点型の表記法を確認しよう。

  • 連続する0-9の数字列で記述され、ただし、その数字列の最初と末尾を含むどこかにピリオド [ . ] が含まれている。
  • 必要に応じて、前述の形式で表現された数値の前に+/-の符号を置くことができる。

浮動小数点型の数値の表記法には、上記の方法の他にE表記と呼ばれる表記方式がある。浮動小数値を下記の様に仮数部と指数部に分け、

\[ 2.3 \times 10^5, (= 230000) \]

\[ 仮数部 \times 10^{指数部} \]

Eもしくはeを鋏んで前に仮数部、後ろに指数部を書くことができる。この表記法をE表記と呼ぶ。

2.3E5

浮動小数値のE表記は、物理や化学での数値表現で多用される。非常に大きいか小さい数を表現する場合や、有効数字の桁数を明確に示すために使う表記としてなじみ深い。

  • E表記の仮数部は整数値でも先に示したピリオドを含む形式の浮動小数値でもよい。
  • 指数部は整数値を指定し、負の場合にはマイナス [ - ] 符号をつける。
print(1.2e3)
print(-2.5e+10)
print(-36000000000000000.0)
print(3E20)
print(-4e-3)
print(5.6e-10)
1200.0
-25000000000.0
-3.6e+16
3e+20
-0.004
5.6e-10

出力される数値の値は、入力した値と当然同じであるが、数値がE表記で出力されるか否かは、入力時に記述した形式に関係なく、数値の大小で決定される。

例えば、すべての数値の出力形式をE形式で統一したいということであれば、数値を出力する際に、そのように出力形式の指示をすればよい。出力形式の指示の方法は改めて紹介する。

文字列型 (str 型)

文字列を表現するデータ型として文字列型がある。文字列型のデータは、人間に対するメッセージの出力に多用されるが、それだけでなく、数値型のデータと同じようにコンピュータで行われる多様な演算や情報処理の対象となっている。

文字列型のデータは、対象となる文字列を単引用符 [ ' ] あるいは二重引用符[ " ]で前後を括って記述する。

print('abc')             # 次の行も同じ文字列
print("ABC")
print('123')             # 数字の列であって整数値ではない
print('0123')            # 文字列であって、整数値ではないので、最初に0があってもかまわない
print('1.2E3+2')         # これも浮動小数値や演算子ではなく単なる文字列、演算は行われずそのまま出力される
print('プログラミング言語Python')  # 日本語を含む文字列も定義できる
print('abc XYZ')         # 文字列中に空白があってもかまわない
print('ABC "123" xyz')   # 文字列中で二重引用符を使いたいのであれば、文字列を単引用符で括る、逆もあり
print('1行目\n 2行目') # 文字列の中で改行できないので改行が必要であればその代わりに\nを入れる
abc
ABC
123
0123
1.2E3+2
プログラミング言語Python
abc XYZ
ABC "123" xyz
1行目
 2行目

文字列の表記法を確認しよう。

  • 文字列の前後は、単引用符か二重引用符か同じ引用符で括る。
  • 文字列の中では日本語(全角文字)を使用できるし空白を入力することもできる。
  • 引用符を含む文字列を定義したいのであれば、文字列に含まれないほうの引用符で括る。
  • 文字列の中で改行はできない。改行が必要であれば改行の代わりに[ \n ] を入力する。
  • 注意:文字列に日本語を入力した場合には、文字列を括る引用符や、printの引数を閉じる[ ) ] が全角文字になっていないことを十分に確認すること。

真偽値型 (bool 型)

あることや条件式の評価結果が真であるか偽であるかを示す値として真偽値がある。

  • True
    • 真を表す
  • False
    • 偽を表す

真偽値の最初の文字は大文字でなければならない。

print(True)
print(False)
True
False

以下の様に真偽値の開始文字を小文字にすると、エラーとなる。

print(true)    # これらはエラーになる。
print(false)

一般的には真偽値そのものを意図的に使用することは少ないが、制御構造で紹介する選択構造や繰り返し構造、いわゆるif文やwhile文の条件式の指定で暗黙的に必ず使用される。暗黙的にという意味は、if文やwhile文で指定されている条件式は、その評価結果として真偽値を返し、その真偽値でif文は実行する処理を選択し、while文は繰り返しを継続するか終了するかを判断するということである。


変数

Pythonにおける変数は、データを格納するための名前付きの場所です。変数を使うことで、プログラム内でデータを簡単に操作し、再利用することができます。

データを変数に格納する例:

# 変数の定義と代入
x = 10
y = "Hello, World!"
z = [1, 2, 3, 4, 5]

変数には、数値、文字列、リスト(配列)などを格納することができます。

なお、変数にデータを格納するために使用する代入演算子[ = ]に関しては、すぐ後で改めて説明します。

変数は以下のような役割を持ちます:

  • データの保持:計算結果やユーザー入力、ファイルから読み込んだデータなどを保持します。
  • 再利用:一度変数に格納したデータは、プログラムの異なる部分で何度でも使用できます。
  • 可読性の向上:適切な名前を持つ変数は、コードの可読性を高め、他の人がコードを理解しやすくします。

変数の役割の説明例:

# 変数の定義
radius = 5
pi = 3.14159

# 計算
area = pi * (radius ** 2)

# 結果の表示
print("The area of the circle is:", area)

この例では、radiuspiという変数を使って円の面積を計算し、その結果を表示しています。変数はプログラムの基本的な構成要素であり、データの操作や管理において非常に重要な役割を果たします。

変数名

変数名には以下のルールがあります:

  • 英字(大文字・小文字)またはアンダースコア(_)で始める
  • その後に数字を含めることができる
  • Pythonの予約語(例:forifelseなど)は使用できない

プログラミングが書かれた教科書や各種の本・Webページを見ると、a, b, c, i, j, x, yなどの1文字変数がいたるところで利用されているが、明確な理由がある場合を除き、1文字変数は利用しない方がよい。

変数名を見てもその内容や用途が分からず、ひいては、プログラムの内容を理解するのに不必要な労力を要するようになるからです。そのプログラムを読み理解するための時間が短い場合には、変数名が適切でないだけで、プログラムの処理内容を理解できないことさえ生じる。

あまり長い名前も冗長で良くないが、基本的に、複数文字からなる意味のある名前を使うべきである。

変数名データ型、用途備考
a配列(リスト)

いろいろ
array 基本的には使わない
名前を考えるまでもない(考える気にもならない)一時的な変数
bいろいろ名前を考えるまでもない(考える気にもならない)一時的な変数
c文字character, 1文字の文字列
d, f実数値double, float
eデータelement, e in 配列のような使い方
i, j, k整数値、for 文の制御変数index, integer
j, k はiの次の文字, Fortranの既定用法
lリストlist
数字の1と間違える可能性があるので変数名として使用すべきではない
o特になし数字の0と間違える可能性があるので(特に大文字のO)変数名として使用すべきではない
s文字列string
t文字列sの次の文字
v数値、場合によっては文字列value
x, y数値、組み合わせて座標、配列の添え字

演算子

代入演算子

Pythonの代入演算子は、変数に値を代入するための演算子です。基本的な代入演算子の他に、複合代入演算子もあります。以下に、各代入演算子の説明と例を示します。

基本的な代入演算子(=)

最も基本的な代入演算子は等号(=)です。右側の値または式を左側の変数に代入します。

x = 5
y = "Hello"
z = [1, 2, 3]

複合代入演算子

複合代入演算子は、変数の値を更新し、その結果を同じ変数に再代入するために使用されます。以下に主要な複合代入演算子の例を示します。

加算代入(+=)

変数にある値を加え、その結果を同じ変数に再代入します。

a = 5
a += 3  # a = a + 3 と同じ
print(a)  # 出力: 8

減算代入(-=)

変数からある値を減じ、その結果を同じ変数に再代入します。

b = 5
b -= 2  # b = b - 2 と同じ
print(b)  # 出力: 3

加算、減算代入のほかにも以下の表のような代入演算子が利用できます。

代入演算子機能備考
=代入右辺の計算結果を左辺の変数に代入する
+=加算代入右辺の計算結果と左辺の変数の値を加算した値を左辺の変数に代入する
-=減算代入右辺の計算結果を左辺の変数の値から減算した値を左辺の変数に代入する
*=乗算代入右辺の計算結果と左辺の変数の値を乗算した値を左辺の変数に代入する
/=除算代入
//=整数除算代入
%=剰余代入
**=累乗代入

応用的情報?

複合代入演算子は数値だけでなく、文字列やリストなどの他のデータ型にも使用できます。以下に、数値以外のデータ型に対する複合代入演算子の使用例を示します。

文字列に対する複合代入演算子

文字列に対して複合代入演算子を使用することで、文字列の結合や繰り返しを簡単に行うことができます。

文字列の結合(+=)

greeting = "Hello"
greeting += " World!"
print(greeting)  # 出力: Hello World!

この例では、greeting変数に「 World!」を追加しています。

文字列の繰り返し(*=)

repeat = "Good!"
repeat *= 3
print(repeat)  # 出力: Good!Good!Good!

この例では、repeat変数の文字列を3回繰り返しています。

リストに対する複合代入演算子

リストに対して複合代入演算子を使用することで、リストの要素の追加や繰り返しを簡単に行うことができます。

リストの要素追加(+=)

numbers = [1, 2, 3]
numbers += [4, 5, 6]
print(numbers)  # 出力: [1, 2, 3, 4, 5, 6]

この例では、numbersリストに新しい要素 [4, 5, 6] を追加しています。

リストの繰り返し(*=)

items = ["apple", "banana"]
items *= 2
print(items)  # 出力: ['apple', 'banana', 'apple', 'banana']

この例では、itemsリストの要素を2回繰り返しています。


算術演算子

算術演算子は、数値の計算を行うための基本的な演算子です。Pythonでは、以下のような算術演算子があります

    代表的なものは四則演算

二項演算子機能備考
+加算
-減算
*乗算
/徐算整数同士の徐算でも結果は実数
//整数徐算小数点以下は切り捨て
%剰余演算は整数に限定されない
**べき乗

算術演算子による演算結果のデータ型

Pythonの算術演算の結果のデータ型は、演算に使用するデータ型によって決まります。以下に、主要な算術演算とその結果のデータ型について説明します。

加算(+)、減算(-)、乗算(*)

  • 整数同士の演算:結果は整数型(int)になります。
  • 浮動小数点数が含まれる演算:結果は浮動小数点数型(float)になります。
result = 5 + 3  # 整数同士の演算
print(result, type(result))  # 出力: <class 'int'>

result = 5 * 3.0  # 浮動小数点数が含まれる演算
print(result, type(result))  # 出力: <class 'float'>
8 <class 'int'>
15.0 <class 'float'>

除算(/)

  • **整数同士の演算でも結果は浮動小数点数型(float)になります。
result = 5 / 3  # 整数同士の演算
print(result, type(result))  # 出力: <class 'float'>
1.6666666666666667 <class 'float'>

整数除算(//)

  • 整数同士の演算:結果は整数型(int)になります。
  • 浮動小数点数が含まれる演算:結果は浮動小数点数型(float)になります。
result = 5 // 3  # 整数同士の演算
print(result, type(result))  # 出力: 1 <class 'int'>

result = 5.0 // 3  # 浮動小数点数が含まれる演算
print(result, type(result))  # 出力: 1.0 <class 'float'>
1 <class 'int'>
1.0 <class 'float'>

剰余(%)

  • 整数同士の演算:結果は整数型(int)になります。
  • 浮動小数点数が含まれる演算:結果は浮動小数点数型(float)になります。
result = 5 % 3  # 整数同士の演算
print(result, type(result))  # 出力: 2 <class 'int'>

result = 5.0 % 3  # 浮動小数点数が含まれる演算
print(result, type(result))  # 出力: 2.0 <class 'float'>
2 <class 'int'>
2.0 <class 'float'>

累乗(**)

  • 整数同士の演算:結果は整数型(int)になります。
  • 浮動小数点数が含まれる演算:結果は浮動小数点数型(float)になります。
result = 2 ** 3  # 整数同士の演算
print(result, type(result))  # 出力: <class 'int'>

result = 2 ** 3.0  # resultはfloat型
print(result, type(result))  # 出力: <class 'float'>
8 <class 'int'>
8.0 <class 'float'>

比較演算子

比較演算子は、2つの値を比較して、その結果を真(True)または偽(False)として返します。以下の使用例では、比較演算子による比較結果を変数に代入した上で確認のために出力していますが、一般的には、改めて説明する if文、while文などの条件式を記述する際に使用されます。

比較演算子機能備考
==等しい
!=異なる
>左辺が大きい
>=左辺が大きいか等しい
<右辺が大きい
<=右辺が大きいか等しい

比較演算子の使用例を以下に示します。

a = 5
b = 5
c = 3

result = (a == b)
print(result)  # 出力: True
result = (a == c)
print(result)  # 出力: False

result = (a != b)
print(result)  # 出力: False
result = (a != c)
print(result)  # 出力: True

result = (a >= b)
print(result)  # 出力: True
result = (a < c)
print(result)  # 出力: False
True
False
False
True
True
False

文字列の比較

文字列も比較演算子を使って比較できます。文字列の比較は辞書順(アルファベット順)で行われます。

以下の例では、"apple"は辞書順で"banana"より前に来るため、結果はTrueになります。

str1 = "apple"
str2 = "banana"
result = (str1 < str2)
print(result)  # 出力: True
True

リストの比較

リストも比較演算子を使って比較できます。リストの比較は、最初の要素から順に比較されます。

以下の例では、リストの最初の2つの要素は等しいですが、3番目の要素が異なるため、list1list2より小さいと判断されます。

list1 = [1, 2, 3]
list2 = [1, 2, 4]
result = (list1 < list2)
print(result)  # 出力: True
True

論理演算子

論理演算子を使うことで、複雑な条件を簡潔に表現し、プログラムの可読性を高めることができます。

論理演算子機能備考
and論理積:2つの条件が両方とも真(True)の場合にのみ、結果が真になります。
or論理和:2つの条件のうち少なくとも1つが真(True)の場合に、結果が真になります。
not論理否定:条件の真偽を反転させます。真(True)を偽(False)に、偽(False)を真(True)にします。

論理演算子は、条件式の真偽を評価するために使用されます。

a = True
b = False
result = a and b
print(result)  # 出力: False
result = a or b
print(result)  # 出力: True
print(result)  # 出力: False
False
True
True

複合条件の例

論理演算子を組み合わせて複雑な条件を評価することもできます。

x = 10
y = 20
z = 30

# xが5より大きく、かつyが15より大きい
result = (x > 5) and (y > 15)
print(result)  # 出力: True

# xが5より大きい、またはzが40より小さい
result = (x > 5) or (z < 40)
print(result)  # 出力: True

# yが25以下でない
result = not (y <= 25)
print(result)  # 出力: False
True
True
False

演算子の優先順位

print(True)
print(False)
print(10 > 3)          # 数値比較の結果は正しい。比較演算子の詳細は後ほど改めて。
print(123 == 456)      # これは違う数値だから偽。
print(123 == 123)      # これは同じ数値だから真。
print(123 == '123')    # 数値と文字列は違う


組み込み関数

Pythonには、プログラムの基本的な操作を簡単に行うために、多数の組込み関数が提供されています。以下に、いくつかの主要な組み込み関数を示します。

組み込み関数機能備考
print(データ)標準出力(文字の出力領域)に、データとして与えられた文字列や数値やリスト(配列)を出力します。文字列や数値はカンマで区切って複数指定できる。
input(プロンプト)モニタにプロンプトを出力し、キーボードから入力された文字列を取得します。文字列を返す。
len(データ)データとして与えられたリスト(配列)の長さ(要素数)や、文字列の文字数を返します。
sum(数値リスト)数値のリスト(配列)の合計を計算して返します。
min()
max()
str(データ)データとして与えられた数値やリスト(配列)を文字列に変換して返します。
int(データ)データとして与えられた文字列や実数を整数に変換して返します。整数を表す文字列を対応する整数に変換するか、実数を小数点以下を切り捨てて整数に変換して返します。
float(データ)データとして与えられた文字列や整数を実数に変換して返します。実数を表す文字列を対応する実数に変換するか、整数を実数に変換して返します。
type(データ)データ型を返します。

入出力

print()関数

print()関数は、標準出力(通常はコンソール)に文字列を出力するために使用されます。

  • endパラメータ
    • 出力の最後に追加される文字列を指定できます。デフォルトでは改行が追加されます。
  • sepパラメータ
    • 複数の引数を指定した場合の区切り文字を指定できます。デフォルトではスペースが使用されます。

print("Hello, World!")      # オプションの指定がないので文字列の出力後に改行する
print("Hello, World!", end='')   # 改行を取り除く
print("How are you?")
print('a', 'b', 'c')             # オプションなし
print('a', 'b', 'c', sep=',')    # 複数の出力の区切り文字をカンマ [,] に変更
Hello, World!
Hello, World!How are you?
a b c
a,b,c

データ型変換

Pythonには、データ型を変換するための便利な組み込み関数がいくつかあります。以下に、主要なデータ型変換関数とその使用例を示します。

int()関数

文字列や浮動小数点数を整数に変換します。

# 文字列を整数に変換
str_value = "123"
int_value = int(str_value)
print(int_value, type(int_value))  # 出力: 123 <class 'int'>

# 浮動小数点数を整数に変換
float_value = 123.45
int_value = int(float_value)
print(int_value, type(int_value))  # 出力: 123<class 'int'>
123 <class 'int'>
123 <class 'int'>

float()関数

文字列や整数を浮動小数点数に変換します。

# 文字列を浮動小数点数に変換
str_value = "123.45"
float_value = float(str_value)
print(float_value, type(float_value))  # 出力: 123.45 <class 'float'>

# 整数を浮動小数点数に変換
int_value = 123
float_value = float(int_value)
print(float_value, type(float_value))  # 出力: 123.0 <class 'float'>
123.45 <class 'float'>
123.0 <class 'float'>

str()関数

数値や他のデータ型を文字列に変換します。

# 整数を文字列に変換
int_value = 123
str_value = str(int_value)
print(str_value, type(str_value))  # 出力: 123 <class 'str'>

# 浮動小数点数を文字列に変換
float_value = 123.45
str_value = str(float_value)
print(str_value, type(str_value))  # 出力: 123.45 <class 'str'>
123 <class 'str'>
123.45 <class 'str'>

type()

予約語

Pythonの予約語(キーワード)は、プログラムの構造や制御を行うために特別な意味を持つ単語です。これらのキーワードは、変数名や関数名として使用することはできません。以下に、Pythonの予約語を示します。

False      await      else       import     pass
None       break      except     in         raise
True       class      finally    is         return
and        continue   for        lambda     try
as         def        from       nonlocal   while
assert     del        global     not        with
async      elif       if         or         yield

この教材では使用しないキーワードが複数含まれており、すべてをすぐに覚えることは難しいし必ずしも必要ありませんが、関数名や変数名に使用できない予約語が複数あることは覚えておいて、巻子や変数の定義時にエラーが生じた場合には、予約語のことを思い出して確認できるようにしておいてください。

注意点

  1. 予約語の使用: 予約語は変数名や関数名として使用できません。例えば、def = 10のようなコードは構文エラーになります。
  2. 大文字と小文字: Pythonは大文字と小文字を区別します。例えば、Trueは予約語ですが、trueは予約語ではありません。

これらのキーワードを正しく理解し、適切に使用することで、Pythonプログラムの可読性と保守性を向上させることができます。

予約語を変数として使用した例と、その実行時に出力されるエラー(表示を簡略化しています)を示します。

def = 10
  File "<exec>", line 1
    def = 10
        ^
SyntaxError: invalid syntax

基本演習


探究課題

多倍長整数

多くのプログラミング言語(例えば、C, Java, JavaScript, Fortran)などでは、整数値は32ビットや64ビットで表現されており、使用できる数値の範囲や桁数は限定されている。

一方Pythonでは、使用しているコンピューターのメモリ容量が許す限り、大きな桁数の整数値を利用することができる。大きな桁の整数の入力、演算例を示す。

a = 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
b = 987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210
print(a*b)     # 乗算
print(b/a)     # 実数徐算
print(b//a)    # 整数徐算
121932631137021795226185032733866788594511507391563633592367611644557885992987901082152001112635258986434993786160646167367779295611949397448712086533622923332237463801111263526900
8.0000000729
8

このような事実上どんなに大きな整数値でも表現できる数値の表現法は、多倍長整数、その演算機能は、多倍長演算や任意精度演算などと呼ばれている。興味があれば探究してみるとよい。

多倍長整数やその演算機能は、整数演算能力に大きな柔軟性を与えるが、一方で、メモリ効率や処理速度が劣化するという問題もあり、多くのプログラミング言語に採用されるに至っていない。


数値データ型

複素数

Pythonで使用できる数値型としては、数学、物理、様々な技術分野で使われる複素数がある。

z1 = 3 - 4j          # 虚部を追加して普通に数値として記述できる
print('z1=', z1)
print('z1の実部', z1.real)
print('z1の虚部', z1.imag)
z2 = complex(2, 1)   # コンストラクタで複素数5+iを定義
print('z2=', z2)
print(z1+z2)
print(z1-z2)
print(z1*z2)
print(z1/z2)
z1= (3-4j)
z1の実部 3.0
z1の虚部 -4.0
z2= (2+1j)
(5-3j)
(1-5j)
(10-5j)
(0.4-2.2j)

興味があれば、Pythonでの複素数型 complex の利用法(演算や関数など)を確認するとともに、複素数が有効に活用される応用分野などに関して探究して見るとよい。


分数

Pythonでは、我々が小学生のころから使い慣れた分数を扱えるライブラリ fractions が提供されている。

from fractions import Fraction

a = Fraction(1, 3)          # 分子と分母を整数値で入力
b = Fraction(2, 6)          # b は約分される?
c = Fraction(1, 2)
d = Fraction(0.5)           # 浮動小数値を指定するとどうなるの?
e = Fraction(0.2)

print(a, b, c)
print('d=', d)              # d はちゃんと分数に変換される
print('e=', e)              # e はすごいことになる、なぜ? 2^-nの和で表される数値か?

print(a*2, a*3, a*4, a+c, a*c)

print('aの分子', a.numerator)
print('aの分母', a.denominator)
print('a の整数値', int(a))
print('a の浮動小数点値', float(a))
1/3 1/3 1/2
d= 1/2
e= 3602879701896397/18014398509481984
2/3 1 4/3 5/6 1/6
aの分子 1
aの分母 3
a の整数値 0
a の浮動小数点値 0.3333333333333333

興味があれば、fractions の利用法や演算の実現法などに関して探究して見るとよい。