53543


Pythonにおけるinput関数の使い方について、  
以下の入力例を受け取ってプログラムで使えるようにするコードを書いています。

[code]

    入力例１
    20 10 10 //1行目は3つ
    2 //2行目は1つで続く行数を明示
    25 20
    11 10
    
    
    入力例２
    19 70 55
    1
    10 80
    
[/code]

書いているコード

[code]

    def solution(s,input_lines2, x_ysets):
        a = s[0]
        b = s[1]
        R = s[2]
        N = input_lines2
        print(a, b, R, N)
        for i in range(0, len(x_ysets), 2):
            x = x_ysets[i]
            y = x_ysets[i+1]
            print(x,y)
    
    input_lines = int(input())
    for i in range(input_lines):
      s = input().rstrip().split(' ')
    input_lines2 = int(input())
    
    x_ysets = []
    for j in range(int(input_lines2)):
      input_lines3 = int(input())
      for i in range(input_lines3):
        s = input().rstrip().split(' ')
        x_ysets.append(s[0])
        x_ysets.append(s[1])
    
    solution(s,input_lines2, x_ysets)
    
[/code]

最初の行を入力した時点で以下のエラーメッセージが出るのですが、  
どのように修正すれば、今回の例のような入力を正しくプログラム内で扱うことが可能になるでしょうか。

エラーメッセージ

[code]

    Traceback (most recent call last):
      File "inputout.py", line 12, in <module>
        input_lines = int(input())
    ValueError: invalid literal for int() with base 10: '20 10 10'
    
[/code]


CC BY-SA 4.0
2019-03-19T06:17:11.410
53542
2019-03-19T06:49:45.607
question
python python3
Pythonにおけるinput関数の使い方について

[code]

    input_lines = int(input())
    
[/code]

これは、 `"20 10 10"`
という文字列を整数に変換することが出来ないため発生しています。以下のように、それぞれの要素に区切ってから整数としてください。

[code]

    numbers = input().split() # ["20", "10", "10"]
    input_lines = []
    for number in numbers:
        input_lines.append(int(number))
    
[/code]

次のように、短く書くことも可能です。

[code]

    input_lines = map(int, input().split)
    
[/code]


CC BY-SA 4.0
2019-03-19T06:40:13.157
53543
2019-03-19T06:40:13.157
29826
53542
answer


多分やりたいことはこういう事かと思います。

[code]

    def solution(s,input_lines2, x_ysets):
        a = s[0]
        b = s[1]
        R = s[2]
        N = input_lines2
        for i in range(0, len(x_ysets), 2):
            x = x_ysets[i]
            y = x_ysets[i+1]
            print(x,y)
    
    s = list(map(int, input().rstrip().split(' ')))
    input_lines2 = int(input().strip())
    x_ysets = []
    for j in range(int(input_lines2)):
        x_ysets.extend(list(map(int, input().strip().split())))
    solution(s, input_lines2, x_ysets)
    
[/code]

１行目の入力データは

[code]

    '20 10 10'
    
[/code]

のように3つの数字がスペース区切で入力されるのでそのまま

[code]

    int(input())
    
[/code]

とすることは出来ません。  
ですので、先に

[code]

    input().strip().split()
    
[/code]

で分割して、それぞれの要素を map() を使って int
に変換すると良いかと思います。(`map()`の戻り値はイテレータを解すので更に`list()`で囲ってリスト化しております。)

３行目以降のデータも全く同様の処理を行っておりますが、元のコードではリスト`x_ysets` に追加しているようですので
`x_yset.extend()`にて追加しております。  
（個人的には `append()` で追加して２次元リストとしたほうが良い気がしますが、`solution()`
関数は１次元リストを想定しているようなのでそのままにしております。）


CC BY-SA 4.0
2019-03-19T06:49:45.607
53544
2019-03-19T06:49:45.607
24801
53542
answer