티스토리 뷰
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 리스트에 계속 더하게 됩니다.
입력받을 문자열에 따라 두 방법 중 편한 방법을 선택하여 사용하면 됩니다.
'Development' 카테고리의 다른 글
python requests unicode 출력 문제 (369) | 2016.06.24 |
---|---|
python send mail - 간단한 메일 전송 프로그램 (391) | 2016.06.20 |
python continue와 pass의 차이점 (525) | 2016.06.19 |
Python os makedirs 사용 경로 생성 (258) | 2016.06.05 |
Python shutil copytree 사용 파일 복사 (405) | 2016.06.05 |
- Total
- Today
- Yesterday
- DNSOverHTTPS
- hackerschool
- TISTORY
- 사이버테러
- 분석
- FTZ
- network
- 스크립트
- 자바스크립트
- 웹
- 악성코드
- 문제풀이
- www
- 프로그래밍
- Sublime Text 2
- CK Exploit Kit
- 웨일브라우저
- BOF
- CODEGATE 2014
- python
- 파이썬
- 해커스쿨
- DoH
- 티스토리
- exploit
- 프로그래밍 언어
- 개발
- CloudFlare
- Wargame
- writeup
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |