【図解】Pythonプログラミングの始め方(データ型「数値」「文字列」・演算子)【徹底解説】

スポンサーリンク
Pythonのデータ型(数値・文字列・論理型) Python

この連載「【図解】Pythonプログラミングの始め方」では、大人気Pythonを扱う上で知っておきたい、基礎文法を図解を交えて分かりやすく解説していきます。Python学習の一助にしていただければ幸いです。

連載でとりあげる予定のコンテンツ一覧は次のとおりです。

連載 Pythonプログラミングことはじめ
  • part1.基本編
    1. ステートメント >>
    2. データ型 >>
    3. データ構造
      • 3.1 リスト >>
      • 3.2 タプル >>
      • 3.3 辞書 >>
      • 3.4 内包表記 >>
    4. 構文
      • 4.1 条件分岐(if文句) >>
      • 4.2 繰り返し(for文句, While文句…) >>
      • 4.3 例外処理 >>
  • Part2.応用編
    1. 関数 >>
    2. 組込み関数 >>
    3. クラス >>

連載2回目となる今回は、Pythonのデータ型について解説したいと思います。Pythonで扱うことができる「データの種類」について、そして各種データの操作を行うための「演算子」について解説します。

重要度:★★★★★

動的型式言語である、Pythonでは、変数定義時にデータ型宣言は必要ありませんし、数値の有効範囲により型(他言語でいうint, doubleなど)を選択する必要もありません。

このことは、Pythonプログラミングの難易度を下げる効果をもたらしますが、その一方でプログラマ自身はデータの属性を常に理解し適切な処理をする必要があります。

スポンサーリンク

1. Pythonの「データ型」

Pythonで使えるデータ型は、「数値型」「文字列型」「論理型」です。さらに、これらはすべてがオブジェクトなので、広義では「オブジェクト型」の一部となります。

一般的には、データ型といえば「数値型」「文字列型」「論理型」の3つあると考えればよいでしょう。

型の種類
図1. Pythonのデータ型

それでは、次項より個々のデータ型について整理したいと思います。あわせて関連する「演算子」もすべて紹介していきます。

スポンサーリンク

2. 数値型

まずは、数値型ですPythonで表現できる数値の種類は「整数」「浮動小数」「バイナリ/N進数」「複素数」の5つになります。数値解析や行列演算といった用途に使われることの多いPythonでは、なんと複素数を標準で扱うことができます。

整数や浮動小数で、扱うことができる数値範囲は、-10^10 から10^10といった長大(絶対値的に)なものから、0.1^(10)などきわめて小さい値まで対応します。

さらに、Pythonは「動的型式言語」であるので、データの有効範囲を気にすることなく(宣言することなく)使えます。

数値型
図2. 数値型の種類

Python 公式ドキュメント

https://docs.python.org/ja/3.6/library/stdtypes.html#typesnumeric

2.1 整数(Integer)

整数は、小数点以下がない数値のことをいいます。負数や0も含めます。表現できる数値はメモリに格納できる範囲内で、長大な値を扱うことができます。

次の<List1>では、28桁の数値を扱っていますが、オバーフローすることなくそのまま使うことができるのがPythonを使うメリットの一つです。(B)

また、アンダースコア(_)は、数値リテラルでは無視されるので、数値のグループ化することで可読性を高めることができます。(Python3.6以降)

print(5)    # 5
print(0)    # 0
print(-5)   # -5

# 整数リテラルの長さには制限はない(メモリに格納出来うる範囲において)(B)
print(2147483647)   # 2147483647
print(7922816251426433759354395033)     # 7922816251426433759354395033

# アンダースコアを使って数値をグループ化することで分かりやすくすることができる (C)
print(100_000_000_000)      # 100000000000

数値どうしを演算するための「算術演算子」は以下の7種類があります。図2. 算術演算子の種類

Pythonでは、べき乗を➆のように表現できます、また除算の商、余の演算は➄,➅のようにします。

