質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

10648閲覧

python3でinput()入力された複数行を取得したい

null0723

総合スコア22

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

3クリップ

投稿2018/01/18 12:26

編集2018/01/18 13:13

###前提・実現したいこと

paiza learning というものに取り組んでいます。
input_lines = input() に入力される、
複数行に渡る値を上手く取得できず、困っています。

input()に入力される複数行を上手く取得するにはどうすればいいのでしょうか。

input() には
20 10 10
5
25 10
10 23
20 15
70 70
10 30
と入力されることになっており、2行目の1桁の数字はそのあとに何行続くかを示しています(この場合、2行目の後にあと5行並ぶ)。

###試したこと

python3

1input_line = input() 2s = [input() for i in range(6)] 3print(s)

とりあえずこんな感じで、リストに入れて値を取得しようとしてみました。

python3

1['5', '25 10', '10 23', '20 15', '70 70', '10 30']

するとこんな感じで出ました。
ここでinput1行目の 20 10 10 が リストに入らないのはなぜでしょうか。
rangeの中の6は適当に入れただけで、本当はinput()に入力される2行目の1桁の数字分だけ行を取得したいです。

paiza learningの方はとっくに期限切れなので、これからの勉強のために複数行取得の方法が知りたいです!

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

input()は、標準入力から1行受け取る組み込み関数です。1行目は最初のinput_line = input()で受け取られています。
【以下修正・追記済み】
おそらく1行目も問題を解くのに使うと思うので、これはそのまま受け取っておきましょう。split()を使ってリストにし、さらにmapなどを使ってリスト内のそれぞれの数値をint型に変換するという方法で、一気に[20, 10, 10]として取得できます。
この取得方法は競技プログラミングでよく使います。wakameさんが紹介されているページを参考にしたうえで、python3でのmapの使い方を学習されるとよいと思います。
(他にも、リスト内包を使う方法もあります。こちらの方がmapより読みやすいという方も多いので、学習してみてください)

2行目はもっと単純です。数値をひとつ受け取るだけなので、普通にinput()したものをint型に変換するだけです。

3行目以降は、for文などを使って1行目と同様の処理をN回繰り返せば、各行をそれぞれ[25, 10]などのように受取れます。

paizaのスキルチェックですので、具体的なコードの提示は控えますが、
競技プログラミング向けの標準入力を扱う方法はいろいろ情報がありますので、ぜひ調べてみてください。

投稿2018/01/18 12:37

編集2018/01/26 01:34
Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

null0723

2018/01/18 13:01

input_line = int(input()) s = [input() for i in range(6)] print(s) 上記のようにしたところ、 Traceback (most recent call last): File "Main.py", line 5, in <module> input_lines = int(input()) ValueError: invalid literal for int() with base 10: '20 10 10' と出てしまいました... また、2行目の取得方法がよく分かりませんでした...
Udomomo

2018/01/18 13:29 編集

すみません、回答内の1行目の取得方法が正確ではなかったですね。修正しておきます。 2行目は単に数値をひとつ取得するだけです。こちらも追記しておきます。
null0723

2018/01/18 13:45

わざわざ丁寧にありがとうございます! 2行目を取得する方法はわかったのですが、1行目を取った後、どうやって2行目にいけばいいのでしょうか,,, 本当に初心者ですみません(´;ω;`)
Udomomo

2018/01/18 14:04

input()を1回行うと1行取得し、もう一度行うと次の行を取得します。なので、1行目の処理を書いた後に、2行目の処理を書くだけでよいです。3行目以降で「N回繰り返す」と書いているのも、3行目以降の入力がN行分あるからです。
null0723

2018/01/18 14:26

今やってみたらinput()を何個か羅列しただけでも一行ずつ取ってくれました!! なんこもinput書くと1行目が何個も出ると勝手に思ってました! ありがとうございました
guest

0

入力部分ならば回答してもpaizaの規約には引っかからないだろうと考え、私ならこうするという意味で回答します。(当然他の回答者様の回答とモロ被りな部分があります。)
参考までにどうぞ。

python

1K,L,M = map(int,input().split()) 2N = int(input()) 3arr = [[int(i) for i in input().split()] for _ in range(N)] 4 5print('\nK: {},L: {},M: {}'.format(K,L,M)) 6print('N:',N) 7for i,l in enumerate(arr): 8 print('a{}: {} b{}: {}'.format(i,l[0],i,l[1]))

入出力例

plain

120 10 10 25 325 10 410 23 520 15 670 70 710 30 8 9K: 20,L: 10,M: 10 10N: 5 11a0: 25 b0: 10 12a1: 10 b1: 23 13a2: 20 b2: 15 14a3: 70 b3: 70 15a4: 10 b4: 30

投稿2018/01/18 14:16

編集2018/01/18 14:20
namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

null0723

2018/01/18 14:28

わざわざ書いてくださりありがとうございます!! 今後の勉強にすごく役立ちそうです! ありがとうございました!!
guest

0

回答は既にあるので参考になるリンクをどうぞ。
Pythonで競技プログラミングする時に知っておきたいtips(入出力編)

投稿2018/01/18 12:38

wakame

総合スコア1170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namnium1125

2018/01/18 12:43

横から失礼します。python2系の記事に見えますが、、これで大丈夫と言えますでしょうか?
null0723

2018/01/18 13:09

python2から3への移行でmapが変わったそうでちょっと勉強が必要ですね...
LouiS0616

2018/01/18 13:23

リンク先『アンパック代入』を使えば2.7でも3.xでも同様の挙動が得られますよ。 要素数が多い場合は、mapを使うよりリスト内包を覚えた方がいいです。
namnium1125

2018/01/18 13:34

アンパック代入で思い出しましたのでTipsとして。 B問題だと幅と高さが入力されたりします。そういう時mapがとても便利です。 W,H = map(int,input().split()) これは私もよく使います。
null0723

2018/01/18 13:46

アンパック代入ですか... 皆さんありがとうございます!
Udomomo

2018/01/18 14:01

アンパック代入だともっと手短に書けますね。私もこれから使います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問