変数、名前、オブジェクトについて

Bookmark this on Google Bookmarks
Pocket

pythonでは、ブール値、整数、浮動小点数、文字列、関数、プログラムなどの全てがオブジェクトとして実装されています。
オブジェクトとはなんぞやという前に、こいつのおかげで、他の言語にはないような一貫性を持っているのがPythonです。

オブジェクトについて

オブジェクトとは、データを入れてある透明なプラスチックボックスのようなものだと思えば良いです。
オブジェクトにはブール値、整数などの****
データ型があり、そのデータで何ができるのかはによって決まります。
プラスチックボックスにワレモノと書かれていたら、それがどんなものなのかだいたい想像がつくのと同じようなことだと思えば良いです。
は、ボックスに入っているデータの値を変更できるかできないかも決められます。つまり、箱の中身を取り出して差し替えても良いかどうかですね。
これをミュータブル(変更可能)、イミュータブル(変更不可)と言います。
Pythonははっきりとした言語で、強く型付けされています。
これを英語で
Strong typingと言うらしいけど、強くキーボードを叩けと言う意味じゃない。

“`
a=7
print(a)
“`

“`7
“`

これはaと言う変数に7を代入したものになる。変数はただの名前ということに注意。
名前は、値そのものではなく、値の参照としての意味を持つ。
透明なボックスの表にaというラベルを貼り、中には7という数が転がっている感じ。
この箱に、bというラベルも貼りたければ、貼ることができる。
“`
a=7
b=a
print(b)
“`

“`7
“`

例えばコーディングをしている時にaってなんの型だったっけという場合は次のように確認することができる。
“`
type(a)
“`

“`class ‘int’“`

intというのは、整数値のことを指します。

変数として使えるのは次の文字列のみ

a-zの小文字

A-Zの大文字
数字の0-9
アンダースコア’_’

ハイフンは使えないので注意。
もう一つ、変数の頭に数字は使えない。あくまで、途中や終わりに付与できる。
また、FalseやNoneなどのPythonにもともと指定されている予約語にを変数として使うことはできない。

数値について

pythonには、整数や浮動小点数のサポートが組み込まれています。だから浮動小点数ってなんやねん。
浮動小点数とは、例えば1.12345とか、1.86e4です。普通の小数有りの実数だと思えばいいのね。たぶん。
数値同士を演算するための演算子は次に通りです。

“`+:加算
-:減算
*:乗算(掛け算)
/:除算(割り算)
//:整数の割り算(切り捨て)
%:剰余(余り) 例)7%3 1
**:指数 例)3**4 81
“`

基数について

整数は特別指定しない限り、10進数とみなさます。
Pythonでは、10進数以外に3種類の基数を置くことで2進数と、8進数と16進数を表現することができます。

“`0または0B=2進数
0oまたは0O=8進数
0xまたは0X=16進数
“`

“`
0b10
2
0o10
8
0x10
16
“`
と行った感じになる

型の変換

浮動小点数を整数に変換すると、小数点以下の部分が切り捨てられ、整数になります。
“`int(98.1231231)
98
“`
また、整数を整数に変換しても整数です。
“`
int(98)
98
“`
文字列は当然ながらintにできない
Pythonでは、64bit以上の数字を入力しても整数オーバーフローとならない。
Pythonでは、途方もなく大きな数字を表現できるようになった。

文字列について

文字列はシングルクオート(’)か、ダブルクオート(“)で囲んで書く。

もし複数行で書きたい場合は、このようにする

“`
”’
ほにゃららら
”’
もしくは、
"""
ほにゃらす
"""
“`

これをトリプルクォートというらしい。

ちな空文列**というものが存在する。

これは、空の文字列、つまり「なにもない」という文字列である。

“`


""

”””

""""""

“`

これはNoneとは違い、ちゃんと存在する文字列だということに注意。

##エスケープについて

Pythonでは、バックスラッシュ(\)を使うことで、特別な表現ができる。

(これは、他の言語でもよく使われている。)

たとえば、「\n」は改行を表す。

y

“`
print(‘いろはにほへと\nちりぬるを\nわかよたれそ\nつねならむ’)
いろはにほへと
ちりぬるを
わかよたれそ
つねならむ
“`

文字列の連結

文字列は+で連結させることができる。

“`
print(‘あかさたな’+’はまやらわ’)
あかさたなはまやらわ
“`

文字列は、*を使うことで繰り返し表現できる。(引き算や割り算はできないのにややこしい・・・)

“`
print(‘あかさたな’*5)
あかさたなあかさたなあかさたなあかさたなあかさたな
“`

文字列の抽出

[]を使うことで、文字列の何番目にある文字を取り出すことができる。

“`
wa=’あかさたなはまやらわ’
print(‘wa[1]’)

“`

