DESIGNMAP

  1. TOP
  2. 公開講座
  3. ゼロから始めるPython入門
  4. 変数とデータ型 ー ゼロから始めるPython入門【Vol.4】

変数とデータ型 ー ゼロから始めるPython入門【Vol.4】

環境構築が完了しましたので、今回からPythonを書いてプログラミングを学んでいきましょう。

Atomを起動します。[ファイル]メニュー→[新規ファイル]をクリックします。[ファイル]メニュー→[保存]をクリックします。Vol.3つくった「python-study」フォルダ内に、「book_cart.py」というファイル名で保存します。

以下のコードを記述します。「合計は」「円です。」以外はすべて半角で入力します。

book1 = 1200
book2 = 1400
postage = 500

product_sum = book1 + book2
total_sum = product_sum + postage

message = "合計は" + str(total_sum) + "円です。"
print(message)

上書き保存したら、前回の方法でコマンドラインから実行します。

合計は3100円です。

と表示されれば成功です。

変数はデータに名前をつけたもの

コードの中の「book1」、「book2」、「postage」、「product_sum」、「total_sum」、「message」はすべて変数です。変数はデータに名前をつけたものです。コードの意図が分かりやすくなります。

単に合計を出力するだけでしたら、

message = "合計は" + str(1200 + 1400 + 500) + "円です。"
print(message)

と書いても同じ結果になります。ただこの場合、1200や1400の数字の意味がわかりません。コードは短くなったのですが、コードの意図がわかりにくいです。

変数名でつかえる文字

変数名は任意の名前がつけられます。下記の文字がつかえます。

  • アルファベット(aからz、AからZ)
  • 数字(0から9まで)
  • アンダースコア(_)
  • 漢字・ひらがな・カタカナ
  • ギリシャ文字

変数名の先頭に数字はつけられません。
大文字と小文字は区別されます。

アンダースコアから始まる変数は特別な用途に使われるのが決まっているので、アンダースコアから始まる変数は避けます。

長い名前をつける場合は「total_sum」のようにアンダースコアで区切るのがPythonの慣例です。

また以下の名前は予約語なので、変数名として使うことはできません。

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

変数にデータを代入する

book1 = 1200

=の左側に変数名、右側にデータを書くことで、変数にデータが代入されます。=は代入演算子とよばれます。コードを見やすくするために、=の前後は半角スペースをいれます。

データ型

プログラミングでは様々な種類のデータを扱います。
たとえば1200は整数型です。データ型はtype()関数で調べられます。

1回目の講座でつかった対話実行モードでデータ型を調べてみましょう。
コマンドライン(Windowsではコマンドプロンプト、Macではターミナル)に「python」(Macの方は「python3」)と入力して[Enter]キーをおします。「>>>」が表示され対話実行モードにかわります。

type(1200)と入力し、[Enter]キーをおすと、<class 'int'>が表示されます。

>>> type(1200)
<class 'int'>

classデータ型のことで、intは整数を意味します。

同様にtype("合計は")と入力し、[Enter]キーをおすと、<class 'str'>が表示されます。

>>> type("合計は")
<class 'str'>

strは文字列型です。

このようにデータは内部でデータ型という情報をもっています。1200と”1200″ではまったく違うデータになります

1200 + 1200と入力し、[Enter]キーをおすと、2400が表示されます。

>>> 1200 + 1200
2400

ところが、1200 + "1200"と入力し、[Enter]キーをおすと、TypeErrorが表示されます。

>>> 1200 + "1200"
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unsupported operand type(s) for +: 'int' and 'str'

operandとは、演算の対象になるものを指します。今回だと1200や”1200″を指します。データ型が違うものを計算するとエラーがでる場合があります。

スポンサーリンク

データ型の種類

