화면에 출력하기
쉼표로 나열하면 여러 값을 한 줄에 출력합니다.
변수에 저장한 값은 그대로는 보이지 않습니다. 사람이 보려면 화면에 출력해야 합니다.
print("안녕하세요") # 안녕하세요
name = "학생 A"
score = 90
print(name, score) # 학생 A 90 쉼표로 나열하면 사이에 공백이 하나 들어간다
print(name, "님의 점수는", score, "점입니다") # 학생 A 님의 점수는 90 점입니다쉼표로 나열할 때 알아 둘 세 가지
- 값 사이에 공백 하나가 들어간다.
- 문자열과 숫자를 섞어 놓아도 된다.
- 끝에서 줄이 바뀐다.
이 가운데 값 사이의 공백과 끝의 줄바꿈은 바꿀 수 있는 기본값입니다. 바꾸는 방법은 「사이에 넣을 것과 끝에 붙일 것」 절에서 봅니다.
쉼표와 더하기는 다릅니다
print("점수는", 90)은 됩니다. 그런데
print("점수는" + 90)은 오류가 납니다.
쉼표는 「나열하라」는 뜻이고 문자열에 쓴 더하기는 「이어 붙이라」는 뜻인데,
문자열과 숫자는 이어 붙일 수 없기 때문입니다.
쉼표 쪽이 편하지만 공백이 자동으로 들어간다는 점은 알아 두세요 —
print(score, "점")은 「90 점」으로 출력됩니다.
스스로 확인
print("합계:", 100, "원")은 공백이 몇 개 들어간 채로 출력될까요?
사이에 넣을 것과 끝에 붙일 것
기본값을 바꾸면 표 모양으로 출력하거나 여러 번의 출력을 한 줄에 이어 붙일 수 있습니다.
값 사이에 들어가는 것을 바꾸려면 sep을 지정합니다.
구분자(separator)를 줄인 이름입니다.
print(2026, 8, 12) # 2026 8 12
print(2026, 8, 12, sep="-") # 2026-8-12 사이에 넣을 것을 바꾼다
print(2026, 8, 12, sep="") # 2026812 아무것도 넣지 않는다
끝에 붙는 것을 바꾸려면 end를 지정합니다.
기본값이 줄바꿈이므로, end=""처럼 빈 문자열을 지정하면 줄이 바뀌지 않습니다.
print("가", end="")
print("나", end="")
print("다") # 가나다 한 줄에 이어 붙는다
print("가")
print("나") # 가
# 나 기본값이 줄바꿈이라 줄이 나뉜다sep과 end는 들어가는 위치가 다릅니다
sep은 한 번의 출력 「안」에서 값과 값 사이에 들어갑니다.
end는 그 출력이 끝난 「뒤」에 붙습니다.
그래서 값이 하나뿐이면 sep은 아무 역할도 하지 않습니다.
스스로 확인
여러 값을 한 줄에 하나씩 출력하려면 sep과 end 가운데 무엇을 어떻게 지정하면 될까요?
키보드로 입력받기
입력받은 값은 숫자처럼 보여도 문자열입니다.
input은 사용자가 엔터 키를 누를 때까지 기다렸다가, 입력한 내용을 그대로 결과로 돌려줍니다. 이렇게 결과를 돌려주는 것을 반환(return)이라고 합니다.
괄호 안에 안내 문구를 적어 두면 입력을 기다리기 전에 먼저 출력해 줍니다.
age = input("나이를 입력하세요: ")
print(age) # 17 화면에는 똑같이 보이지만
print(type(age)) # <class 'str'> 저장된 값은 「문자열」이다입력받은 값은 「언제나」 문자열입니다
17을 입력해도 type으로 확인하면 str입니다.
화면에 보이는 모양이 같다고 자료형이 같은 것은 아닙니다.
그래서 age + 1을 실행하면 문자열과 숫자를 더할 수 없다는 오류가 나며 멈춥니다.
처음 배울 때 거의 누구나 한 번은 겪는 오류입니다. 값의 자료형을 바꾸는 형 변환이 바로 여기서 필요합니다.
age = int(input("나이를 입력하세요: ")) # 입력받자마자 정수로 변환한다
print("내년이면", age + 1, "살입니다") # 내년이면 18 살입니다입력받자마자 변환해 두는 편이 낫습니다
int(input(…))처럼 입력받는 줄에서 곧바로 변환해 두면,
그 뒤로는 변환 없이 바로 계산에 쓸 수 있습니다. 나중에 쓸 때마다 변환하면
한 군데를 빠뜨리기 쉽습니다.
다만 정수로 변환할 수 없는 값을 입력하면 그 줄에서 바로 오류가 납니다. 「열일곱」이나 「17.5」를 입력하면 그렇게 됩니다.
스스로 확인
나이를 입력받아 문자열 그대로 두면 age * 2는 무엇이 될까요? 오류일까요, 아니면 다른 결과일까요?
한 줄로 입력된 여러 값
두 번 입력받을 수도 있고, 한 번에 입력받아 나눌 수도 있습니다.
값이 여럿이면 input을 여러 번 써도 됩니다. 그런데 사용자는
「80 91」처럼 한 줄에 입력하는 쪽이 더 편할 때가 많습니다.
그러면 입력받은 문자열을 공백을 기준으로 나누어야 합니다.
data = input("국어와 영어 점수: ").split() # "80 91" -> ['80', '91']
print(data) # ['80', '91'] 아직 문자열이다
kor = int(data[0])
eng = int(data[1])
print(kor + eng) # 171나눈 결과는 여러 값을 모은 리스트입니다
split은 공백을 기준으로 문자열을 나누고, 나뉜 값을 순서대로 모아 ['80', '91']처럼 대괄호로 묶어 반환합니다.
이렇게 여러 값을 순서대로 모은 것을 리스트(list)라고 합니다.
리스트의 값은 앞에서부터 0번, 1번으로 번호를 세어 꺼냅니다.
나누어도 여전히 문자열입니다. 값마다 따옴표가 붙어 있는 것이 그 표시입니다.
그래서 꺼낸 다음 int로 변환해야 합니다.
「나누고, 하나씩 꺼내 변환하기」는 값이 늘어날수록 코드가 길어집니다. 나눈 값 전부에 같은 변환을 한꺼번에 적용하면 한 줄로 줄일 수 있습니다.
kor, eng = map(int, input("국어와 영어 점수: ").split())
print(kor + eng) # 171 나누어 대입하기와 형 변환을 한 줄에 했다이 한 줄을 세 부분으로 나누어 읽습니다
input(…)— 한 줄을 통째로 입력받는다."80 91".split()— 공백을 기준으로 나눈다.['80', '91']map(int, …)— 나눈 값마다int를 적용한다.
왼쪽의 kor, eng에는 변환된 값이 순서대로 하나씩 대입됩니다.
왼쪽 변수의 개수와 값의 개수가 같아야 하고,
다르면 오류가 납니다 — 사용자가 값을 하나만 입력하면 그렇게 됩니다.
name = input("이름을 입력하세요: ")
kor, eng = map(int, input("국어와 영어 점수를 입력하세요: ").split())
total = kor + eng
print(name, "님의 합계는", total, "점,", "평균은", total / 2, "점입니다")스스로 확인
쉼표로 구분해 「80,91」처럼 입력받으려면 split의 괄호 안에 무엇을 넣어야 할까요?
핵심 정리
쉼표로 나열
값 사이에 공백 하나가 들어가고 끝에서 줄이 바뀐다. 문자열과 숫자를 섞어도 된다 — 더하기로는 안 된다.
sep과 end
sep은 값과 값 사이, end는 출력이 끝난 뒤.
end=""를 지정하면 줄이 바뀌지 않는다.
입력은 언제나 문자열
input이 반환하는 값은 언제나 문자열이다.
계산에 쓰려면 int·float로 변환한다.
입력받는 줄에서 바로 변환해 두는 편이 안전하다.
한 줄에 여러 값
.split()으로 공백을 기준으로 나누고,
map(int, …)으로 나눈 값마다 변환을 적용한다.
왼쪽 변수의 개수와 값의 개수가 같아야 한다.
확인 퀴즈
배운 내용을 확인해 봅시다.
1. age = input()으로 17을 입력받았다. age + 1은?
2. print("가", end="") 다음에 print("나")를 하면?
3. input().split()의 결과에 대한 설명으로 틀린 것은?