티스토리 뷰

반응형


python raw_input() 개행 없이 문자열 입력 받는 방법


python에서 raw_input()으로 입력을 받을 때 여러 줄을 복사, 붙여넣기 할 경우 아래와 같은 문제가 발생합니다.


string = raw_input()

=====

입력


string1

string2

string3


=====

출력

string1

입력은 여러 줄을 받았으나 string1 뒤의 \n으로 인해 변수에 한 줄만 입력되게 됩니다.

흔히 생각할 때는 string변수에 'string1\nstring2\nstring3\n'으로 입력될 것 같지만 

python에서 \n를 엔터로 입력받아버려 이런 문제가 발생합니다.


이를 해결하기 위해서는 2가지 방법이 있습니다.


1. import sys

2. 반복문을 사용한 raw_input()


1번의 경우 아래와 같은 코드로 입력받을 수 있습니다.

import sys


string = sys.stdin.readlines()

출력 결과

>>> 

string1

string2

string3




['string1\n', 'string2\n', 'string3\n', '\n', '\n', '\n']

sys 라이브러리를 썼을 경우 \n을 그대로 받아 변수에 저장이 가능하지만

입력을 종료하기 위해 엔터를 입력하는 것까지 \n으로 받아버리기 때문에 약간의 문제가 발생합니다.

이 경우 IDLE에서는 Ctrl+D로 종료가 가능하며, windows console에서는 Ctrl+Z로 입력 종료가 가능합니다.

둘 다 EOF(End of File)을 입력하는 방법이며, 키보드 인터럽트를 받아 공백을 입력 받았을 때 종료시키는 코드를 짜도 됩니다.



2번의 경우는 반복문을 사용하여 여러번의 raw_input()을 사용함과 동시에

append()를 사용하여 리스트 형식으로 문자열을 계속 더하는 방법입니다.

string = []

while True:

    input_data = raw_input()

    if input_data == '':

        break

    else:

        string.append(input_data)


for line in string:

    print line

출력 결과

>>> 

string1

string2

string3


string1

string2

string3

여러줄의 string1~3을 받고 엔터를 두 번 입력할 경우 결과가 출력됩니다.

1번의 경우보다 코드가 조금 더 길지만 문자열을 라인 단위로 리스트에 저장하기 때문에

좀 더 다루기가 편리한 방법입니다.

위 코드에서 print string[1]을 하면 string2가 출력되는 식입니다.


코드를 좀 더 살펴보면, while문을 통해 반복적으로 raw_input()으로 입력을 받으며,

공백이 아닌 입력된 문자열이 있을 경우 append()를 통해 string 리스트에 계속 더하게 됩니다.


입력받을 문자열에 따라 두 방법 중 편한 방법을 선택하여 사용하면 됩니다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함
300x250