파이썬에는 한 줄을 입력받기 위한 함수로 sys.stdin의 readline만 있는 것이 아닙니다. 기본적으로 input()이라는 built in 함수를 제공합니다. 저 함수가 무엇인지 간단하게 알아보겠습니다.

 


 먼저 1.txt에는 위와 같은 내용이 있습니다. 1 abcde, 그리고 2. 이렇게 2개의 줄이 있습니다.

 

 

 input 함수를 읽어봅시다. standard input (stdin)으로부터 string을 읽는다고 되어 있습니다. 그리고 개행 문자는 strip 된다고 되어 있습니다. 

 

 예제를 하나 보겠습니다. for loop로 5번 루프를 돌립니다. 각 loop마다 input()을 호출하고, 받은 문자열을 출력합니다. 입력을 1.txt에서 받아보겠습니다. 윈도우 powershell에서는 아직 redirection이 지원되지는 않기 때문에, type 명령어와 |를 써야 합니다. type으로 파일의 내용을 출력하고, 파이프로 python main.py에 type의 결과값을 python ~의 입력값으로 넘기는 식입니다. 링크에 설명을 간단하게 해 놓았으니 참고해 보시면 좋겠습니다.

 

 물론 git bash를 설치하면 그런 거 없이 그냥 redirect 문자를 쓰시면 됩니다.

 

 결과가 어떻게 나올까요? 1번째 줄에 1 abcde, 2번째 줄에 2가 출력됩니다. 그리고, EOFError가 나옵니다. 

 


 그렇기 때문에, try except로 input() 을 호출하는 부분을 감싸주어야 합니다. 파일의 끝을 만나서 더 이상 입력을 받을 수 없는 경우 EOFError를 발생시키기 때문입니다. EOFError에 걸렸을 때, while loop를 빠져나가기 위해 break를 걸었음을 볼 수 있습니다. 이제 다시, 실행시켜 보겠습니다.

 

1 abcde, 2가 정확하게 출력되고 종료되었음을 알 수 있습니다. 정리하면 input 함수는 한 줄을 입력받는 함수인데, 파일의 끝을 만나면 EOFError 에러를 발생시킵니다. 고로, 파일의 끝을 판단할 때 EOFError를 catch 하면 됩니다. sys.stdin의 readline보다는 느리기 때문에 빠른 입출력이 필요한 경우,  이 함수 대신 sys.stdin의 readline을 사용하는 것을 권장합니다. 제가 출제한 모의 코딩테스트에 유독 그런 것이 많을 겁니다.

 


 이제 예제 하나만 더 보겠습니다. 1.txt에 있는 2개의 수가 있습니다. 이 둘을 입력받아서 더한 값을 출력하려고 합니다.

 

 이럴 때, split() 함수와 map 함수를 이용하면 됩니다. 먼저, split()로 white 문자를 기준으로 토큰을 분리합니다. 그러면, ["3", "5"]가 될 겁니다. 이제, 이 원소들에 int 함수를 apply 합니다. 이제 "3", "5"가 3, 5가 됩니다. 적용된 결과를 소모시키면 됩니다. n과 m은 각각 3과 5를 가리킵니다. map 함수에 대해 간단하게 원리를 보려면 이 링크를 참조하시면 좋겠습니다.

 

 이제 ans에 n과 m을 더한 값을 넣고 값 ans를 출력합니다. 

 

  결과는 8이 나옵니다.