Pythonの基本的なデータ型には以下のものがあります。

  • 整数(int型、525のように小数点がない数)
  • 浮動小数点数(float型、1.25や1e8のような指数表現)
  • 文字列(str型、文字が並んだもの、シングルクォート(”)かダブルクォート(””)で文字を囲む)
  • ブール値(bool型、TrueもしくはFlaseの値の2つだけをもつ)

実際に、対話実行モードで確認してみましょう。

>>> type(False)
<class 'bool'>
>>> type(13)
<class 'int'>
>>> type(13.1)
<class 'float'>
>>> type("こんにちは")
<class 'str'>
>>> type(True)
<class 'bool'>

いまの段階ではデータにはさまざまな種類があるんだなと、おおまかにおさえておけば十分です。

対話実行モードの終了

quit()

と入力して、[Enter]キーを押して、対話実行モードが終了しておきます。

データ型の変換

今回のコードのポイント箇所は

message = "合計は" + str(total_sum) + "円です。"

です。+は文字列と文字列を連結できる演算子です。

エラーメッセージはしっかり読もう

コードを下記のように書いて実行すると、

message = "合計は" + total_sum + "円です。"

下記のようなエラーがでます。

Traceback (most recent call last):
  File "book_cart.py", line 9, in 
    message = "合計は" + total_sum + "円です。"
TypeError: Can't convert 'int' object to str implicitly

int型のオブジェクトを、str型に暗黙に変換できませんというメッセージです
エラーがでた場合、英語ですが、複雑な文章でなく単語を調べれば意味はわかります。エラーを読む習慣をつけておきましょう

message = "合計は" + str(total_sum) + "円です。"

str関数を使って、int型であるtotal_sumをstr型に変換しています。

データ型は暗黙で変換される場合もある

int型は暗黙でstr型に変換できなかったのですが、以下のように暗黙に型変換して計算できる場合があります。
対話実行モードで確認してみましょう。

>>> True + 2
3

Trueはbool型ですが、整数と計算すると1というint型に暗黙に変換され、エラーなしで計算できます。同様に

>>> False + 2
2

Falseは整数と整数と計算すると0というint型に暗黙に変換されます。

ただし

>>> False + "こんにちは"
Traceback (most recent call last):
  File "", line 1, in 
TypeError: unsupported operand type(s) for +: 'bool' and 'str'

bool型とstr型は暗黙に計算ができません。

+演算子

+演算子は、演算子の左右が整数や浮動小数点数だと足し算に、文字列型だと文字の連結になる演算子です。

>>> 2 + 2
4
>>> 2.2 + 2.2
4.4
>>> "2" + "2"
'22'

整数型と文字列型の計算はできません。

>>> "2" + 2
Traceback (most recent call last):
  File "", line 1, in 
TypeError: Can't convert 'int' object to str implicitly

整数型と浮動小数点数型の計算は、整数型が浮動小数点数型に変換されて、計算されます。

>>> num = 2 + 2.2
>>> type(num)
<class 'float'>

このあたりは覚えていくとキリがないので、その都度気になったコードを対話実行モードで確認していくとよいでしょう。

浮動小数点数の計算の落とし穴

細かい知識ですが、

0.1 + 0.1

は「0.2」と計算されます。
ところが

0.1 + 0.2

「0.30000000000000004」と表示されます。
浮動小数点数の計算はこのように誤差がでる場合があります。これはPythonの問題だけでなく、コンピューターが内部で数字を2進数で表すということからおこる問題です。他の言語でも同様の誤差の問題がおこります。

合計金額の処理

冒頭で書いたコードで

product_sum = book1 + book2
total_sum = product_sum + postage

いきなり合計金額をださずに、まずbook1とbook2を計算して商品だけの合計額をだしてから、postage(送料)を足して、total_sum変数に代入しています。これは商品だけの合計額が表示できるように配慮しています。

スポンサーリンク

関連記事

プロフィール

DESIGNMAP
ディレクター
ON VISITINGを制作・運営。
マジックカテゴリーはhttp://tejina.designmap.info/に移しました。
お問い合わせ