pythonにはいろいろな型があります。型とは値の種類のことです
この章では、最も基本的な型である数値、文字列について説明をします
数値について
「123」や「456」のような小数部がない数値を整数といいます
一方、「1.23」や「4.56」のように小数部分がある数値を浮動小数点数といいます
Pythonの数値の型には、整数を表すint型と浮動小数点数を表すfloat型があります
下記のサンプルプログラムでは、変数の型を確認しています
Pythonで型を確認するにはtype()関数を使用します
※関数とは数学の関数と同様、「ある値を渡すと処理を行いある値を返す」という動きをするもので、名前をつけて使用できるようにしたものです
num = 123
print(type(num))
val = 1.23
print(type(val))
実行結果
<class 'int'>
<class 'float'>
上記プログラムを実行すると、numはint型、valはfloat型と表示されていることがわかります
ここでclassと書かれていますが、こちらについても後の章で説明します
また、int型とfloat型は相互に型を変換することもできます
int()関数を使用することでint型に変換し、float()関数を使用することで、float型に変換することができます
以下のサンプルプログラムは、float()関数を使用し、int型をfloat型に変換しています
val = 123
val = float(val)
print(val)
print(type(val))
実行結果
123.0
<class 'float'>
一方、整数に変換するサンプルプログラムを以下に示します
val = 123.1
num = int(val)
print(num)
print(type(num))
val = float(num)
print(val)
print(type(val))
実行結果
123
<class 'int'>
123.0
<class 'float'>
float型をint型に変換する場合、小数点以下は切り捨てられることに注意してください
【演習問題】
1.変数aとbに5,2を代入し、a÷bの値を計算後、変数cに代入し変数cの型を確認してみてください
実行結果
2.5
<class 'float'>
2.変数aとbに5,2を代入し、aをbで割った余り値を計算後、変数dに代入し変数dの型を確認してみてください
実行結果
1
<class 'int'>
文字列について
文字列とはダブルクォーテーション(”)またはシングルコーテーション(’)で囲まれた文字列のことです
Pythonでは文字列を扱うためのstr型が存在します
型および型変換
下記のように文字列を用意し型を確認してみます
val="Hello"
print(type(val))
実行結果
<class 'str'>
str型ということがわかります
文字列を数値に、数値を文字列に変更することもできます
数値を文字列に変更するには、str()関数を使用します
文字列を数値に変更するには、int()関数を使用します
num = 123
val = str(num)
print(val)
print(type(val))
num = int(val)
print(num)
print(type(num))
実行結果
123
<class 'str'>
123
<class 'int'>
print(val)を実行した結果は数値のときと見た目は変わりませんが、type()関数を通すと文字列に変換されていることがわかります
一方、int(val)を実行後のnumがint型に変換されていることがわかります
インデックスを使って文字を取り出す
文字列は複数の文字を並べたものであり、それぞれの文字に対応したインデックス(番号)を持っています
以下の図は文字列内の文字とインデックスの対応関係です
先頭の文字のインデックスは整数の0に対応し、1,2,3と1つずつ増加します
末尾の文字は「文字数ー1」のインデックスに対応します
インデックスには負の数も使えます
末尾の文字がインデックスのー1に対応し、ー2,-3,-4と1ずつ減少します
先頭の文字は「ー文字数」のインデックスに対応します
それぞれのインデックスの値を取り出すには、文字列[インデックス番号]と記述します
文字列の0番目、1番目の値を取り出すには、以下のように記述します
val = "abcdefghij"
print(val[0])
print(val[1])
実行結果
a
b
下記のように文字列内の文字を変更しようとするとエラーになります
val = "abcdefghij"
print(val[0])
print(val[1])
val[2]='z'
このように文字列の一部を変更することはできません
【演習問題】
1.”Hello,World”という文字列を用意し、インデックスが0~4まで取り出して表示してみましょう
実行結果
H
e
l
l
o
2.”Hello,World”という文字列を用意し、インデックスを利用して、カンマ(,)だけを取り出してみましょう
実行結果
,
3.”1,2,3″という文字列を用意し、インデックスを利用して1,2,3を取り出し、3つの値を足し算した値を表示してみましょう
実行結果
6
スライスによる部分文字列の切り出し
スライスという、複数の整数を使って要素の範囲を指定する機能を使用して文字列の一部を切り出すこともできます
スライスにはいくつかの機能があります
1.文字列の一部を取り出す
文字列[開始インデックス:終了インデックス]
このように記述すると開始インデックスから終了インデックス-1の要素までを取り出します
終了インデックスに対応する要素は取り出されませんので注意してください
val = "abcdefghij"
print(val[2:5])
実行結果
cde
インデックス2から4までの要素が取り出されます
2.先頭から終了インデックスまでを指定
文字列[:終了インデックス]
このように記述すると先頭から終了インデックス-1の要素までを取り出します
val = "abcdefghij"
print(val[:5])
実行結果
abcde
3.開始インデックスから末尾までを指定
文字列[開始インデックス:]
このように記述すると開始インデックスから末尾までを取り出します
val = "abcdefghij"
print(val[3:])
実行結果
defghij
4.インデックスに負の値を指定
先の図の負数インデックスの値を参照し、以下のように取り出すことができます
print(val[-1])
print(val[-2])
print(val[-2:-1])
print(val[-7:-4])
print(val[-10:])
実行結果
j
i
i
def
abcdefghij
5.インデックスの範囲外を指定
以下のサンプルプログラムのようにインデックスの範囲外の値を指定した場合エラーになります
print(val[-11])
print(val[10])
【演習問題】
1.”Hello,World”という文字列を用意し、スライスを利用して”Hello”と”World”をそれぞれ取り出して表示してみましょう
実行結果
Hello
World
2.”1234567890″という文字列を用意しスライスを利用して”90″だけを取り出してみましょう
実行結果
90
<class 'str'>
文字列同士の演算
1.文字列の連結は+演算子を使用します
文字列 + 文字列
たとえば、”abc”と”xyz”を連結する場合以下のように記述します
print("abc" + "xyz")
実行結果
abcxyz
変数を使って以下のようにも記述できます
str1="abc"
str2="def"
str3=str1+str2
print(str3)
実行結果
abcdef
2.同じ文字を繰り返し連結する場合*演算子を使用します
文字列*整数
整数*文字列
上記のように記述します
以下に*演算子を使用したサンプルプログラムを示します
str1 = "abc"
x = str1*3
print(x)
x = "="*10
print(x)
print(10*"-")
実行結果
abcabcabc
==========
----------
【演習問題】
1.変数sに”Hello,World”という文字列を代入し、”Hello World”と表示してみましょう
実行結果
Hello World
2.変数numに整数5を代入後、変数numを利用して「num = 5」と表示してみましょう
実行結果
num = 5
<class 'str'>
3.「-+-」という文字列を用意し、10回繰り返して下記の実行結果になるように表示してみましょう
実行結果
-+--+--+--+--+--+--+--+--+--+-
文字列の便利なメソッド(関数)
文字列を扱う際に便利な関数がいくつか存在します。ここでは、便利な関数をいくつか紹介します
1.文字列の長さを取得する
n = len(文字列)
上記のように記述することで、文字列の長さを取得することができます
文字列の長さを取得するサンプルプログラムは、以下の通りです
s = "abcdefghij"
n = len(s)
print(n)
実行結果
10
2.文字列の中から特定の文字を検索する
(1) index()
n = 文字列.index(検索文字列)
上記のように記述することで、文字列の中の検索文字列のインデックスを取得できます
s = "abcdefghij"
v = s.index("d")
print(v)
実行結果
3
しかし存在しない検索文字列を指定した場合、エラーが発生します
s = "abcdefghij"
v = s.index("9")
(2) find()
n = 文字列.find(検索文字列)
上記のように記述することで、文字列の中の検索文字列のインデックスを取得できます
index()との違いは、検索した文字列が見つからない場合の挙動です
find()の場合は、見つからない場合-1を返します
以下に、find()を利用したサンプルプログラムを示します
s = "abcdefghij"
n1 = s.find("d")
print(n1)
n2 = s.find("9")
print(n2)
実行結果
3
-1
index()では、ValueErrorが発生していましたが、find()は-1を返しています
戻り値を使用したい場合はfind()、ValueErrorを利用したい場合はindex()を利用するように使い分けをします
※ValueErrorは例外処理で使用します。例外処理については応用編で説明します
3.文字列の一部を置き換える
新しい文字列 = 文字列.replace("旧文字列","置き換え文字列")
新しい文字列 = 文字列.replace("旧文字列","置き換え文字列",個数)
上記のように記述することで、文字列に含まれているすべての「旧文字列」が「置き換え文字列」に置換した新しい文字列を返します
第3引数の個数を与えると、置き換える上限の数を指定することができます
s = "turn on"
s1 = s.replace("on","off")
print(s1)
実行結果
turn off
置換の個数を指定した場合、先頭から指定した個数分だけ置換されます
s = "123a456a789a"
s1 = s.replace("a","/",2)
print(s1)
実行結果
123/456/789a
また、以下のサンプルプログラムのような使用をすることもできます
s = "123a456a789a"
s1 = s.replace("a","/",2).replace("a","!")
print(s1)
実行結果
123/456/789!
まず、replace(“a”,”/”,2)が実行され、その結果の文字列についてreplace(“a”,”!”)が実行されます
4. 大文字、小文字に置き換える
文字列を大文字にするupper()関数と小文字にするlower()関数があります
新しい文字列 = 文字列.upper() # 大文字に変換
新しい文字列 = 文字列.lower() # 小文字に変換
上記のように記述することで、文字列がすべて大文字または小文字にした新しい文字列を返します。
str1 = "Python"
upper_str = str1.upper()
lower_str = str1.lower()
print("upper="+upper_str)
print("lower="+lower_str)
実行結果
upper=PYTHON
lower=python
【演習問題】
1.文字列”こんにちは”の長さを表示してみましょう
実行結果
5
2.文字列”こんにちは”に含まれる “は” のインデックス番号を表示してみましょう
実行結果
4
3.文字列”こんにちは” の “は” を “にゃ” に変更してみましょう
実行結果
こんにちにゃ
4.文字列”1,200m”を整数1200に変更してみましょう
実行結果
1200
<class 'int'>
特殊文字の扱い
文字列の中で、改行やタブ、シングルコーテーションやダブルクォーテーションなどの特殊な文字を記述したい場合は、エスケープシーケンスを使って記述します
エスケープシーケンスで表す場合、円記号(またはバックスラッシュ)の組み合わせで表します
以下は、よく使用するエスケープシーケンスの一覧です
エスケープシーケンス | 意味 |
\\ | 円記号またはバックスラッシュ |
\n | 改行 |
\’ | シングルコーテーション |
\” | ダブルクォーテーション |
\t | タブ |
以下にそれぞれのエスケープシーケンスを使ったサンプルプログラムを示します
print('\\')
print('\\\\')
print("123\n456")
print("\'123\'")
print("\"123\"")
print("\t123")
実行結果
\
\\
123
456
'123'
"123"
123
【演習問題】
以下の文字列が表示されるようにプログラムを書いてみましょう
I used Tom's pen.
Thank you.
I'll give it back.
コメント