이번 편의 목표: input의 문자열을 숫자로 바꾸고 f-string으로 출력합니다.

지금까지는 가격을 바꾸려면 소스 코드를 수정해야 했습니다. 사용자가 가격을 직접 입력하게 만들면 비로소 프로그램과 대화하는 느낌이 납니다. 이번 편에서는 입력받기, 숫자로 바꾸기, 보기 좋게 출력하기를 한 흐름으로 연결합니다.

입력값은 먼저 문자열이다

`input()`은 사용자가 입력하고 Enter를 누를 때까지 기다립니다. 반환하는 값은 문자열입니다. `4500`을 입력해도 처음에는 숫자 `4500`이 아니라 문자열 `"4500"`입니다.

Python
item = input("구입한 항목: ").strip()
price = int(input("한 개 가격(원): "))
quantity = int(input("수량: "))
total = price * quantity
print(f"{item} {quantity}개를 구입했습니다.")
print(f"합계: {total:,}원")
print(f"주문번호: {7:04d}")

`커피`, `4500`, `2`를 순서대로 입력하면 합계는 `9,000원`입니다. `int()`는 정수로 변환합니다. `float()`는 실수로, `str()`는 문자열로 바꿉니다. `int("3.5")`는 실패합니다. 정수 형식의 문자열이 아니기 때문입니다. 수량을 정수만 받겠다는 정책과 소수를 허용하겠다는 정책을 먼저 구분해야 합니다.

문장 안에 값을 넣는 f-string

문자열 앞의 `f`는 중괄호 안의 값을 문장에 넣으라는 뜻입니다. `f"합계: {total:,}원"`에서 `:,`는 천 단위 쉼표를 표시합니다. 값 자체가 문자열로 바뀌어 저장되는 것은 아닙니다. `total`은 여전히 정수입니다.

`{7:04d}`는 정수를 최소 네 자리로 표시하고 남는 앞자리를 0으로 채웁니다. 결과는 `0007`입니다. 기존 글의 `%04d` 방식도 사용할 수 있지만 새 연재에서는 f-string을 중심으로 통일합니다. 같은 출력 문제를 여러 문법으로 동시에 배우면 불필요하게 복잡해집니다.

`print("합계:", total)`처럼 쉼표로 여러 값을 전달할 수도 있습니다. 기본적으로 값 사이에는 공백이 들어가고 마지막에는 줄바꿈이 붙습니다. `print()`를 인수 없이 실행하면 빈 줄을 출력합니다.

입력 실수도 프로그램의 일부다

위 예제에서 가격에 `사천오백`을 입력하면 `ValueError`가 납니다. 이번 편의 코드는 입력과 변환을 배우기 위한 것이므로 올바른 정수 입력을 전제로 합니다. 잘못된 입력을 받았을 때 다시 묻는 방법은 조건문·반복문·예외 처리를 배운 뒤 완성합니다.

`input()`의 안내문도 프로그램의 사용 설명입니다. `가격:`보다는 `한 개 가격(원):`이 분명합니다. 금액인지 수량인지, 단위가 원인지 천 원인지 모호하면 계산식이 맞아도 잘못된 답이 나옵니다.

직접 해 보기

이름과 공부한 시간을 입력받아 `민수님, 오늘 30분 공부했습니다.`처럼 출력하세요. 공부 시간은 정수로 변환하고, 일주일 동안 같은 시간 공부했을 때의 분량도 출력하세요.

해설

Python
name = input("이름: ").strip()
minutes = int(input("오늘 공부한 시간(분): "))
print(f"{name}님, 오늘 {minutes}분 공부했습니다.")
print(f"일주일 예상: {minutes * 7}분")

`민수`, `30`을 입력하면 일주일 예상은 `210분`입니다. 숫자 계산은 숫자로 수행하고, 마지막 출력 단계에서 문장에 끼워 넣는 흐름을 기억하세요.