突然ですが、これを読んでいるそこのあなたに問題です。
1 1 1 1 1 1 1 1 1 11 1 1 1 1
この中で小さい1に混じって大きい1があります。
大きい1がいくつあるか3秒で教えてくれませんか?
いまディスプレイ指でなぞりながらかぞえましたよね。
めっちゃ時間かかるし効率悪いですよね。
でも次の場合はどうでしょうか。
1 1 1 1 1 1 1 ① 1 ①① 1 ① 1 ①
もう大きい1しか目に入らないですよね。
数えやすい!(ちなみに問題の答えは5です)
コンピュータも同じなんです。なのでコンピュータに
「これは”文字”として扱ってね」
とはっきりデータの種類を指示しないといけません。
これを、「データ型」「データのタイプ」と言ったりします。
コンピュータはたくさんのデータを早く処理することができますが、
そのデータがどんなデータか確認する必要があります。
データの指示が不明確だと、データの種類を確認するのに
無駄に時間がかかってしまったり、エラーになってしまいます。
「文字」なのか「数字」なのかを伝えよう
「文字」としてデータを扱って欲しい場合は シングルクォーテーション「’」
またはダブルクォーテーション「””」で文字を囲みます「”」
【例】 “Hello” 、 ‘おはよう’
「整数」または「小数」として扱って欲しい場合はシングルクォーテーションや
ダブルクォーテーションで囲まずそのまま数値を書けばOKです
【例】 1010, 10.5
プログラムで計算すると1+1 = 11になる!?
pythonの場合、次のようなプログラムを書くことができます。
1 |
print("apple" + "pen") |
このプログラムを実行すると次の結果が得られます。
1 |
applepen |
pythonでは文字と文字をプラス(+)で繋ぐと文字同士をくっつけて表示することができます。
無事アッポーペンの完成です。
それでは次のプログラムを実行するとどうなるでしょうか。
1 |
print(100 + 100) |
このプログラムを実行すると次のようになります。
1 |
200 |
簡単ですね。
100たす100は200です。
それでは次の問題はどうなるでしょうか。
1 |
print('100' + '100') |
先ほどの足し算のプログラムと似ていますが、100という数字がクォーテーションで囲まれています。
という事は「文字データだよ」とコンピューターに指示しているわけです。
このプログラムを実行すると次の結果となります。
1 |
100100 |
結果からわかる通り 100と100をグッとくっつけて100100にしています。
なぜこんな結果になるかというと、pythonは’100’を「文字列」と判断しているからです。
このように、人間ではパッと見て数値と判断できるものでも、プログラムでは「文字」なのか「数値」か
判断することができないため、プログラムを書く人がデータを指示してプログラムを書く必要があります。
データの型(タイプ)を変更したい場合
文字データ⇒数字データに変更
数字データ⇒文字データに変更
どちらも可能です。
例えば、同じ数字の100でも時には”文字”としてコンピュータに認識して欲しい場合があります。
【例】100(数字)を”100″(文字)とコンピュータに教えたい場合
1 |
str(100) |
頭にstrをつけて、数字をかっこでくくります。これで、元々の数字データを文字データに変更できます。
次に逆のパターンです。数字を文字データに変更できます!
あっ、もちろん”おはよう”などの言葉を数字に変えることはできません。
【例】”100″(文字)をコンピュータに100(数字)と教えたい場合
1 |
int("100") |
今度はintを頭につけて、文字データ(数字をダブルクォーテーションがついているので)をかっこでくくります。
これで、元々文字データだったものを、数字データに変更できます。
この処理はよく使われるので覚えておいてください。
データのタイプを間違えるとエラーになる
たとえば次のような場合です。
1 2 3 4 |
number1 = 100 number2 = 200 answer = number1 + number2 print( number1 + "足す" + number2 + "は" + answer + "です" ) |
この場合、100足す200は300ですと表示されるのが正解です。
しかし実行結果はエラーとなり、次のように表示されます。
1 2 3 4 |
Traceback (most recent call last): File "tmp.py", line 4, in <module> print(number1 + "足す" + number2 + "は" + answer + "です") TypeError: unsupported operand type(s) for +: 'int' and 'str' |
実行結果の4行目のエラーをみてください。
TypeErrorと表示され、アンサポーテッドオペランドタイプと書かれています。
つまりデータのタイプが間違っているということです。
欲しい結果は「100足す200は300です」ですが、プログラムの方の4行目で文字列と数値が足し算されているからです。
文字同士を足し算すると文字同士がくっつきますが、数値は計算が行われます。
このプログラムでは、数値と文字列が両方存在するため、
コンピューターはくっつければいいのか計算したらよいのか判断できないのです。
そこで先ほど説明した型の変更を利用して次のように書き換えます。
1 2 3 4 |
number1 = 100 number2 = 200 answer = number1 + number2 print(str(number1) + "足す" + str(number2) + "は" + str(answer) + "です") |
実行結果
1 |
100足す200は300です |
4行目の(number1)等のデータの前に全てstrがついていますね。
数値が入っている部分を全て文字列にしてあげることで希望通りの結果を得ることができました。
このようにデータの型をしっかり指示しないとエラーが出るので、
しっかりと「データのタイプ」について理解しておきましょう。