본문 바로가기
Python

05. 입력과 출력 - 사용자와 대화하기

by 샤나엘 2026. 2. 21.
반응형

입력과 출력

05. 입력과 출력 - 사용자와 대화하기

지금까지는 코드에 직접 값을 적어넣었다. 하지만 진짜 프로그램이라면 사용자가 직접 값을 입력하고, 결과를 보기 좋게 출력할 수 있어야 한다. input()print()를 제대로 파헤쳐보자.


input() - 사용자에게 입력받기

input() 함수는 프로그램 실행 중에 사용자에게 값을 입력받는 함수다.

input() 함수의 동작 흐름

name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")

실행하면 이렇게 된다:

이름을 입력하세요: 홍길동
안녕하세요, 홍길동님!

프로그램이 input()을 만나면 멈추고 기다린다. 사용자가 입력하고 Enter를 누르면 그 값이 변수에 저장되고, 다음 줄로 넘어간다.


input()은 항상 문자열!

가장 중요한 포인트: input()으로 받은 값은 무조건 문자열(str)이다. 숫자를 입력해도 문자열이다!

age = input("나이를 입력하세요: ")
print(type(age))    # <class 'str'>

# 이러면 에러!
# print(age + 1)    # TypeError: 문자열 + 숫자는 안 됨

# 숫자로 변환해야 한다!
age = int(age)
print(age + 1)      # 정상 동작

입력받으면서 바로 변환하기

매번 두 줄에 나눠 쓰기 귀찮으니, 한 줄로 줄일 수 있다.

# 정수로 입력받기
age = int(input("나이: "))

# 실수로 입력받기
height = float(input("키(cm): "))

# 바로 사용 가능
print(f"내년 나이: {age + 1}")
print(f"키: {height}cm")

⚠️ 주의: int(input(...))에 숫자가 아닌 값을 입력하면 에러가 난다. 예를 들어 "abc"를 입력하면 ValueError가 발생한다. 에러 처리는 22편에서 배운다.


여러 값 입력받기

방법 1: 여러 번 input()

name = input("이름: ")
age = int(input("나이: "))
city = input("사는 곳: ")

print(f"{name}님은 {age}세, {city}에 살고 있습니다.")

방법 2: split()으로 한 줄에 여러 값

# 공백으로 구분해서 한 줄에 입력
data = input("이름 나이 도시를 입력하세요: ")
parts = data.split()
name = parts[0]
age = int(parts[1])
city = parts[2]

print(f"{name}님은 {age}세, {city}에 살고 있습니다.")

실행:

이름 나이 도시를 입력하세요: 홍길동 25 서울
홍길동님은 25세, 서울에 살고 있습니다.

더 깔끔하게 쓰려면 이렇게 할 수도 있다:

# 한 줄에 두 숫자 입력받기
a, b = input("두 수를 입력하세요: ").split()
a, b = int(a), int(b)
print(f"{a} + {b} = {a + b}")

💡 팁: split()에 인자를 안 넣으면 공백 기준, split(",")처럼 넣으면 해당 문자 기준으로 나눈다.


print() 더 깊이 파보기

1편에서 print()를 처음 배웠다. 이번에는 좀 더 다양한 옵션을 알아보자.

print() 함수의 주요 옵션

sep - 구분자 바꾸기

print()에 값을 여러 개 넣으면 기본적으로 공백으로 구분된다. sep으로 바꿀 수 있다.

print("2026", "02", "21")               # 2026 02 21
print("2026", "02", "21", sep="-")       # 2026-02-21
print("2026", "02", "21", sep="/")       # 2026/02/21
print("서울", "부산", "대구", sep=" → ")  # 서울 → 부산 → 대구

end - 줄바꿈 없애기

print()는 기본적으로 출력 후 줄바꿈을 한다. end로 바꿀 수 있다.

# 기본: 줄바꿈
print("Hello")
print("World")
# Hello
# World

# end 사용: 같은 줄에 출력
print("Hello", end=" ")
print("World")
# Hello World

# 로딩 느낌 표현
print("처리 중", end="")
print(".", end="")
print(".", end="")
print(".")
# 처리 중...

실전 예시: 카운트다운

import time

for i in range(5, 0, -1):
    print(i, end=" ")
    time.sleep(1)
print("발사!")
# 5 4 3 2 1 발사!

💡 time.sleep(1)은 1초 동안 멈추는 함수다. import time으로 불러와야 쓸 수 있다. 모듈에 대해서는 21편에서 자세히 배운다.


f-string 포매팅 심화

4편에서 f-string을 배웠는데, 좀 더 활용법을 알아보자.

정렬하기

name = "홍길동"
score = 95

# 왼쪽 정렬 (기본) - 10칸 확보
print(f"|{name:<10}|")    # |홍길동       |

# 오른쪽 정렬
print(f"|{name:>10}|")    # |       홍길동|

# 가운데 정렬
print(f"|{name:^10}|")    # |   홍길동    |

