Python/문법

파이썬(python) - 입출력

snowman95 2021. 4. 18. 21:57
728x90
반응형

콘솔로 입출력 하기


1. 내장 함수 사용

○ 입력 : input()

input()
동작 : 콘솔 입력 → (Enter) → str변환 → '\n'(개행)제거 → 반환

input("문구")
동작 : "문구"출력 → 콘솔 입력 → (Enter) → str변환 → 개행('\n')제거 → 반환

 사용 예시

a = input("입력해주세요 :")

입력해주세요 :
(사용자 입력받음) Enter

 

 출력 : print(*value, end='\n', sep=' ')

print(*value, end='\n', sep=' ')
- *value : 가변 입력   (콤마로 구분된 여러 입력 받을 수 있음)
- end    : 줄바꿈 문자 (기본은 개행)
- sep    : 구분자      (기본은 공백)

동작 : 값sep값sep값end 순서로 출력
즉, 콤마로 구분된 여러 값들의 사이에 sep(구분자)를 넣고, 출력 마지막에 end를 넣음


print(값)
동작 : 값end 순서로 출력 → sep, end는 명시안하면 기본값으로 들어감
출력 : 값'\n'

print(값1, 값2)
동작 : 값1sep값2end 순서로 출력
출력 : 값1 값2'\n'

 사용 예시

print(1)             : 1'\n'
print(1, 2)          : 1 2'\n': 콤마마다 공백하나가 딸려옴
print(1, 2, end=' ') : 1 2
print(1, 2, sep=';') : 1;2    : 콤마대신 ;를 쓰겠다
print('cat=', 1)     : cat=1


이차원 리스트 이쁘게 출력
board = 
[[0, 3, 5, 4, 6, 9, 2, 7, 8],
[7, 8, 2, 1, 0, 5, 6, 0, 9], 
[0, 6, 0, 2, 7, 8, 1, 3, 5], 
[3, 2, 1, 0, 4, 6, 8, 9, 7], 
[8, 0, 4, 9, 1, 3, 5, 0, 6], 
[5, 9, 6, 8, 2, 0, 4, 1, 3], 
[9, 1, 7, 6, 5, 2, 0, 8, 0], 
[6, 0, 3, 7, 0, 1, 9, 5, 2], 
[2, 5, 8, 3, 9, 4, 7, 6, 0]]

for i in board:
    print(*i)
0 3 5 4 6 9 2 7 8
7 8 2 1 0 5 6 0 9
0 6 0 2 7 8 1 3 5
3 2 1 0 4 6 8 9 7
8 0 4 9 1 3 5 0 6
5 9 6 8 2 0 4 1 3
9 1 7 6 5 2 0 8 0
6 0 3 7 0 1 9 5 2
2 5 8 3 9 4 7 6 0

 

2. sys 라이브러리

 입력 : sys.stdin
 출력 : sys.stdout

import sys
sys.stdin.read()
동작 : 입력 후 (Ctrl+Z) → str변환 → 반환  # Ctrl+Z는 window

a = sys.stdin.readline()
동작 : 입력 후 Enter → str변환 → 반환 

a.split(구분자)
동작 : str을 구분자로 분리하여 리스트로 변환 → 반환 
(default = ' ')

a.rstrip('\n')
동작 : str의 우측 개행('\n') 제거 → 반환 

sys.stdin.readlines()
동작 : 입력 후 (Ctrl+Z) → 줄 단위로 str변환 후 list 요소로 들어감 → 반환
# Ctrl+Z는 window



sys.stdout.write(str변수)
동작 : str변수 받아서 출력 (print처럼 개행 안붙음)

 사용 예시

sys.stdin.readline()
동작 : 입력 후 Enter → str변환 → 반환
입력 : 1
반환 : '1\n'  (Enter='\n' 개행까지 포함되어 저장됨)

sys.stdin.readline().rstrip()
동작 : 입력 후 Enter → str변환 → 우측개행 제거 → 반환
입력 : 1
반환 : '1'   (개행이 제거됨)

sys.stdin.readline().split()
동작 : 입력 후 Enter → str변환 → 공백단위로 잘라서 list변환 → 반환
입력 : 1 2 3 4 5
반환 : ['1','2','3','4','5']

map(int, sys.stdin.readline().split())
동작 : 입력 후 Enter → str변환 → 공백단위로 잘라서 list변환 → list의 각 요소를 int로 변환 → 반환
입력 : 1 2 3 4 5
반환 : [1,2,3,4,5]

n = int(sys.stdin.readline())
a = [int(sys.stdin.readline()) for i in range(n)]
동작 : 첫째 줄에 n 입력, 둘째 줄 부터 정수 n번 입력받아서 리스트로 반환
입력 : 2
       10
       20
반환 : [10,20]


2차원 list 입력받기 (바둑판 모양)
n = int(sys.stdin.readline())
board = [list(map(int,sys.stdin.readline().split())) for i in range(n)]
입력 : 3
       1 2 3
       4 5 6
       7 8 9
반환 : 
       [[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]]
        
2차원 list 생성 (3x3)
board = [[0] * 3 for i in range(3)]
반환 : 
       [[0, 0],
        [0, 0]]

 

3. 입출력 속도 차이 비교

입력 속도 비교

○ 출력 속도 비교

데이터가 많을 수록 입출력 속도 차이가 심하게 난다.
sys.stdin.readline() > input()

 

4. 더 이상 읽을 게 없다면??

  1. (Python) input()은 EOFError를 발생시킵니다.
    while True:
        try:
            print(input())
        except EOFError:
            break​
  2. (Python) sys.stdin.readline()은 빈 문자열을 반환합니다.
    1) 아래와 같이 풀면 빈줄이 주어지는 경우 처리못함. (그대로 출력하기 1번 문제는 풀 수 있다)
    import sys
    while True:
        s = sys.stdin.readline().rstrip()
        if s:
            print(s)
        else:
            break​
    아래와 같이 받으면 빈줄이 주어지는 경우도 처리가능 (그대로 출력하기 1,2 모두 풀이 가능) 
    import sys 
    for s in sys.stdin: 
        print(s, end='')
 

11718번: 그대로 출력하기

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시

www.acmicpc.net

 

입력에 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있는 경우

 

11719번: 그대로 출력하기 2

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이

www.acmicpc.net


파일로 입출력하기


f = open('input.txt','r')  : 파일 열기
read = f.read()            : 파일 내용 전체를 하나의 str로 반환
readline = f.readline()    : 파일 한줄 읽어서 str로 반환
readlines = f.readlines()  : 파일 모든줄 읽고 한줄씩 끊어 str 리스트로 반환
f.close()                  : 파일 닫기

 

반응형