数値・文字列・変数
pythonでプログラミングしていく中で覚える必要のある知識の1つであるデータの型や数値・文字列の扱い方、変数について説明をしていきます。
データ型
pythonでのプログラミングでは変数の定義の際にデータ型の指定を行いません。
ですが、変数に代入した値に沿って型が自動的に割り当てられるので、全く知識がないとプログラムが書けません。
よく使われる基本的なデータ型は以下の通りです。
ブール型 | True または Falseの値を持つ |
整数型 | 1や10000000000000などの小数点以下がない数値 |
浮動小数点数 | 1.4142135のように小数点以下の部分がある数値。または、10e8などの指数表現 |
文字列 | "あいう"や"ABC"などの文字の並び。””(ダブルクオーテーション)や’’(シングルクォーテーション)で囲む。”123”のような書き方は文字列となる |
各データ型は、それぞれに合った使い方をしないとエラーが出てしまうので注意が必要です。
変数
pythonでは文字列や数値、関数などすべてがオブジェクトとして扱われます。
オブジェクトはデータが格納されている箱のようなイメージで、pythonでは格納したデータの合わせて型が自動的に割り当てられるため、使用する前に変数と型を定義する必要がありません。
また、pythonの特徴として変数にオブジェクトをコピーした時は、そのオブジェクトへの参照が保存されるため、変数に直接保存されないのです。
変数への代入は = を使用し,右辺に記述した参照を左辺の変数に格納します。
a = 100
b = "ABC"
c = 0.001
変数で使用できる文字は次の通りです。
- 小文字の英字(aからzまで)
- 大文字の英字(AからZまで)
- 数字(0から9まで)
- アンダースコア(_)
変数名の制約として、変数の先頭に数字を使えないので注意が必要です。
また、アンダースコアが先頭についた変数についてはpythonにおいて特別扱いとなるため使用できません。
具体例でいうと先頭と末尾にアンダースコアが2つついている名前はpythonが使う変数として予約されています。
データ型の確認
pythonで変数の型を確認するときはtype()関数を使用します。
上で書いた例の変数だと
a = 100
b = "ABC"
c = 0.001
print type(a)
print type(b)
print type(c)
>>> <class 'int'>
>>> <class 'str'>
>>> <class 'float'>
>>> <class 'float'>
このように代入した値に合わせて型が自動で割り当てられているのが確認できます。
予約語
pythonの中には予約語となっていて変数の名前に使用できないものがあり、以下の通りです。
False | True | None | and |
as | assert | break | class |
continue | def | del | finally |
if | elif | else | for |
from | global | import | in |
is | lambda | nonlocal | not |
or | pass | raise | return |
try | except | while | with |
yield |
算術演算子
pythonでは整数や浮動小数点数を算術演算子を用いて数値間で計算することができます。
以下は算術演算子の表です。
演算子 | 意味 | 例 | 結果 |
---|---|---|---|
+ | 加算 | 1 + 3 | 4 |
- | 減算 | 30 - 14 | 16 |
* | 乗算 | 6 * 8 | 48 |
/ | 浮動小数点数の除算 | 15 / 2 | 7.5 |
// | 整数の除算(切り捨て) | 15 // 2 | 7 |
% | 剰余 | 9 % 2 | 1 |
** | 指数 | 7 ** 3 | 343 |
整数
整数とは1や10000など小数点がない数値のことで、負の数値も含まれます。
python2.xでの整数型はint型とlong型がありますが、使い分けをする必要はなく、数値がint型の範囲から外れてしまうとlong型になります。
また、python3.xではlong型はなくなり、int型は任意サイズとなりlong型よりも大きな整数を扱えるようになりました。
整数は先述した算術演算子で計算ができます。
また、浮動小数点数や文字列に対して型の変換ができます。
int(97.6)
>>> 97
int("100")
>>> 100
この型の変換は””などの数値に見えないものや浮動小数点数の文字列を変換しようとすると例外が起きるので注意が必要。
浮動小数点数
浮動小数点数とは、小数点以下の値を持つ数値のことでデータ型はfloatです。
float型も型の変換できます。
float(1)
>>> 1.0
int("100.0001")
>>> 100.0001
int("1.0e4")
>>> 10000.0
float型では指数も浮動小数点数として扱えます。
計算の優先順位
pythonでは加算と減算は、乗算や除算に比べて優先順位が低い。
これは、私たちが普段計算するときも同じですね。
すべて同じと考えるのは危ないですが、少なくとも四則演算については間違えることはないでしょう。
また、( )を使用すると、( )内を先に計算します。
4 + 6 * 8
>>> 52
#乗算で6 * 8を計算した後に4に加算します
4 + (6 * 8)
#明示的に( )を使用して優先順位がすぐにわかるようにすると可読性が向上します!
基数
pythonで数値を扱う時は10進数が適用されます。
プログラムしていく中で16進数や2進数を使う機会に直面したときは3種類の基数を使って表すことができます。
- 0b または 0B → 2進数
- 0o または 0O → 8進数
- 0x または 0X → 16進数
文字列
pythonでプログラミングしていて、一番といっていいほどよく使うのが文字列です。
先ほどまで書いていた数値と比べてもそれ以上に使用する頻度が高くなることが多いです。
python3.0系からはUnicodeを標準でサポートしているので、様々な文字や記号を使うことができます。
文字列の作成
pythonの文字列は'(シングルクォーテーション)や"(ダブルクォーテーション)で文字を囲んで作成します。
a = "ABC"
b = 'DEF'
type(a)
type(b)
>>> <type 'str'>
>>> <type 'str'>
どちらの記号を使っても文字列が作成できますので、どちらを使っても大丈夫です。
同じ機能の記号が2つある理由としては、どちらかの記号を文字列として使いたいときに、その記号を文字列に入れたときに、もう片方の記号で囲むことで文字列が作成できるからです。
空文字列
文字が含まれていない空文字列も文字列を作成するときに使用した記号で作成することができる。
a = ""
b = ''
文字列への型変換
str()関数を使うことで数値などの他のデータ型を文字列に変換ができます。
str(3.14)
str(True)
文字列の連結
pythonでの文字列は+演算子を使って連結ができます。
a = "This"
b = "is"
c ="Python"
print a + b + c
>>>This is Python
[]による文字の抽出
文字列から1文字を抽出したいときは文字列が格納された変数の後に角かっこ[]で数値(オフセットしたい数値)を囲みます。
先頭の文字のオフセットは0で右にずれるにつれ1というように増えていきます。
また末尾の文字のオフセットは-1でも指定できるので長い文字列の末尾の抽出は簡単にでき、先頭にずれるごとに-2となっていきます。
letters = "abcdefghijklmnopqrstuvwxyz
letters[0]
>>>"a"
letters[10]
>>>"k"
letters[-1]
>>>"z"
文字列のスライス
スライスを使うことで文字列を部分的に取り出すができます。
スライスは、文字列の抽出と同じ要領で角かっこ[]を使用しますが、囲む値が[ start : end : step ]となります。
- start - 先頭オフセット
- end - 末尾オフセット
- step - 指定した値毎に文字列を取り出す
オフセットの考え方は文字の抽出と同じです。
letters = "abcdefghijklmnopqrstuvwxyz
letters[10:-10]
>>>"kl,mop"
letters[:15}
>>>"abcdefghijklmno"
letters[-5:]
>>>"vwxyz"
letters[3:-2:4]
>>>"dhlptx"
スライスを応用すれば、拡張子の抽出や拡張子以外の文字列の抽出も可能です。
fileName = "python.py"
fileName[-3:]
>>>".py"
fileName[:-3]
>>>"python"
末尾から拡張子の文字数分のオフセットすることで抽出ができます。
文字列の長さの取得
文字列の長さはlen()関数で取得できます。
letters = "abcdefg"
len(letters)
>>>7
empty = ""
len(empty)
0
len()関数は文字列だけでなくリストでも使用可能です。
文字列の分割
文字列の分割はsplit()関数を使います。
使い方は対象の文字列の変数に .(ドット) でsplit()をつなげて記述します。
()の中の引数はセパレータ(区切る目印を文字列で指定)または何も記述しない(またはNone)ことで、文字列を , または空白で分割します。
words = "hello world,push button,python,all over the world"
words.split(",")
>>>['hello world', 'push button', 'python', 'all over the world']
words.split()
>>>['hello', 'world,push', 'button,python,all', 'over', 'the', 'world']
split()関数は第2引数で分割の回数を指定できます。
words = "hello world,push button,python,all over the world"
words.split(",",2)/p>
>>>['hello world', 'push button', 'python,all over the world']
words.split(None,4)
>>>['hello', 'world,push', 'button,python,all', 'over', 'the world']
文字列の結合
join()関数を使うことで”文字列のリスト”を指定した文字列を各リストの間に挟みながら1つの文字列に結合できます。
記述方法は、”挟みたい文字列”.join(リスト)となります。
word_list = ["apple","book","cup","dog","egg"]
",".join(word_list)
>>>'apple,book,cup,dog,egg'