출력과 입력
코드 첫 줄부터 사용하게 될 두 가지 도구: print()는 터미널에 값을 표시하고, input()은 사용자로부터 텍스트를 받습니다. 간단하지만, 동작 방식을 알아두면 초반에 겪을 수 있는 몇 가지 당황스러운 상황을 피할 수 있습니다.
파이썬이 코드를 실행하는 방식
파이썬은 코드를 위에서 아래로, 한 줄씩, 작성한 순서 그대로 실행합니다. 건너뛰는 일은 없습니다. 작성한 순서가 실행되는 순서입니다. 항상요.
city = "서울"
print(city)
print("인구: 970만 명")city가 먼저 할당됩니다. 첫 번째 print가 실행됩니다. 두 번째 print가 실행됩니다. 매번 이 순서대로요.
이게 중요한 이유는, 할당하기 전에는 변수를 사용할 수 없기 때문입니다. 파이썬은 아직 그 변수를 본 적이 없기에 에러를 발생시킵니다:
print(country) # NameError: country가 아직 정의되지 않았음
country = "한국"프로그램이 커질수록 이 점을 명심하세요: 사용하려는 모든 것은 사용하기 전에 정의되어 있어야 합니다.
출력하기
print()는 파이썬이 여러분에게 응답하는 방법입니다. 어떤 값이든 전달하면 그 값을 표시합니다. 주는 것이 무엇이든 자동으로 텍스트로 변환합니다.
print("안녕") # 안녕
print(42) # 42
print(3.14) # 3.14
print(True) # True여러 값 출력하기
쉼표로 구분하여 여러 값을 한 번에 출력할 수 있습니다. 파이썬은 기본적으로 값 사이에 공백을 넣습니다. 구분자를 sep으로 바꿀 수 있습니다:
name = "민준"
age = 28
print(name, age) # 민준 28
print("이름:", name) # 이름: 민준
print("2024", "01", "15", sep="-") # 2024-01-15
print("a", "b", "c", sep=", ") # a, b, c줄 끝 제어하기
각 print() 호출은 기본적으로 줄바꿈으로 끝나므로, 다음 출력은 새 줄에서 시작합니다. 이를 end로 바꿀 수 있습니다. end=""로 설정하면 다음 print가 같은 줄에서 이어집니다:
print("로딩 중", end="")
print("...")
# 로딩 중...
print("하나", end=" | ")
print("둘", end=" | ")
print("셋")
# 하나 | 둘 | 셋f-string으로 출력 포매팅하기
메시지를 만드는 가장 깔끔한 방법은 f-string입니다. 여는 따옴표 앞에 f를 붙이고, 변수나 표현식을 중괄호로 감쌉니다. 파이썬이 런타임에 채워줍니다. {} 안에는 어떤 값, 계산식, 메서드 호출이든 넣을 수 있습니다.
name = "민준"
score = 980
# 연결: 거추장스럽고, 숫자에는 str()이 필요함
print("선수: " + name + ", 점수: " + str(score))
# f-string: 읽기 쉽고, 수동 변환이 없음
print(f"선수: {name}, 점수: {score}"){} 안에는 어떤 표현식이든 넣을 수 있습니다: 산술, 메서드 호출, 포맷 명세:
price = 49.99
tax = 0.2
total = price * (1 + tax)
print(f"합계: {total:.2f}") # 합계: 59.99
print(f"이름: {name.upper()}") # 이름: 민준
print(f"2 + 2 = {2 + 2}") # 2 + 2 = 4: 뒤의 포맷 명세는 값이 어떻게 표시될지 제어합니다:
ratio = 0.8765
count = 1234567
label = "매출"
print(f"{ratio:.1%}") # 87.7%
print(f"{count:,}") # 1,234,567
print(f"{label:>12}") # " 매출":.2f는 "소수점 둘째 자리까지"를 의미합니다. 가격과 측정값에 끊임없이 사용하게 됩니다. 나머지는 필요할 때 찾아 쓰면 됩니다. 핵심: {} 안에는 변수 이름뿐 아니라 무엇이든 들어갈 수 있다는 점입니다.
사용자 입력 받기
input()은 프로그램을 일시 정지하고 사용자가 무언가 입력하기를 기다립니다. 사용자가 입력하고 Enter를 누른 내용이 반환값으로 돌아옵니다. 괄호 안의 문자열은 사용자에게 보이는 프롬프트입니다.
name = input("이름이 뭐예요? ")
print(f"안녕하세요, {name}님!")input()은 사용자가 무엇을 입력하든 항상 문자열을 반환합니다. 42를 입력하면 숫자 42가 아닌 "42"가 돌아옵니다. 이걸로 산술을 하려면 명시적으로 변환해야 합니다:
age = int(input("나이가 몇 살이에요? "))
print(f"10년 후엔 {age + 10}살이 되겠네요.")사용자가 변환할 수 없는 것을 입력하면 어떻게 될까요? 파이썬은 ValueError를 발생시킵니다. 이를 제대로 처리하는 방법은 파일과 예외 장에서 다룹니다.
실전 예제
사용자 입력으로 개인화되는 퀴즈:
name = input("이름이 뭐예요? ")
subject = input("어떤 과목이요? ")
print(f"좋아요, {name}님. {subject} 퀴즈를 시작합니다.")
print("행운을 빌어요!")두 입력 모두 문자열로 돌아와 f-string에 그대로 들어갑니다. 숫자가 아니라 텍스트로 사용하기 때문에 변환이 필요 없습니다.

