< 前の記事 | | | Web講座TOP | | | 次の記事 > |
初心者向け Python講座 - 第2回「いろいろな数の書き方」
投稿者:3G 大毛
どんなプログラムも、まずは数の書き方を知らなければ作ることができないでしょう。今回はPythonで使える数について勉強していきます。この講座ではまだ数学を勉強していない小中学生にも分かるように解説を心がけています。最初は地味なことや当たり前のことが続くかもしれませんが辛抱してください。後でかならず役に立つ時が来ます!
整数の書き方
1, 2, 3, 4, 5,・・・という数を正の整数といいます。Pythonではいくらでも大きな整数を書いてOKです!ただし実際には、あるところでコンピュータの記憶容量(メモリ)の限界を超えてしまいエラーとなるでしょう・・・(私は試したことはありません)。
正の整数の前に「-」をつけた、-1, -2, -3, -4, -5,・・・という数を負の整数といいます。負の数は大小が逆になります。なので大きい数にマイナスをつけるほど小さくなるわけですが・・・Pythonではどんなに小さな整数を書いてもOKです!
これ以外に0という整数があります。もちろん0もPythonで書けます。
Pythonではこれら整数のことをint型という名前で呼びます。intとは、整数を意味するintegerの略です。Colabでノートブックを開き、新しいセルに「type(1)」と入力して実行してみましょう。すぐ下に出力として「int」と出てきたはずです。1はint型であることが分かります。
これからこの講座ではいろいろな数やデータの書き方を勉強していきますが、それらにはデータの種類を表す「型」(type)というものが決まっています。例えば「abc」というデータの型を調べたいときは「type(abc)」と入力すれば表示されます。その都度試してみると勉強になるでしょう。
いろいろな数が書けて便利なPythonですが、やってはいけない整数の書き方があります。それは0以外の整数のはじめに0を書いてはいけないということです。例えば3のつもりで「03」とか「0003」と書くとエラーとなってしまうので注意しましょう。
それからPythonのルールとしては問題ないけれども、バグ(プログラムの不具合のこと)を生む原因になったり、読みづらかったりするので書いてはいけない書き方があります。例えば、次のように書いたとします。これらはいったい何を表しているでしょうか?
++1
+(+1)
-(+-1)
-(--(-1))
((((1))))
-+-++((+---(---+(+-+(+-1)))))
実はこれらはすべて1になります。一行ずつ入力して実行してみるとPythonはいかにも涼しげな顔で「これは1です」と言うかもしれませんが、決して整数の1を表すためにこのように書いてはいけません!(これらの式がなぜ1になるかは今わからなくても問題ありません。)
演算子とは
足し算の+記号は「5+3」のように、2つの数「5」と「3」を引き受けて計算し、1つの数「8」を返します。負の整数につける-記号は「-4」のように、1つの数「4」を引き受けて計算し(計算と言っても正と負を入れ替えるだけ!)、1つの数「-4」を返します。このように、いくつかの数を引き受けて、いくつかの数を返す記号のことを演算子といいます。
演算子が引き受けるものは入力といいます。返すものは出力と言います。入力や出力は数でなくてもよく、いろいろな種類のデータの場合もあります。
入力の個数が2個なら2項演算子といいます。足し算の+、引き算の-、掛け算の*は2項演算子です。負の数につける-記号のように、入力の個数が1個の場合は単項演算子と言います。Pythonにはこの他に3項演算子というものもあります。
四則演算(足し算・引き算・掛け算・割り算)の書き方
さて、3+2-1-2+3-1はいくつになるでしょうか?
答えは4ですね。どこから計算しましたか?
左端から順に計算した人はPythonと同じです!Pythonはこの式を((((3+2)-1)-2)+3)-1と解釈して計算します。
左から計算する演算子を左結合の演算子といいます。足し算や引き算などPythonの多くの演算子は左結合です。右から計算する演算子は右結合の演算子といいます。
それでは、3+2*1*2+3*1はいくつになるでしょうか?(*は掛け算です)
答えは10ですね。今度はどこから計算しましたか?
掛け算から計算した人はPythonと同じです!掛け算も左結合の2項演算子ですが、足し算・引き算よりも優先度が高く設定されています。なのでPythonはこの式を(3+((2*1)*2))+(3*1)と解釈して計算します。
ちなみに足し算と引き算は同じ優先度なので、混ざっても区別なく左から順に計算されます。
Pythonには割り算もあります。14を3で割ったときの商は14//3と書き、余りは14%3と書きます。どちらも出力は小数ではなく整数になります。優先度は掛け算と同じです。
0で割るとどうなるでしょうか?0で割ると「ゼロ除算」というエラーになります!つまり、14//0や14%0と書いてはいけませんので注意しましょう。
◆ 高校生以上の皆さんへ ◆
「負の数の商と余り」
Pythonは負の数の商や余りも計算してくれます。例えば-5を3で割った商は-2、余りは1になります(-5=3*(-2)+1だからです)。余りは-2が正しいのではないかと思う人がいるかもしれません。実は「1余る」のは「2不足する」のと同じことなので「-2余る」と言っても正しいのです。一般に、nで割った余りというのはnを足したり引いたりしても同じ情報を表しています(このことを「nを法として合同」あるいは「mod nで合同」と言います)。とはいえ「3で割った余り4」とか「3で割った余り-5」というのは不親切なので普通言いません。Pythonでは(nが正なら)nで割った余りは常に0からn-1までの整数で表すことになっています。つまり、3で割った余りは常に0か1か2で表すということです。C言語など、Python以外の言語ではそうでないことがあります。
単項演算子の+、-
Pythonでは1のことを+1と書いてもよいことになっています。+1や-1と書いた時の+と-のことを、足し算の+や引き算の-と区別するために「単項演算子の+」「単項演算子の-」と呼びましょう。単項演算子の-は正と負を逆にする効果があります。単項演算子の+は何もしません!特別な理由がない限り単項演算子の+は自分では使わないようにしましょう。
小数の書き方
Pythonでは12.317や0.0546のような小数をfloat型という名前で扱います。floatとは、浮動小数点数を意味するfloating point numberの略です。浮動小数点数については後で説明します。コードセルに「type(12.317)」と入力して実行すると「float」と出力されるのを確認しましょう。
整数もfloat型で扱いたいときがあります。ちょうど1に等しい小数はどのように書いたらよいでしょうか?
簡単ですね。1.0や1.000と書けばちょうど1に等しいfloat型になります。type(1.0)と入力して型を確認してみましょう。
実はPythonでは小数点以下の0を省略して1.と書くこともできます。よく見かけるので覚えておきましょう。
同じように、ちょうど0.01に等しいfloat型は、最初の0を省略して.01と書くことができます。このような書き方を見かけて混乱しないようにしましょう。
float型の足し算・引き算・掛け算はint型の時と同じように書きます。例えば、0.3+1.2、0.3-1.2、0.3*1.2の計算結果は1.5、 -0.9、0.36となります。
おや?0.3-1.2は-0.9ではなく-0.8999999999999999となりました。ほとんど合っていますが少し違うような気がします。実はコンピュータの小数の計算ではこのような誤差が出ることがよくあります。(コンピュータは2進法で動いており、10進法の小数は正確には理解できないからです。)
0.3+0.7や0.5*2のようにどちらか少なくとも一方がfloat型の時はfloat型で計算します。ですから0.3+0.7や0.5*2の結果は整数の1ではなく小数の1.0です。
答えが小数になる割り算はまだ出てきていませんでした。例えば13÷3は「13/3」と書きます。結果は「4.333333333333333」という小数になります。
「12/3」と入力すると、結果は整数の4ではなく小数の4.0になります。12と3はint型として書きましたが「/」があることで自動的にfloat型に変換されるからです。
整数の4を求めたいときは12//3と書くのでしたね。
小数の割り算は整数の割り算同様、0で割るとゼロ除算エラーになります。
◆ 高校生以上の皆さんへ ◆
「実数とは」
小数と似ていて混乱しそうな言葉に実数があります。実数とは小数で書ける数のことです。ただし整数も小数点以下がすべて0の特殊な小数として含めますし、円周率 π=3.1415926535897・・・のような無限に続く小数も含めます。ですから小数は実数の表記法の1つと考えるのが正確です。なお実数という言葉は、虚数と対立する言葉として作り出されました。虚数とは実数でない複素数のことです。
べき乗(累乗)の書き方
23や3-2のようなべき乗(累乗)の数はPythonでは2**3や3**(-2)と書きます。23は2を3回かける計算なので8になります。3-2は1を3で2回割る計算なので0.1111111111111111となります。右肩の数が0以上なら出力は整数、0未満なら小数になります。なお0乗はいつも1になります。例えば、100は1です。
■ 小中学生の皆さんへ ■
「累乗、べき乗」
2を3回かけた数を23と書きます。これは累乗(るいじょう)といって「にのさんじょう」と読みます。少し訓練しましょう。5に10を3回かけると5000になります。ですから5000は5×103と書けます。
ところで、わり算はかけ算の逆の計算のようなものです。2で1回わるのは、2を-1回かけるのと同じです。5を10で2回わると0.05になりますね。つまり5に10を-2回かけると0.05になります。ですから0.05は5×10-2と書けます。10-2は「じゅうのまいなすにじょう」と読みます。
23のような累乗や、右肩に負の整数が乗った3-2のような数を合わせて「べき乗(べきじょう)」と言います。
● コラム ●
べき乗の記号**はPythonで唯一の右結合の演算子です。例えば2**3**4は2**(3**4)のように右から計算します。Pythonではべき乗の演算子以外はすべて左結合と覚えましょう。
小数の指数表記
56420や0.00123はべき乗を使って、5.642×104や1.23×10-3とも書けます。これを小数の指数表記といいます。Pythonでは5.642×104や1.23×10-3を5.642e4や1.23e-3と書くことができます。ただし、整数を指数表記するとint型からfloat型に変わってしまうので注意しましょう。
5.642e4は5.642e+4と書いても同じです。
指数表記は1通りではありません。5.642e4は0.5642e5とも56.42e3とも書けます。
指数とはべき乗の右肩の数のことです。5.642e4の表記でいうとeの後にある数(4のこと)です。eの前にある数(5.642のこと)は仮数と言います。小数をコンピュータのデータとして実現するときに、指数と仮数、それから符号(+か-か)という3つの情報に分けて表現される数を浮動小数点数と言います。
float型はfloating point numberの名の通り浮動小数点数です。ですから実はPythonでは小数は、指数表記で書いても書かなくても、データとしては指数表記のように指数、仮数、符号の3つに分けられて保存されています。
浮動小数点数は小数点の位置が揺れ動くという意味でそう呼ばれています。小数をそのまま保存する場合は固定小数点数と言います。
● コラム ●
「Pythonが扱えるfloat型の最大値・最小値」
小数は整数とは違いいくらでも大きな数字を書いてもよいというわけではありません。
最大値は1.7976931348623157e308、正の最小値は2.2250738585072014e-308です。
負の最小値は最大値に-をつけた数です。
import sys
sys.float_info
と入力すると確認することができます。
複素数型
◆ 複素数のことを知っている皆さんへ ◆
「複素数型」
Pythonには全部で3つの数値型(数を表す型)があります。整数型(int型)、浮動小数点数型(float型)、複素数型(complex型)です。虚数単位(2乗すると-1になる数)は普通iと書くことが多いですが、Pythonではjと書きます。例えば複素数-1+2.5iは-1.+2.5jと書きます。実部と虚部(ここでは-1と2.5のこと)は整数・小数どちらで書いてもfloat型に変換されます。複素数型は行列の固有値の計算などで見かけることがあるかもしれません。
< 前の記事 | | | Web講座TOP | | | 次の記事 > |