算術演算子_rev0.2_JP
図3. 算術演算子の種類
print(100 + 10)     # 110       ※➀ 加算
print(100 - 10)     # 90        ※➁ 減算
print(100 * 10)     # 1000      ※➂ 乗算
print(100 / 3)      # 33.333333333333336  ※➃ 除算
print(100 // 3)     # 33        ※➄ 商
print(100 % 3)      # 1         ※➅ 剰余
print(2**3)         # 8         ※➆ べき乗(累乗)

算術代入演算子_rev0.1_JP
図4. 算術代入演算子

整数については、以上です。引き続き、浮動小数(実数)について解説します。

2.2 浮動小数(Floating)

浮動小数点は、小数点以下を表現できる実数です。桁数が大きい場合は、指数表記(E)で表現でき、整数同様に、算術演算子が使えます、整数と浮動小数での演算では、浮動小数にキャスト(型変換)されます。


例1.次は浮動小数点を表す例を紹介しています。小数点を含む正負の実数を表現することができます。また、整数部分や小数点以下の0は省略可能で、結果には0が自動的に追加されます。

整数同様に他言語で指定するような実数の取り扱いできる範囲指定・宣言(ビット指定)は不要です。(single, float など)

print(0.08)                 # 0.08
print(98.5)                 # 98.5
print(2343324234.200013134) # 2343324234.200013
print(-3.5)                 # -3.5      負数でも表現可

# "0 ""表記の省略
print(.123)     # 0.123     整数部の0を省略した場合
print(10.)      # 10.0      小数点以下の0を省略した場合

例2. 次のように大きな桁数を表現する際には指数表記を使うことができます。指数表記の”e”はExponet(10を底とした指数)を表します。大文字”E”と記述しても同じです。

また、実数の演算結果が整数にキャストすることはありません。(➀)整数同様に”_”で区切り文字を使用しても結果に影響を与えません。(➃)

print(1.23e+7)      #➀ 12300000.0   ※ 小数点以下は追加される
print(9.7e-4)       #➁ 0.00097      ※ eの定数に負数を使うと(1/10)の累乗と同義

print(0e0)          #➂ 0.0
print(3.14_15_93)   #➃ 3.141593      # _による区切り文字も有効(整数同様)

例3.実数の計算例を紹介します。実数同士、また整数と実数といった計算ができますが全て結果は実数にキャストされます(➂,➃)。また、例外として整数同士の除算は実数になります。➄

print(10.3 + 0.5)   # 10.8      ※➀ 実数 + 実数
print(10.3 - 0.5)   # 9.8       ※➁ 実数 - 実数
print(100 * 0.2)    # 20.0      ※➂ 整数 * 実数
print(1.08 * 100)   # 108.0     ※➃ 実数 * 整数

print(100/2)        # 50.0      ※➄ 整数 / 整数

2.3 n進数

整数は次の示す識別子で底を変更し(10進数から)2進数(0b__)8進数(0x__)16進数(0x__)で表現することができます。また、➀➂➄のように同じ底どうしで演算できますし、➆のように底が揃ってなくても問題なく演算できます。通常、演算結果は10進数に変換されますが、2進数で出力したい場合bin()関数をつけることで可能となります。➁➃➅

#2進数(0b____)
print(0b0000)                # 0
print(0b0101)                # 5
print(0b1111)                # 15
print(0b0001 + 0b1010)       # 11       ※➀ 1 + 10
print(bin(0b0001 + 0b1010))  # 0b1011   ※➁ ➀の結果を2進数で出力

#8進数(0o____)
print(0o000)                 # 0
print(0o010)                 # 8
print(0o777)                 # 511
print(0o001 + 0o010)         # 9        ※➂ 1 + 8
print(bin(0o001 + 0o010))    # 0b1001   ※➃ ➂の結果を2進数で出力


#16進数(0x____)
print(0x00)                 # 0
print(0x10)                 # 16
print(0xFF)                 # 255
print(0x01 + 0x10)          # 17        ※➄ 1 + 16
print(bin(0x01 + 0x10))     # 0b10001   ※➅ ➄の結果を2進数で出力

#2,8,16進数間での演算
print(0b0001 + 0o010 + 0x10)    # 25    ※➆ 1 + 8 + 16

2.3.1 ビット演算子

ビット同士の演算には、下記の6種類の「ビット演算子」を使います。論理積(AND)、論理和(OR)から、ビットシフト(右/左)演算まで、用意されています。(図〇)

ビット演算子を使う上で注意する点は、演算結果が整数(10進数)に自動で変換されてしまうことです。

ビット演算子_rev0.1_JP
図〇. ビット演算子の種類

例1. ➀~➃は、1bitどおしの演算結果です。演算結果は、10進数に自動変換されるので、この例では「bin()関数」で、2進数(バイナリ)表記に戻しています。

また、➄,➅のようにビット列どうしでの演算にも対応できますので、「&」「|」「^」を組合わせて、ビットマスク・抽出・反転などに応用ができます。詳細については、論理演算を扱う専門書籍に解説を譲ります。

print(bin(0b0 & 0b1))   #➀ 0b0
print(bin(0b1 & 0b1))   #➁ 0b1   # 1,2項ともに’0b1’の場合のみ’0b1’となる

print(bin(0b0 | 0b0))   #➂ 0b0   # 1,2項ともに’0b0’の場合のみ’0b0’となる
print(bin(0b0 | 0b1))   #➃ 0b1


num1 = 0b101010
num2 = 0b111000

print(bin(num1 & num2)) #➄ 0b101000
print(bin(num1 | num2)) #➅ 0b111010

例2. 続いて、ビットシフト演算子の使用例をしめします。シフトするたびに、2倍(左シフト)、1/2倍(右シフト)されます。

num3 = 0b0001
# <左シフト>
print(bin(num3 << 1))   #➀ 0b10      Dec(2)    ※以降2のn乗倍となる
print(bin(num3 << 2))   #➁ 0b100     Dec(4)
print(bin(num3 << 3))   #➂ 0b1000    Dec(8)

num4 = 0b1000
# <右シフト>
print(bin(num4 >> 1))   #➃ 0b100     Dec(4)  ※以降2の(-n)乗倍となる
print(bin(num4 >> 2))   #➄ 0b10      Dec(2)
print(bin(num4 >> 3))   #➅ 0b1       Dec(1)

2.4 複素数 (Imaginary Number)

虚数

虚数: j(J) 2乗すると-1となる値のこと。複素数とは、実部+虚数で表す。

一般的に数学ではiと表されますが、Pythonではjと表記します。標準ライブラリとしてすぐに使用できる点が、数値解析や演算を得意とするPythonならではの特徴といえます。


例1. 次は虚数の使用例を示しています。➀のようにjの二乗で-1となっており虚数を表すことができています。また、(実部部+虚数部)といった表記に自動で変換されます。虚部のみの場は”()”は付きません。また、虚部には実数を指定することもでき、1.2項の浮動小数点のルールが適用されます。(➃~➈)

print(1j * 1j)      # (-1+0j)   ※➀ jの自乗は-1となる(定義そのもの)
print(10j)          #  10j      ※➁ 虚部のみ
print(2 + 3j)       # (2+3j)    ※➂ 実部+虚部

print(3.14j)        # 3.14j     ※➃ 実数を虚部にした場合
print(10.j)         # 10j       ※➄ 実数を虚部にした場合(.前後の0は省略可)
print(.001j)        # 0.001j    ※➅ 実数を虚部にした場合(.前後の0は省略可)
print(1e100j)       # 1e+100j   ※➆ 指数表記した虚部
print(1e-100j)      # 1e-100j   ※➇ 指数表記した虚部
print(3.14_15_93j)  # 3.141593j ※➈ _による区切り文字も使用可能

例2.複素数は数値型や複素数どうしで演算することができます。次はその実例を示しています。(演算の種類については2項で説明します。)

comp1 = 10 + 20j
comp2 = 30 + 40j

print(comp1 + comp2)    # (40+60j)      ※➀ 加算
print(comp1 - comp2)    # (-20-20j)     ※➁ 減算
print(comp1 * comp2)    # (-500+1000j)  ※➂ 乗算

例3.複素数を扱うメソッドと関数が用意されています。

“real”メソッドを使うことで複素数の実部、“imag”メソッドで虚部を取り出すことができます。さらに、“complex(実部, 虚部)”関数で複素数を作ることができます。

comp1 = 10 + 20j
print(comp1.real)       # 10    ※➀ 複素数の実部
print(comp1.imag)       # 20    ※➁ 複素数の虚部

#----------------------------------------------------------

comp2 = complex(3, 2)
print(comp2)                # (3+2j)    ※➂ 複素数の生成

comp3 = complex("1+2j")     # (1+2j)    ※➃  複素数の生成(文字列による生成)
print(comp3)
スポンサーリンク

3. 文字列型

Python_基本文法_コードの書き方

Pythonで文字列を表現するには、文字列を (シングルクオーテーション) もしくは、(ダブルクオーテーション) で囲むことで「文字列オブジェクト」として認識されます。その他の文字列に関連する書式をまとめると、以下のようになります。(図〇)

文字列リテラル
<文字列リテラルの定義作法>
  • (シングルクォート) で囲む
  • (ダブルクォート) で囲む
  • (ダブル)を含む文字列は、(シングル)で囲む
  • (シングル)を含む文字列は、(ダブル)で囲む
  • 複数行の文字列リテラルは、’’’(3連) で囲む、もしくは “””(3連) で囲む
  • エスケープシーケンスで、文字列中に「改行」、「, , 」文字を表現する
文字列型
図〇. Pythonの文字列リテラル

文字列中で、使うことができるエスケープシーケンスには、以下のような種類があります。


サンプルコードで確認してみましょう。「」「」で文字列オブジェクトをつくる基本型(A)と、複数行の文字列を「’‘’」で囲むこで、改行コードを含めて、そのまま文字列オブジェクトとして認識されます。(B) <List〇>

# 文字列型の基本的な使い方(A)

str1 = "Pythonの文字列型の解説_ダブルクォート"
print(str1) # >>Pythonの文字列型の解説_ダブルクォート

str2 = 'Pythonの文字列型の解説_シングルクォート'
print(str2) # >>Pythonの文字列型の解説_シングルクォート

str3 = 'Pythonの"文字列型"の解説'
print(str3) # >>Pythonの"文字列型"の解説

str4 = "Pythonの'文字列型'の解説"
print(str4) # >>Pythonの'文字列型'の解説


#-------------------------------------------------------------------------
# 複数行の文字列(B)

str5 = '''あいうえお
かきくけこ
さしすせそ
たちつてと
'''

str6 = """あいうえお
かきくけこ
さしすせそ
たちつてと
"""

print(str5)
print(str6)
# >>あいうえお
# >>かきくけこ
# >>さしすせそ
# >>たちつてと

#str6も同様

3.1 文字列演算子

・・・

3.2 文字列オブジェクトの関連メソッド

Pythonに限らず、プログラミングでは文字列は大変重要なオブジェクトです。そのため、文字列オブジェクトの配下にはさまざまな「メソッド」がPythonの標準機能として提供されています。

文字列オブジェクトのメソッドについては、別記事で改めて解説しています。こちらを参照してください。

4. まとめ

最後に、この記事のまとめになります。

  • 数値型には整数型、浮動小数点、虚数がある。
  • 数値の大きさ(桁数)の指定は不要である。
  • 標準で虚数を扱うことができる。
  • 数値演算子には7種類がある。

最後までお読み頂きありがとうございました。

次の記事では、文字列リテラルについて解説します。

タイトルとURLをコピーしました