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

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

ただいまの
回答率

90.98%

  • Python 3.x

    4135questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 271

null0723

score 1

前提・実現したいこと

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行並ぶ)。

試したこと

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

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

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


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

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 22: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行目の取得方法がよく分かりませんでした...

    キャンセル

  • 2018/01/18 22:29 編集

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

    キャンセル

  • 2018/01/18 22:45

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

    キャンセル

  • 2018/01/18 23:04

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

    キャンセル

  • 2018/01/18 23:26

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/18 21:43

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

    キャンセル

  • 2018/01/18 22:09

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

    キャンセル

  • 2018/01/18 22:23

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

    キャンセル

  • 2018/01/18 22:34

    アンパック代入で思い出しましたのでTipsとして。

    B問題だと幅と高さが入力されたりします。そういう時mapがとても便利です。

    W,H = map(int,input().split())

    これは私もよく使います。

    キャンセル

  • 2018/01/18 22:46

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

    キャンセル

  • 2018/01/18 23:01

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

    キャンセル

+1

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

K,L,M = map(int,input().split())
N = int(input())
arr = [[int(i) for i in input().split()] for _ in range(N)]

print('\nK: {},L: {},M: {}'.format(K,L,M))
print('N:',N)
for i,l in enumerate(arr):
    print('a{}: {} b{}: {}'.format(i,l[0],i,l[1]))

入出力例

20 10 10
5
25 10
10 23
20 15
70 70
10 30

K: 20,L: 10,M: 10
N: 5
a0: 25 b0: 10
a1: 10 b1: 23
a2: 20 b2: 15
a3: 70 b3: 70
a4: 10 b4: 30

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/18 23:28

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

    キャンセル

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

  • ただいまの回答率 90.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Gfujgggggftyygggb

    Hgtfffcv bnnbvvnbbgnnbbbbbbbnnnnjhbbb

  • 解決済

    文字列を比較して配列に格納できない

    ans配列の要素の文字列の最初の文字がlinesの要素の最初の文字と一致するならlinesの2番目の要素('A'/'B'/'C'/'D')をline_alpha配列に格納する、とい

  • 解決済

    複数行のinput入力

    前提・実現したいこと 複数行のinput()入力がしたい。 【やりたいこと】 >>n = input() 1 2  3  >>print(n) 1 2 3 2を入れようとし

  • 受付中

    Railsチュートリアル 14章 フォロー機能に関して

    rails チュートリアル14章のフォロー機能に関しての質問です。 URL: https://railstutorial.jp/chapters/following_users?v

  • 解決済

    pythonでリスト内のリストでの組み合わせ

    python初学者です リスト内での組み合わせを求めたいのですが例えば、 [['3', '4', '1', '5', '6', '2'], ['0', '1', '7', 

  • 解決済

    paizaのゲームのレジのプログラミングの質問

    paizaのゲーム もし次の常駐先が女子エンジニアばっかりだったらで遊んでいます。一番上の数字が店にある商品の数で、次の3つの数字がその商品の単価、何個買ったら割引になるか、割引す

  • 解決済

    pythonで連続出力

    ループ処理でリストから一つずつ取り出して、それを変換したものを、 一行に2個、半角スペースで区切って表示したいのですが、どうしたら良いでしょうか。 入力サンプル 3 2 46 

  • 解決済

    Python3 リスト 複数行 複数項 要素の抽出

    質問 複数行あるリストの中身を抽出し、数の比較をしたい リストの項数も複数あるため、要素の抽出方法がわからない 問題 リストの中身の数が、10以上なら5、9以下なら0を表示

同じタグがついた質問を見る

  • Python 3.x

    4135questions

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