# 빈 자리를 다른 문자로 채우기
print(f"|{name:*^10}|")   # |***홍길동****|

숫자 포매팅

# 소수점 자릿수
pi = 3.141592653589793
print(f"원주율: {pi:.2f}")     # 원주율: 3.14
print(f"원주율: {pi:.4f}")     # 원주율: 3.1416

# 천 단위 구분 쉼표
population = 51780000
print(f"인구: {population:,}명")    # 인구: 51,780,000명

# 백분율
rate = 0.856
print(f"성공률: {rate:.1%}")       # 성공률: 85.6%

# 정수 앞에 0 채우기
month = 3
day = 7
print(f"날짜: 2026-{month:02d}-{day:02d}")  # 날짜: 2026-03-07

f-string 포매팅 정리

표현 의미 결과 예시
{x:<10} 10칸, 왼쪽 정렬 |홍길동       |
{x:>10} 10칸, 오른쪽 정렬 |       홍길동|
{x:^10} 10칸, 가운데 정렬 |   홍길동    |
{pi:.2f} 소수점 둘째 자리까지 3.14
{n:,} 천 단위 쉼표 1,234,567
{r:.1%} 백분율 표시 85.6%
{n:02d} 2자리, 앞에 0 채움 07

실전 예시: 간단한 계산기

지금까지 배운 걸 합쳐서 간단한 계산기를 만들어보자.

print("=" * 30)
print("   간단한 계산기")
print("=" * 30)

num1 = float(input("첫 번째 숫자: "))
op = input("연산자 (+, -, *, /): ")
num2 = float(input("두 번째 숫자: "))

if op == "+":
    result = num1 + num2
elif op == "-":
    result = num1 - num2
elif op == "*":
    result = num1 * num2
elif op == "/":
    result = num1 / num2
else:
    result = "잘못된 연산자"

print(f"\n{num1} {op} {num2} = {result}")

실행 예:

==============================
   간단한 계산기
==============================
첫 번째 숫자: 15
연산자 (+, -, *, /): *
두 번째 숫자: 4

15.0 * 4.0 = 60.0

💡 아직 if/elif/else를 배우지 않았지만, 영어 그대로 "만약 ~라면" 정도로 읽으면 된다. 조건문은 7편에서 본격적으로 다룬다.


직접 해보기

문제 1. 이름과 태어난 연도를 입력받아 나이를 계산해서 출력해보자.

이름을 입력하세요: 홍길동
태어난 연도: 2001
홍길동님은 2026년 기준 25세입니다.

문제 2. 두 숫자를 입력받아 사칙연산 결과를 한 번에 출력해보자.

첫 번째 숫자: 20
두 번째 숫자: 7
20 + 7 = 27
20 - 7 = 13
20 * 7 = 140
20 / 7 = 2.86

문제 3. 물건 이름, 단가, 수량을 입력받아 영수증을 출력해보자.

===== 영수증 =====
물건: 연필
단가: 500원
수량: 12개
-----------------
합계: 6,000원
=================
정답 보기
# 문제 1
name = input("이름을 입력하세요: ")
birth_year = int(input("태어난 연도: "))
age = 2026 - birth_year
print(f"{name}님은 2026년 기준 {age}세입니다.")
‍
# 문제 2
a = float(input("첫 번째 숫자: "))
b = float(input("두 번째 숫자: "))
print(f"{a:.0f} + {b:.0f} = {a + b:.0f}")
print(f"{a:.0f} - {b:.0f} = {a - b:.0f}")
print(f"{a:.0f} * {b:.0f} = {a * b:.0f}")
print(f"{a:.0f} / {b:.0f} = {a / b:.2f}")
‍
# 문제 3
item = input("물건 이름: ")
price = int(input("단가: "))
qty = int(input("수량: "))
total = price * qty
print("===== 영수증 =====")
print(f"물건: {item}")
print(f"단가: {price:,}원")
print(f"수량: {qty}개")
print("-" * 17)
print(f"합계: {total:,}원")
print("=" * 17)

오늘의 정리

항목 내용
input() 사용자 입력을 받는 함수. 항상 문자열로 반환
형 변환 int(input(...)), float(input(...))로 숫자 변환
split() 한 줄에 여러 값을 입력받을 때 사용
print() sep 출력 값 사이 구분자 변경
print() end 출력 후 줄바꿈 대신 다른 문자 사용
f-string 심화 정렬, 소수점, 천 단위 쉼표, 백분율, 0 채우기

다음 편 예고: 주석과 코딩 스타일 - 읽기 좋은 코드 만들기

코드는 기계만 읽는 게 아니다. 미래의 나, 동료가 읽을 때 이해하기 쉽도록 주석을 달고, PEP 8 스타일 가이드를 따르는 법을 배운다.


태그: 파이썬 Python 파이썬독학 input print fstring 포맷팅 사용자입력 파이썬기초 IT교육

반응형

댓글