
小学生でもわかる!? Pythonプログラミング - TypeError / type_conversion / input関数
← preview
next →
TypeError

>> value + value
「 type関数 」というものを覚えておいででしょうか?
「 print( type( 123 ) ) 」や
「 print( type( "ぱいおつ大納言" ) ) 」のように記述することで
「 < class 'int' > 」だったり
「 < class 'str' > 」のような
「 値の型( type ) 」を返してくれる関数でした。

では、このスクリプトを実行すると
それぞれどのような結果が得られるでしょうか?👇

答えはこうです。👇

今後の説明では
< class 'int' > = 「 int型 」
< class 'float' > = 「 float型 」
< class 'str' > = 「 str型 」
のように、type関数を使った際に出力される
「< class '〇〇' > 」を、「〇〇型」と書きますね。
>> TypeError : must be str, not int/float

「 値① + 値② 」のように
値どうしを足したい場面はしばしばやってきます。
その場合には、基本的に
値①と値②は、共に同じ型である必要があります。
「 1 + 2.3 」のような「 int型 + float型 」は
計算結果が「 3.3 」、つまり「 float型 」になるので
型が違っても何もエラーはおきません。
しかし、例えば...
「 "1+2 =" + 1+2 + "です。" 」のような
「 str型 」と「 int型 or float型 」の加算はできません!
百聞は一見にしかず。やってみましょう。👇

「 TypeError : must be str, not int( float ) 」とは、
「 int型(float型)ではなく、str型でなければなりません 」
という内容のエラーです。
以前登場した「 comma( , ) 」を使って
「 print( str , int , str2 ) 」のように書けば
エラーにはなりません。
しかし...

type関数の方でエラーが起きてしまいます。
なぜかというと...そりゃそうだろって感じですが、
違う型の値を足して、全体が何の型になるかを聞かれても困るからです。
ピカチュウはでんきタイプ。
ヒトカゲはほのおタイプ。
フシギダネはくさタイプ(どくタイプ)。
では、「ピカチュウ、ヒトカゲ、フシギダネ」の
3匹は何タイプでしょうか?と聞かれても
タイプが違うから答えられない。
もし「ピカチュウ、サンダース、エレキテル」だったら
「ああ、でんきタイプですね」と答えられる。
そんな感じです。
「type関数だけでエラーになるなら別に使わなくてよくね?」
と思いました??
例えば、
print( type(str) , type(int) , type(str2) ) のように
カンマで区切ってやればエラーにならずに済みますけれど...👇

「 1+2 = 3 です。」とか、
変な スペース (空白) が あって
なんか すごく カッコ悪い ですね。
しかもですよ?
「 print( type(str) , type(int) ) 」のように
「 カンマ( , ) 」を使って区切らなきゃならないってことは
どういうことか分かりますか???
ひとつの変数に全てをまとめて代入する事ができない
ってことなんです!!!!メンドいだろ!!!!👇

type_conversion

〔 conversion ( コンヴァージョン ) 〕
この問題の解決方法は、案外簡単。
値の型を別のものに変換すればいいのです。
>> str関数 / str( )
( )内の値の型を「 str型 」に変更できます。

「 str( 1+2 ) 」のように計算式を書いた場合は
計算結果を「 str型 」に変更してくれます。
非常に便利ですね。
>> int関数 / int( )
( )内の値の型を「 int型 」に変更できます。
● float型 → int型
小数点以下が切り捨てられます。
例)
「12.345」→「12」
「10/3」→「3」(本来は「3.333333....」)

● str型 → int型
「 int( "整数" ) 」の場合に限って使用可能。
「 int( "1+2" ) 」のような形では使用できない。
「 int( "1" + "2" ) 」は、
「3」ではなく「12」として扱われる。

>> float関数 / float( )
( )内の値の型を「 float型 」に変更できます。
そんなに使うことないと思うかも知れませんが
しっかり覚えておきましょうね。
シレッと出てきますから。

input

「型の変換っていつ使うん???」
って思いませんか?
それが結構使うんですよね〜...
例えば、「ユーザーに値の入力を求める時」です。
身長を入力してください。
体重を入力してください。
年齢を入力してください。
目標金額を入力してください。
このようにユーザーによる入力を求める場面というのは
色々想定されるわけですよね。
例えばこんな簡単なアプリを作ることを考えてください。
①「あなたのBMI値を計算します!」
②「あなたの名前を入力してください」
③「身長を入力してください」
④「体重を入力してください」
⑤「=================」
⑥「あなたのBMI値は、〇〇です。」
⑦「=================」
そんなユーザーによる入力を求める時に使うのが
「 input( ) 」です。
>> input = 入力
〔 input ( インプット ) 〕
input関数の使い方は簡単です。
「 変数 = input( "何か入力してください" ) 」
このように記述するだけ。
print関数を使わなくても
( )内のテキストが表示されます。
ユーザーが求められた値を入力して、
Enterキー(retuenキー)を押すまでは、
その後に続くプログラムは実行されません。
また、( )内の「"何か入力してください"」は、
ユーザーに入力を求める際に表示されるテキストです。
何も表示されないと、バグってると思われるので
何かは書きましょう。
どんなものを、どんな形式(型)で入力すればいいのかを
簡潔に示してあげると親切ですね。
では、試しにひとつコードを書いてみましょう。👇

そして、実行時の画面とコンソール画面です。👇


「 user_name 」という変数を用意しました。
ユーザーによって入力された値が
自動的に変数へ代入される仕組みになっているわけですね。
>> str( input( ) ) / int( input( ) ) / float( input( ) )
ユーザーの入力した値が
自動的に変数へ代入されるわけですが、
ユーザーが入力する値の型を何も決めていないと、
うまくプログラムが動かない事があります。
それはそうですよね。
もし、どんな値でも入力できるのなら、
整数を入力するように求めても、
誤って整数ではないものを打ち込んでしまうことだって
考えられるわけですから。
また、除算などの計算した結果
「3.333333333333333335」のように
見づらい小数が表示されるのは避けたいこともあります。
値の型というものを予め指定/制限してやることで
問題の起こりにくいプログラムにすることができるのです。
str( ) / int( ) / float( ) の( )内に
さらに「 input( ) 」を書いてやることで、
入力される値の型を決める事ができます。
例 ) str( input( "値を入力" ) )
以上のことを踏まえて、
BMIを算出するプログラムを書きます。👇
# Python
print("あなたのBMI値を計算します!")
user_name = str(input("名前を入力 >>> "))
h = float(input("身長を入力(cm) >>>")) / 100
w = float(input("体重を入力(kg) >>>"))
bmi = w / (h * h)
print("===========================")
print(user_name + "さんのBMIは...")
print("およそ" + str(int(bmi)) + "です。")
print("==============================")

※ BMI = 体重(kg) ÷ ( 身長(m) × 身長(m) )
自分の身長を「メートル(m)」で入力する人はあまりいないですよね。
ユーザーに馴染みのある「センチメートル(cm)」での入力を促し、
プログラム側でメートルに直しています。
これぞ親切設計というやつですね。
ちなみに、「cm」→「m」の変換方法ですが、
100cm = 1m なので、「cm」を「100」で割れば「m」になります。
非常に長くなりましたが、
ようやくプログラミングっぽくなってきましたね。
このinput( )は汎用性が高いので、
是非自分でアイディアを出してプログラムを書いてみましょう。
次の記事へ。