[py] 입출력

이혜윤·2023년 1월 13일
2

py

목록 보기
1/6

#1. input 함수로 입력받기

  • input()
  • input은 입력되는 모든 것을 문자열로 취급한다.
a = input() 	# 1234ab 입력
print(a) 	# ans : "1234ab"

a = input() 	# 123 입력
print(a) 	# ans : "123"

a = input() 	# 1 2 3 입력
print(a) 	# ans : "1 2 3"
  • input 받을 시 메시지 띄우기
a = input("값을 입력하세요 : ")

+) 대량의 데이터를 반복적으로 입력받아야 할 때에는 sys.stdin.readline 함수를 사용하면 input함수보다 더 빠르게 수행 가능하다.

  • input함수는 숫자를 입력해도 문자열로 입력받기 때문에 숫자를 할당하고 싶다면 함수를 추가적으로 이용해야 한다.
  • 2진수나 8진수, 16진수도 입력이 가능하다. 예를 들어 int(input(), 2)로 입력을 받을 때, 1001을 입력하면 a에는 십진수인 9가 할당된다.
a = int(input())

a = int(input("정수를 입력하시오 : "))

a = float(input())

a = int(input(), 2) # 2진수 입력

a = int(input(), 8) # 8진수 입력
 
a = int(input(), 16) # 16진수 입력

#2. 여러 값 한 번에 입력받기 (split, map)

이전까지는 하나의 값만 입력받는걸 알아보았다. 만약 입력받는 값의 수가 매우 많아지는 경우에는 이를 하나씩 받기에는 무리가 있다. 여러 값을 한 번에 어떻게 입력을 받을까?

split : 특정 문자를 기준으로 문자열을 잘라 리스트로 만들어주는 함수

input함수로 입력받으면 항상 문자열로 입력받아진다는 걸 알았으니, 입력된 문자열에 split함수를 이용할 수 있다.

예를 들어 1부터 10까지 10개의 자연수를 입력받는다고 하자. 각 숫자 사이에는 공백이 주어진다.

그러면 "1 2 3 4 5 6 7 8 9 10" 의 문자열로 입력을 받게 되고, split 함수를 이용해서 공백 기준으로 모두 분리해주면

['1', '2', '3', ..., '10'] 으로 만들어진다.

하지만 아직까지는 리스트의 각 원소가 숫자가 아니라 문자열이다. 우리가 원하는 건 자연수이기 때문에 이 원소들을 모두 숫자로 바꿔주어야 한다. 여기서 map이라는 함수가 이용된다.

map(변환 함수, 반복가능한 객체):

map은 map 이렇게 두 인수를 받는다. 함수부분에는 원하는 자료형(int, float 등)을 넣어주면 된다.

map함수는 map타입의 객체를 반환하기 때문에 이를 다시 list나 tuple등으로 변환을 시켜주어야 한다.

따라서 종합하면 아래의 코드와 같다. 각 함수들이 적용되어가는 과정을 순서대로 나타내었고, 마지막 코드처럼 사용하면 리스트로 숫자를 입력받을 수 있다.

a = input()

print(a) # "1 2 3 4 5 6 7 8 9 10"

a = input().split()

print(a) # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

a = map(int, input().split())

print(a) # <map object at 0x01D56750>

a = list(map(int, input().split()))

print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

a = tuple(map(int, input().split()))

print(a) # (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

하나의 리스트가 아니라, 여러 변수에 대한 값을 한 번에 입력받을 수도 있다.

  • 다중할당(Multiple Assignment) : 동시에 여러 변수에 여러 개체를 할당. 기본적으로 공백을 기준으로 구분한다.
a, b, c = map(int, input().split()) # 1 2 3 입력

print(a) # 1

print(b) # 2

print(c) # 3
 

이와 같이 map 객체를 바로 변수할당에 이용해주면 된다.

다만 입력받는 원소의 개수와 할당받는 변수의 개수가 같아야 하며, 아니면 에러가 발생한다.


#3. for문을 이용한 입력

이전까지는 입력을 한 줄만 받을 수 있었는데, for문을 이용하면 한번에 여러 줄을 입력받을 수 있다.

우선, 기본적으로 여러줄을 입력받는 방법이다.

a = [input() for _ in range(5)]
print(a)
# 입력
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE

# 출력
['AAAAA', 'BBBBB', 'CCCCC', 'DDDDD', 'EEEEE']

range(5)는 0부터 4까지 정수를 의미하며, 위와 같이 작성하면 input을 5번 수행한다는 의미이다.

여러 줄이 입력되면, 한 줄씩 문자열 원소로 리스트에 담기게 된다.

이렇게 입력받을 수 있다는 걸 알게 되면 문자열을 다루는 함수들로 많이 응용할 수 있다.

각 줄마다도 문자를 하나씩 분리시켜서 최종적으로 2차원 배열을 만들 수 있다.

a = [list(input()) for _ in range(5)]
print(a)

# 입력
AAAAA
BBBBB
CCCCC
DDDDD
EEEEE

# 출력
[['A', 'A', 'A', 'A', 'A'], ['B', 'B', 'B', 'B', 'B'], ['C', 'C', 'C', 'C', 'C'], ['D', 'D', 'D', 'D', 'D'], ['E', 'E', 'E', 'E', 'E']]

비슷한 방식으로, 2차원 배열 또한 입력받을 수 있다.

아래와 같이 이용해주면 된다.

a = [list(map(int, input().split())) for _ in range(5)]
print(a)

# 입력
1 2 3 4 5
3 2 9 10 8
4 3 2 1 2
3 3 3 3 3
5 5 5 5 5

# 출력
[[1, 2, 3, 4, 5], [3, 2, 9, 10, 8], [4, 3, 2, 1, 2], [3, 3, 3, 3, 3], [5, 5, 5, 5, 5]]

#4. print 함수로 출력하기

4.1. 여러 값을 출력하기

print 함수 내에 콤마(,) 를 넣어서 한 번에 여러 변수나 값을 출력할 수 있다. 콤마를 넣으면 각 값 사이에 공백 한 칸씩 띄워진 상태로 출력이 된다.

print(1, 2, 3) # ans : 1 2 3

a = 3
b = 4
c = -1

print(a, b, c) # ans : 3 4 -1

print(a, 10, b) # ans : 3 10 4

각 값 사이에 공백이 아니라 특정한 문자를 넣을 수도 있다. 이 경우에는 sep이라는 구분자를 이용한다.

print(1, 2, 3, sep=',')     # ans : 1,2,3

print(1, 2, 3, sep='ab')    # ans : 1ab2ab3

print(1, 2, 3, sep='')      # ans : 123

print(1, 2, 3, sep=', ')    # ans : 1, 2, 3

print(1, 2, 3, sep='\n')

# ans :
# 1
# 2
# 3

4.2. 줄바꿈 생략하기

end=' '

기본적으로 파이썬의 print함수는 출력을 한 후 자동으로 줄 바꿈을 수행한다.

하지만 end라는 옵션을 수행하면 출력의 끝에 오는 문자를 지정할 수 있다.
즉, 줄 바꿈을 하지 않고 이어서 출력할 수 있다.

print(1, 2, 3, end=' ')
print(4, 5, 6)

# ans : 1 2 3 4 5 6

print(1, 2, 3, end=' and ')
print(4, 5, 6)

# ans : 1 2 3 and 4 5 6

print(1, 2, 3, end='\n')
print(4, 5, 6)

# ans : 
# 1 2 3
profile
구르미 누나

0개의 댓글

관련 채용 정보