typeで型を調べる
見た目は同じなのに、答えだけが変わる
120 と "120" は、画面に出すとどちらも 120 です。ところが計算させると別の結果になります。
Python
print(120 + 80)
print("120" + "80")上は 200、下は 12080 です。+ は数値どうしなら足し算、文字列どうしなら連結という具合に、左右の 型 で意味が変わります。型とは値の種類のことで、120 は整数の int、"120" は文字列の str です。クオートの有無だけの違いに見えて、中身はまったくの別物です。
さらに 120 + "80" のように混ぜると TypeError で止まります。型の取り違えは、初心者がいちばん長くはまるバグです。
分からなくなったら、推測せずに聞く
確かめられるように、Python には型を教えてくれる type があります。
Python
print(type(120))
print(type("120"))<class 'int'> と <class 'str'> と出ます。かっこや class という飾りが付いていて、そのままでは扱いにくい形です。型の名前だけがほしいときは __name__ を付けます。アンダースコアは前後に 2 本ずつ、合わせて 4 本です。1 本だと別のエラーになります。
Python
print(type(3.5).__name__)
print(type("").__name__)float と str とだけ表示されます。3.5 のような小数は float という別の型で、int とは区別されます。空の文字列 "" にもちゃんと型があり、中身が空でも型は消えません。
返ってくるのは型そのものではなく "str" という 文字列 です。だから他の文字列とつないだり、そのまま返したりできます。
typeを変数名に使わないでください。type = "食費"と書いた瞬間から、命令としてのtypeが使えなくなります。組み込みの名前は変数名にしない、と覚えておきます。
やってみよう
関数 type_name を実装してください。引数 value を 1 つ受け取り、その値の型名を文字列で返します。
type_name(120) は "int"、type_name("120") は "str"、type_name(1.5) は "float" です。<class 'int'> のような飾りの付いた形ではなく、名前だけを返してください。
書けたら、0 と "0" を渡して見比べてみてください。見た目がほとんど同じなのに、違う答えが返ってきます。
要件
- 関数名は type_name で、引数は value の1つ
- type(value) の型名を文字列で return する
- 戻り値は "int" や "str" のような型名だけの文字列にする
- print ではなく return で返す