タイトルが曖昧ですみません。
背景&タイトルの意味
私はiPhoneから、python3でpaizaの問題に挑んでいます。
問題に取り組む際、pythonista3というアプリを使うのですが、テスト実行時に入力を渡す際、いちいち一行ずつ入力するのは面倒と考え、改行を含んだ複数行を一気に入力して、それをあたかも一行ずつの入力として扱いたいなと考えました。
input
にイテレータを入れてしまう
単刀直入に。解決に用いたコードが以下です。
python3
# '''
allinputs = iter(input().splitlines())
input = lambda : next(allinputs)
# '''
一つ目の#'''
の#
を取るとそのまま提出用コードに早変わりします。
- 改行入り全入力を改行で区切った配列を作成
- そのイテレータを吐くジェネレータを
input
関数に入れる -
input
関数があたかも一行ずつの入力に
例
以下のように、一行目に配列の要素数N
、その後に一行ずつ配列の要素が与えられる場合の例を示します。pythonista3
での入力の渡し方のスクショも挙げておきます。
入力
5
apple
banana
orange
grape
melon

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