Python3
paiza
Pythonista3

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

More than 1 year has passed since last update.

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


背景&タイトルの意味

私は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