LoginSignup
2
1

More than 5 years have passed since last update.

paiza Python3で複数行入力を受け取る

Last updated at Posted at 2017-12-31

タイトルが曖昧ですみません。

背景&タイトルの意味

私はiPhoneから、python3でpaizaの問題に挑んでいます。

問題に取り組む際、pythonista3というアプリを使うのですが、テスト実行時に入力を渡す際、いちいち一行ずつ入力するのは面倒と考え、改行を含んだ複数行を一気に入力して、それをあたかも一行ずつの入力として扱いたいなと考えました。

inputにイテレータを入れてしまう

単刀直入に。解決に用いたコードが以下です。

python3
#'''
allinputs = iter(input().splitlines())
input = lambda : next(allinputs)
#'''

一つ目の#'''#を取るとそのまま提出用コードに早変わりします。

  1. 改行入り全入力を改行で区切った配列を作成
  2. そのイテレータを吐くジェネレータをinput関数に入れる
  3. input関数があたかも一行ずつの入力に

以下のように、一行目に配列の要素数N、その後に一行ずつ配列の要素が与えられる場合の例を示します。pythonista3での入力の渡し方のスクショも挙げておきます。

入力
5
apple
banana
orange
grape
melon

E9AC5354-BAAC-429E-A96B-3EE5B30B6667.png

python3
#'''
allinputs = iter(input().splitlines())
input = lambda : next(allinputs)
#'''

N = int(input())
arr = [input() for _ in range(N)]

print('N : ',N)
print('arr : ',arr)
出力
N :  5
arr :  ['apple', 'banana', 'orange', 'grape', 'melon']

終わりに

あんまり組み込み関数をいじるのは良くないかもしれませんが、例えばmy_input関数等を用意したところで、混乱を招くだけですから、inputを上書きするという形をとりました。

参考になれば幸いです。m(_ _)m

2018/1/7 追記

pythonista3を使う場合は、ですが、一度コードを実行すると、アプリを終了させるまでinputの中身が手作りイテレータ(もう空っぽ)になってしまうので、以下のように一度退避させておくといいです。

python3
_input = input
#'''
allinputs = iter(input().splitlines())
input = lambda : next(allinputs)
#'''

#ここに書きたいコードを書く

input = _input
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1