見出し画像

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

← preview

next →

TypeError

Error.

>> value + value

「 type関数 」というものを覚えておいででしょうか?

「 print( type( 123 ) ) 」や
「 print( type( "ぱいおつ大納言" ) ) 」のように記述することで

「 < class 'int' > 」だったり
「 < class 'str' > 」のような

 値の型( type ) 」を返してくれる関数でした。

type関数

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

value + value + value

答えはこうです。👇

ほーん。

今後の説明では

< class 'int' > 
= 「 int型 
< class 'float' > 
= 「 float型 
< class 'str' > 
= 「 str型 

のように、type関数を使った際に出力される
< class '〇〇' > 」を、「〇〇型」と書きますね。


>> TypeError : must be str, not int/float

what type...


 値① + 値② 」のように
値どうしを足したい場面はしばしばやってきます。

その場合には、基本的に
値①と値②は、共に同じ型である必要があります。

「 1 + 2.3 」のような「 int型 + float型 」は
計算結果が「 3.3 」、つまり「 float型 」になるので
型が違っても何もエラーはおきません。

しかし、例えば...

「 "1+2 =" + 1+2 + "です。" 」のような
「 str型 」と「 int型 or float型 」の加算はできません!

百聞は一見にしかず。やってみましょう。👇

TypeError : must be str, not int

「 TypeError : must be str, not int( float ) 」とは、

 int型(float型)ではなく、str型でなければなりません 

という内容のエラーです。

以前登場した「 comma( , ) 」を使って
「 print( str , int , str2 ) 」のように書けば
エラーにはなりません。

しかし...

TypeError : type.__ new__() argument 2 must be tuple, not int

type関数の方でエラーが起きてしまいます。

なぜかというと...そりゃそうだろって感じですが、
違う型の値を足して、全体が何の型になるかを聞かれても困るからです。

ピカチュウはでんきタイプ
ヒトカゲはほのおタイプ
フシギダネはくさタイプ(どくタイプ)

では、「ピカチュウ、ヒトカゲ、フシギダネ」の
3匹は何タイプでしょうか?と聞かれても
タイプが違うから答えられない

もし「ピカチュウ、サンダース、エレキテル」だったら
「ああ、でんきタイプですね」と答えられる。

そんな感じです。


「type関数だけでエラーになるなら別に使わなくてよくね?」
と思いました??

例えば、
print( type(str) , type(int) , type(str2) ) のように
カンマで区切ってやればエラーにならずに済みますけれど...👇

「 1+2 =  3 です。」とか、
変な スペース (空白)   が あって
なんか すごく カッコ悪い ですね。

しかもですよ?
「 print( type(str) , type(int) ) 」のように

「 カンマ( , ) 」を使って区切らなきゃならないってことは
どういうことか分かりますか???

ひとつの変数に全てをまとめて代入する事ができない
ってことなんです!!!!メンドいだろ!!!!
👇

複数の変数を合わせてひとつの変数に代入したい...



type_conversion

>> conversion = 変換

〔 conversion ( コンヴァージョン ) 〕

この問題の解決方法は、案外簡単。

値の型を別のものに変換すればいいのです。

>> str関数 / str( )

( )内の値の型を「 str型 」に変更できます。

str( 1+2 )

「 str( 1+2 ) 」のように計算式を書いた場合は
計算結果を「 str型 」に変更してくれます。

非常に便利ですね。


>> int関数 / int( )

( )内の値の型を「 int型 」に変更できます。

● float型 → int型

小数点以下が切り捨てられます。

例)
「12.345」→「12」
「10/3」→「3」
(本来は「3.333333....」)

int( 12.3 )


● str型 → int型

「 int( "整数" ) 」の場合に限って使用可能。

「 int( "1+2" ) 」のような形では使用できない。

「 int( "1" + "2" ) 」は、
「3」ではなく「12」として扱われる。

int( "2" )

>> float関数 / float( )

( )内の値の型を「 float型 」に変更できます。

そんなに使うことないと思うかも知れませんが
しっかり覚えておきましょうね。
シレッと出てきますから。

float( "12" )

input

input.

「型の変換っていつ使うん???」
って思いませんか?

それが結構使うんですよね〜...

例えば、「ユーザーに値の入力を求める時」です。

身長を入力してください。
体重を入力してください。
年齢を入力してください。
目標金額を入力してください。

このようにユーザーによる入力を求める場面というのは
色々想定されるわけですよね。

例えばこんな簡単なアプリを作ることを考えてください。

①「あなたのBMI値を計算します!」
②「あなたの名前を入力してください」
③「身長を入力してください」
④「体重を入力してください」

⑤「=================」
⑥「あなたのBMI値は、〇〇です。」
⑦「=================」

そんなユーザーによる入力を求める時に使うのが
「 input( ) 」です。


>> input = 入力

〔 input ( インプット ) 〕

input関数の使い方は簡単です。

「 変数 = input( "何か入力してください" )  
このように記述するだけ。

print関数を使わなくても
( )内のテキストが表示されます。

ユーザーが求められた値を入力して、
Enterキー(retuenキー)を押すまでは、
その後に続くプログラムは実行されません。

また、( )内の「"何か入力してください"」は、
ユーザーに入力を求める際に表示されるテキストです。
何も表示されないと、バグってると思われるので
何かは書きましょう。

どんなものを、どんな形式(型)で入力すればいいのかを
簡潔に示してあげると親切ですね。

では、試しにひとつコードを書いてみましょう。👇

input("input your name")


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

右下の「>」部分に値を入力してEnter
入力した名前が表示された。

「 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("==============================")
str( input( ) ) / float( input( ) ) / str( int( bmi ) )

※ BMI = 体重(kg) ÷ ( 身長(m) × 身長(m) )

自分の身長を「メートル(m)」で入力する人はあまりいないですよね。
ユーザーに馴染みのある「センチメートル(cm)」での入力を促し、
プログラム側でメートルに直しています。

これぞ親切設計というやつですね。

ちなみに、「cm」→「m」の変換方法ですが、
100cm = 1m なので、「cm」を「100」で割れば「m」になります


非常に長くなりましたが、
ようやくプログラミングっぽくなってきましたね。
このinput( )は汎用性が高いので、
是非自分でアイディアを出してプログラムを書いてみましょう。

次の記事へ。

この記事が気に入ったらサポートをしてみませんか?