ここで、1としたのに「か」が表示されたのに

は理由がある。Pythonでは、番号は0からカウントする。

1番目なら、0。2番目なら1といった感じ。(これがややこしい

文字列の数以上の数字を指定するとエラーになる。

文字列の置き換え

replace() を使うことで、文字列を変換することができる。

個人的にはこれが結構便利で、スクレイピング(webページから情報を抽出する作業)の時にも、いろいろと役に立つ。

“`
.replace(‘変換させたい文字列’,’変換後の文字列’)
“`

という風に使う。たとえば、

“`
wa=’あかさたなはまやらわ’
print(wa.replace(‘あか’,’きいろ’))
きいろさたなはまやらわ
“`

文字列のスライス

[start:end:step]を使うことで、文字列をどこからどこまでかつ何文字飛んでという取り出し方が可能になる。

“`
alpha=’abcdefghijklmnopqrstuvwxyz’
print(alpha[0:10])
abcdefghij
print(alpha[5:12])
fghijkl
print(alpha[:])
abcdefghijklmnopqrstuvwxyz #全部という意味になる
print(alpha[::1]) #全部一つずつ=全部
abcdefghijklmnopqrstuvwxyz
print(alpha[::2]) #1つおきに
acegikmoqsuwy
print(alpha[2:19:2]) #2つ目から18番目まで1つおき
cegikmoqs
“`

ここでん?となる。カウントは0が1番目なのに、[0:19]とした場合に18番目までしか表示されない。

これが僕の頭を悩ませている問題の一つで、[x:y]とした場合日本語に直すと、x+1番目から、y-1番目までということになる。

さらに[-x:]とか指定すれば末尾からとか指定できるんだけど、この場合〜番目がまたルール違ってくるのでお手上げ。バカな僕は多分二度と使わないでしょう。

len() による長さの取得

len() を使えば、文字列の長さ(=文字列の数)を取得することができる。

これもよく使うことになるので必須。

“`
alpha=’abcdefghijklmnopqrstuvwxyz’
print(len(alpha))
26
“`

これでa-zまでが26文字だということがわかった。

これはどんな時に便利かというと、後ででてくるリスト( list )でよく使う。

リストは簡単にいうと、リストである(意味不明

“`
alpha=[‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’]
“`
これはa-zまでを一文字ずつ格納したリストだ。
これが、たとえば適当に抽出してきたリストで、いったい幾つ要素が含まれているのかわからない時に、
“`
print(len(alpha))
26
“`

文字列の分割

split() を使うと、文字列を特定の条件にしたがって分割し、リストにすることができる。

“`
alpha=’いろはにほへと ちりぬるを わかよたれそ つねならむ’
print(alpha.split(‘ ‘))
[‘いろはにほへと’, ‘ちりぬるを’, ‘わかよたれそ’, ‘つねならむ’]
“`

ちなみに、list() を使うことでもリスト化は可能。しかし、こちらは1文字ずつがリスト化されてしまう。

“`
print(list(alpha))
[‘い’, ‘ろ’, ‘は’, ‘に’, ‘ほ’, ‘へ’, ‘と’, ‘ ‘, ‘ち’, ‘り’, ‘ぬ’, ‘る’, ‘を’, ‘ ‘, ‘わ’, ‘か’, ‘よ’, ‘た’, ‘れ’, ‘そ’, ‘ ‘, ‘つ’, ‘ね’, ‘な’, ‘ら’, ‘む’]
“`

気をつけなければならないのは、間のスペースも一つの文字として勘定されてしまうこと。

join() による結合

またこの逆にjoin() を使ってリスト化された文字列を結合することができる

“`
#こいつがまたややこしい。
alpha=’いろはにほへと ちりぬるを わかよたれそ つねならむ’
a=alpha.split(‘ ‘)
print(a)
[‘いろはにほへと’, ‘ちりぬるを’, ‘わかよたれそ’, ‘つねならむ’]
print(‘@’.join(a))
いろはにほへと@ちりぬるを@わかよたれそ@つねならむ
“`

これはつまり、”で囲まれた文字列を、リストを取っ払った間に入れて結合するぜ!という意味になる。

なので元どおりに半角スペースでいろはをなおしたければ、’ ‘.join(a)といった感じにすれば良い。

なんで逆にしたんだろうね。普通にa.join(‘文字列’)でいいじゃんかよ・・・。

という感じで、本日は終了。

練習問題

a=’abcdefghijklmnopqrstuvwxyz’
という文字列をaの変数で定義する。この文字列の間に「@」を挿入し、さらに「@」を「,」に直しなさい。

ansewer

解答

“`
print(‘@’.join(list(a)).replace("@",","))
“`
“`a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z“`