ひとメモ

当ページのリンクには広告が含まれています

【初心者向け】Python標準入力の取扱い

 

先日紹介したpaizaですが、スキルチェック問題を解くのに初心者は絶対つまづくんじゃ?と思ったポイントがあったので、簡単に解説したいと思います。 

 

www.hitowaft.work

 

 

一番簡単なの

まず一行・一回だけ読み込み。これは簡単。

gist.github.com

 

 3行目で標準入力から一行代入されます。ここで注意するポイントは、このままだとstr型(文字列)で受け取ることになるということです。文字列ならそれでいいのですが、例えば

gist.github.com

このプログラムで入力が”10”だった場合、何が出力されるかわかりますか?正解は、10×2で20!・・・ではなく”1010”となります。何故こうなるかというと、str型で受け取っているため、数字ではなく文字列として認識されているからです。数字として扱い、計算するにはまずstr型からint型(整数)もしくはfloat型(小数点)に変換する必要があります。

gist.github.com

なので、こう。aに代入する時に、一緒にint型に変換します。これで実行すると”1010”ではなく”20”と計算できました。

 

また、1行ではあるけれど、スペース区切りでいくつかの入力がある場合もあります。"2 10"など。

それぞれを別々の要素として、同じリストに受け取ってみましょう。split()というメソッドでそれが実現できます。

gist.github.com

このかっこの中には区切り文字を指定できますが、詳しくは過去記事で紹介してるサイトを見たほうがわかりやすいと思います。スペースで区切る場合は何も入れなくて大丈夫です。

さて、上のコードで分割はできました。しかし先程と同じように、このままではstr型のままです。では”a = int(input().split())”とすれば良いのでしょうか?ここが私のどハマリしたポイントです。実はそう簡単にいかないのです。”a = int(input().split())”として実行したところ、こんなエラーが出ると思います。

TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

int関数の引数はリストじゃあきまへんで~ってことですね。ではどうするか。以下のような方法があります。

 

これが本命

gist.github.com

これで一行丸ごとint型で且つsplit ()関数によって分割されてリストに収納されました。

 

sysモジュールを使う

またsysモジュールを使う方法もあります。使うには三行目のように、あらかじめimportしておく必要があります。これだと複数行の入力をまとめてint型に変換できます。ただ、これだとsplit()を使えないので一行に一つの入力がある時しか使えません。

gist.github.com

 

もしかしたらもっと他にスマートなやり方があるのかもしれませんが、この辺がわかっていれば標準入力だけでつまづくことは少ないと思います。あとはfor文で何とかします。append関数も覚えておくと便利。ループ処理等がわからない初心者さんはとりあえず過去記事で紹介したサイトでお勉強してくださいね。それでは!

 

 

2019年7月16日追記:paiza公式ブログで動画解説してくれてました。

paiza.hatenablog.com