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"
a = input("값을 입력하세요 : ")
+) 대량의 데이터를 반복적으로 입력받아야 할 때에는 sys.stdin.readline 함수를 사용하면 input함수보다 더 빠르게 수행 가능하다.
a = int(input())
a = int(input("정수를 입력하시오 : "))
a = float(input())
a = int(input(), 2) # 2진수 입력
a = int(input(), 8) # 8진수 입력
a = int(input(), 16) # 16진수 입력
이전까지는 하나의 값만 입력받는걸 알아보았다. 만약 입력받는 값의 수가 매우 많아지는 경우에는 이를 하나씩 받기에는 무리가 있다. 여러 값을 한 번에 어떻게 입력을 받을까?
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)
하나의 리스트가 아니라, 여러 변수에 대한 값을 한 번에 입력받을 수도 있다.
a, b, c = map(int, input().split()) # 1 2 3 입력
print(a) # 1
print(b) # 2
print(c) # 3
이와 같이 map 객체를 바로 변수할당에 이용해주면 된다.
다만 입력받는 원소의 개수와 할당받는 변수의 개수가 같아야 하며, 아니면 에러가 발생한다.
이전까지는 입력을 한 줄만 받을 수 있었는데, 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]]
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
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