turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

【Python】No.9001 標準入出力の練習問題 - yukicoder

python2で解く。
※私がPythonの学習のために解説する記事なので間違い等あるかもしれません。

問題URL: http://yukicoder.me/problems/527

ソースコード

no9001.py
#! /usr/bin/env python
# coding: utf-8


def main():
    first = raw_input()
    second = raw_input()

    A, B = map(int, first.split())

    print('{0} {1}'.format(A + B, second))


if __name__ == '__main__':
    main()

解説

6 ~ 7行目

first = raw_input()
second = raw_input()

変数 first 及び second に標準出力の値を文字列型で代入。

問題では入力が以下のように与えられる。

A B
S

AとBは整数。
1 ≦ A ≦ 1000
1 ≦ B ≦ 1000
S は長さ10以下の半角英数の文字列。

なので上記コードの場合、
変数 first の値は'A B'
変数 second の値は'S'

9行目

A, B = map(int, first.split())

まず、first の値が '1 2' みたいな文字列型になっているので'1'と'2'のように分割したい。そこで .split() を使う。

.split() は文字列型のメソッド。文字列を引数に与えた文字で分割してリストで返してくれる。引数を省略するとスペース文字の部分で分割される。
変数 first の値が'1 2'だとする。その場合 first.split() をするとリスト ['1', '2'] が返ってくる。

first.split() で分割はしたけどリストの中の要素は文字列型になっているので、整数型(int)に変換したい。map 関数を使う。

map 関数は第一引数に関数、第二引数にイテラブルなオブジェクトを受け取る。第二引数の要素一つひとつに第一引数で指定した関数処理が行われる。
今回は first.split() で返ってくるリストの要素を整数型(int)にしたいので、第一引数は int 関数、第二引数は first.split() になる。

処理の流れは以下のような感じ。

A, B = map(int, first.split())
    ↓
A, B = map(int, ['A', 'B'])
    ↓
A, B = [int('A'), int('B')]
    ↓
A = int('A')
B = int('B')

11行目

print('{0} {1}'.format(A + B, second))

print で標準出力に出力。

{0} に A + B の計算結果が挿入され、{1} に second の値が挿入される。