Python基礎講座(4 数値型・文字列型)

# 変数

プログラミング未経験者の人に「変数」を説明すると、文字通り”変わる値”を格納するための「箱」です。

**変数名 = 値**

で変数を作成することが出来ます。

**var1 = 1
var1 = var1 + 1**

変数には定数(数値、文字列)だけでなく、変数の値を格納することを可能です。
この場合最終的にvar1の値は2になります。
変数という名前ですが、変わらない値(定数)も格納することが出来ます。
（一度値を格納した後、変更しなければそれは定数といえます）

`TAX = 0.08`

Pythonでは、定数を作成した場合は変数の名前を大文字にする共通ルールがあります。
大文字にしなくてもプログラムは動作しますが、他の人があなたのプログラムを見た時に、
「この変数は定数なのだな」とすぐに分かるよう共通ルールに従いましょう。
また、Pythonは変数名の大文字と小文字を区別します。"tax"と"TAX"は別の変数となることに注意してください。

変数には数値や文字列、それらのリストなど、様々な形のデータを格納することが出来ます。
Pythonは他のプログラミング言語であるC言語やJavaと異なり、変数を宣言する際に、
[データの型](http://e-words.jp/w/E38387E383BCE382BFE59E8B.html)を明記する必要がありません。

◆C言語の場合
**[int](http://e-words.jp/w/intE59E8B.html) a
a = 1**

◆Javaの場合
**[double](http://e-words.jp/w/E5808DE7B2BEE5BAA6E6B5AEE58B95E5B08FE695B0E782B9E695B0E59E8B.html) b
b = 3.14
[String](http://e-words.jp/w/E69687E5AD97E58897E59E8B.html) c
c = "text"**
 
◆Pythonの場合
**a = 1
b = 3.14
c = "text"**

Pythonは変数の型が数値なのか、文字列なのかを自動で判定します([動的型付け](http://e-words.jp/w/E38387E383BCE382BFE59E8B.html))。

次に、Pythonの基本的なデータ型である数値型と文字列型を紹介します。

## 数値型

**a = 1
b = 3.14
c = 2 \+ 3j**

整数、小数、複素数が使用可能です。
数値型のデータの算術演算は電卓の +, -, \*, /, %(剰余)が使用可能です。
"//"を使用することで、小数以下を切り捨てた除算が可能です。
"**"を使用することで、数字のN乗を結果として返します。
 
```py3:display_number.py
print(1 + 2.5)
print(5 / 2)
print(5 // 2)
print(5 % 2)
print(3**2)
```
実行すると以下のような結果が出力されます。

**3.5
2.5
2
1
9**

## 文字列型
文字列型は" "または' 'で括った文字を格納します。

 **text  = "this is string"
 text2 = '1'**

text2は数値の1ではなく文字の'1'であることに注意してください。

"""または'''で括ると、改行を含む文字列を変数に格納できます。

**text3 = """1行目
             2行目"""**

## シーケンス
シーケンスとは「順番に並んでいるもの。順番に処理をすること」という意味があります。
リスト（次の章で説明します）は典型的なシーケンスですが、Pythonでは文字列型も「文字」のシーケンスとして扱われます。
Pythonではシーケンスのデータに対して共通した処理を行うことが出来、
文字列型のデータにもその操作を行うことが出来ます。
以下のプログラムを記述して実行し、出力結果を確認してください。

```py3:string_func.py
text1 = "abc"
a_in_text = "a" in text1
b_in_text = "d" in text1
print("in_text_a {0}".format(a_in_text))
print("in_text_d {0}".format(b_in_text))
text2 = "abc" + "def"
print("abc + def {0}".format(text2))
print("abc * 3 {0}".format("abc" * 3))
print("text2[3] {0}".format(text2[3]))
print("text2[-1] {0}".format(text2[-1]))
print("text2[1:4] {0}".format(text2[1:4]))
print("text2[0:6:2] {0}".format(text2[0:6:2]))
print("len(text2) {0}".format(len(text2)))
print("min(text2) {0}".format(min(text2)))
print("max(text2) {0}".format(max(text2)))
```

### a in xxx 

文字aが文字列型変数xxxに含まれるか判定します。
含まれる場合はTrue(真)、含まれない場合はFalse(偽)を返します。

### str1 + str2

文字列を結合します。
注意して欲しいのは、数値も" "または' 'で括れば文字列になるということです。

**10 + 20**

は30を返し、

**"10" + '20'**

は"1020"を返します。それでは、

**10 + "20"**

は何を返すのでしょうか？実験してみましょう。

**TypeError: unsupported operand type(s) for +: 'int' and 'str'**

このようなエラーメッセージが表示されます。
数値型と文字列型を+で結合することは出来ません。
数値を文字列に、文字列を数値に変換したい場合、以下のように記述します。

```py3:convert_explain.py
str1 = str(10) + '20'
int1 = 10 + int("20")
print("{0}".format(str1))
print("{0}".format(int1))
```

str(数値)で数値型の値を文字列型の値に変換できます。
同様に、int(文字列)で数値型に変換できる文字列型の値を数値型の値に変換できます。
"abc"など数値に変換できない文字列をint()で変換しようとした場合はエラーが発生します。

### str * x

数値型に対しては乗算を行う「*」ですが、文字列型に対しては「その文字列をx回繰り返す」
という処理を実行します。

### str[x]
文字列strのx番目の文字を返します。
このxは0番目から始まる点に注意してください。
xがマイナスの場合は最後尾からx番目の文字を返します。

### str[x:y]
文字列strのx番目から**y-1**番目の文字列を返します。

### str[x:y:z]
文字列strのx番目から**y-1**番目の文字列を、z文字間隔で返します。

### len(str)
文字列strの文字列長を返します。

### min(str) / max(str)
min(str)は、文字列strを構成する文字の中から最小の文字を返します。
文字列が"54321"の場合は"1"を、"abcde"の場合は"a"を返します。

max(str)は、文字列strを構成する文字の中から最大の文字を返します。
文字列が"54321"の場合は"5"を、"abcde"の場合は"e"を返します。

数値や文字列が混合している場合は、以下の順序の中で最大/最小を判定します。
＜小＞ 0 1 2 ・・・ 8 9 A B ・・・Y Z a b ・・・y z ＜大＞

次: [Python基礎講座(5 リスト・タプル)](http://qiita.com/Usek/items/65a3df2be7bd0a2b4189)