Pythonでの型の整理

今回は、データ型を確認していきます。

#文字列型
文字の表現方法。「今日の天気は？」等
pythonでは、「"(ダブルクォート)」もしくは、「'(シングルクォート)」で囲んで表現します。
エスケープ文字は、「\(バックスラッシュ)」

```py:python
msg1 = "今日の天気は？"
msg2 = '今日の天気は？'
msg3 = "\"今日の天気は？"
```

Javaでは、「"(ダブルクォート)」で囲んで表現します。
「'(シングルクォート)」で囲まれた場合は、char型でしたね。
pythonでは、文字(char)を表現する仕組みはないようです。
ちなみに、エスケープ文字は、「\(バックスラッシュ)」

```java:Java
String msg1 = "今日の天気は？";
String msg2 = "\"今日の天気は？";
char c = '今';
```
#文字列の操作
###連結
pythonで文字列を連結したい場合は、単純に「+」で文字列同士を結合します。

```py:python
a = "ひとつめ"
b = "ふたつめ"
c = a + c
print(c)  # => ひとつめふたつめ
```
また、リスト（また後日書きます。）を使用する方法もあるようです。

```
print("".join(["ひとつめ", "ふたつめ"]))  # => ひとつめふたつめ
```

```java:Java
String a = "ひとつめ";
String b = "ふたつめ";
String c = a + c;
// StringBuilderを使用する方法の方が良いです。
// StringBuilder c = new StringBuilder(a).append(b);
System.out.println(c);  // => ひとつめふたつめ
```

###文字の繰り返し
これはpythonで初めて見た文法です。
「*」を使用して文字列の繰り返しを表現できます。

```py:python
a = "１つ"
print(a * 5)  # => １つ１つ１つ１つ１つ
```

```java:Java
String a = "１つ";
// Javaでは繰り返しがないので、Streamを使用するとか、Commons langのStringUtils.repeatを使用するしかない
System.out.println(IntStream.rangeClosed(1, 5).mapToObj(i -> a).collect(Collectors.joining()));  // => １つ１つ１つ１つ１つ
```

###文字の取り出し
文字列から任意の場所の文字を取り出す機能。

```py:python
a = "ABCDEFGHIJK";
print(a[2])  # => C
```

```java:Java
String a = "ABCDEFGHIJK";
System.out.println(a.charAt(2));  // => C
```

###文字の切取り
ABCDEFGの中のCDEのみ取り出すように、文字列全体から一部分を切取ります。
pythonでは、対象の文字列[切出す文字の開始位置のインデックス:切出す文字の終了位置のインデックス -1]で切出せます。
ある文字まで切出したい場合は、対象の文字列[:切出す文字の終了位置のインデックス -1]です。
ある文字以降切出したい場合は、対象の文字列[切出す文字の開始位置のインデックス:]です。
この方法で切取れるってことは、pythonの文字列も文字のリスト形式で表現されているってことのようです。

```py:python
a = "ABCDEFGHIJK";
print(a[2:5]) # => CDE
print(a[2:])  # => CDEFGHIJK
print(a[:5])  # => ABCDE
print(a[:-1]) # => ABCDEFGHIJ
```

```java:Java
String a = "ABCDEFGHIJK";
System.out.println(a.substring(2, 5));  // => CDE
System.out.println(a.substring(2));     // => CDEFGHIJK
System.out.println(a.substring(0, 5));  // => ABCDE
// pythonのこの方法（a[:-1]）に該当する方法はわからなかった。
```
また、切出すときに何文字おきに切出すの指定する方法もあるようです。教えていただきました。
あまり使用する場面もないと思いますが、覚えておいて損はないでしょう。

```py:python
a = "ABCDEFGHIJK";
print(a[::3]) # => ADGJ
print(a[1::3]) # => BEHK
```

```java:Java
String a = "ABCDEFGHIJK";
// Javaではこんなのしか思い浮かびませんでした。
System.out.println(IntStream.range(0, a.length())
                   .filter(i -> i % 3 == 0)
                   .mapToObj(i -> String.valueOf(a.charAt(i)))
                   .collect(Collectors.joining()) ); 　// => ADGJ
```

###文字の有無判定
文字列の中にある文字列が含まれるかどうか調べるには、「in」を使用します。
また、find関数を使用しても判定できます。
ちなみに、findは引数に指定した文字列が初めに出てくる位置のインデックスを返却します。
文字列が含まれない場合は、「-1」を返却します。

```py:python
a = "ABCDEFGHIJK";
print("G" in a)         # => True
print(a.find("G") >= 0) # => True
```

```java:Java
String a = "ABCDEFGHIJK";
System.out.println(a.contains("G"));      // => true
System.out.println(a.indexOf("G") >= 0);  // => true
```

###文字列の長さ
len()関数を使用して確認します。
整数型で返却します。

```py:python
print(len("あいうえお")) # => 5
```

```java:Java
System.out.println("あいうえお".length());  // => 5
```

個人的には、Java形式の方が「あいうえおの長さは？」と日本語の文法にあっているので好きです。


#数値型
###整数型(int)
pythonの整数型は、そのまま「1」, 「2」等、数値を入力して表現します。

```py:python
num1 = 1
num2 = 2
```

```java:Java
int num1 = 1;
int num2 = 2;
```

数値同士の計算は、四則計算(+, -, *, /)、剰余計算(%)、累乗計算(**)が可能です。
注意が必要なのは、除算(/)で返却される値は、浮動小数点型になります。
除算で整数型を返したいときは、//で実施します。すると、小数点以下が切り捨てられます。

```py:python
4 + 2    # => 6
6 - 2    # => 4
4 * 2    # => 8
4 / 2    # => 2.0
4 // 2   # => 2
5 / 2    # => 2.5
5 // 2   # => 2
5 % 2    # => 1
4 ** 2   # => 16
```

ちなみにJavaでは以下のようになります。
また、Javaには、累乗を簡単に行う方法はありません。

```java:Java
4 + 2          // => 6
6 - 2          // => 4
4 * 2          // => 8
4.0 / 2.0      // => 2.0
4 / 2          // => 2
5 / 2          // => 2
5.0 / 2.0      // => 2.5
5 % 2          // => 1
Math.pow(4, 2) // => 16.0
```

###浮動小数点型(float)
少数を扱う場合に、使用します。
整数型と同じ演算子を使用できます。

#真偽値(Boolean)
True もしくは Falseのこと。
pythonでは、そのまま「True」、「False」と書きます。否定は、notを前につけます。
注意する点は、一文字目が大文字である点です。否定のnotはすべて小文字です。
また、None、数値の0、空（"", [], ()）はFalseと判定され、他はTrueと判定されます。
~~また、数値の1はTrueと判定されるので気を付けましょう。~~
bool型はint型のサブクラスで、Trueの実体は1、Falseの実体は0になっているそうです。
@shiracamus さんありがとうございます。

```py:python
print(bool(""))   # => False
print(bool("a"))  # => True
print(bool(1))    # => True
print(bool(0))    # => False
print(bool(None)) # => False
print(bool([]))   # => False
print(bool(()))   # => False
print(bool([0]))  # => True
print(not True)   # => False
```

今回は、ここまでです。
pythonの基本的な型が分かってきたと思います。
次は、コレクション型を整理します。