Python의 기본 입출력 함수인
print()와input()에 대한 상세한 설명과 예제를 제공합니다.
print() 함수는 Python에서 가장 기본적인 출력 함수입니다.
print(출력내용1, 출력내용2, 출력내용3)
# 출력결과: 출력내용1 출력내용2 출력내용3특징:
print()함수는 자동으로 줄바꿈(\n)을 수행- 여러 값을 출력할 때 기본적으로 공백으로 구분
- 디폴트 값:
end='\n',sep=' '
출력 뒤에 추가할 문자열을 지정합니다. 기본값은 줄바꿈(\n)입니다.
# end 옵션으로 특정 문자열 추가
print(10, end='##')
print('hello', end='**')
print(3.14, end='--')
# 출력결과: 10##hello**3.14--# 줄바꿈 없이 연속 출력
print(10, end='')
print('hello', end='')
print(3.14, end='')
# 출력결과: 10hello3.14# 탭으로 구분
print("이름", end='\t')
print("나이", end='\t')
print("주소")
# 출력결과: 이름 나이 주소출력할 값들 사이를 구분하는 문자열을 지정합니다. 기본값은 공백( )입니다.
# 기본 구분자 (공백)
print(10, 20, 30)
# 출력결과: 10 20 30
# 사용자 정의 구분자
print(10, 20, 30, sep='***')
# 출력결과: 10***20***30
# 쉼표와 공백으로 구분
print("apple", "banana", "cherry", sep=', ')
# 출력결과: apple, banana, cherry
# 줄바꿈으로 구분
print("첫째", "둘째", "셋째", sep='\n')
# 출력결과:
# 첫째
# 둘째
# 셋째
# 화살표로 구분
print("서울", "대전", "대구", "부산", sep=' -> ')
# 출력결과: 서울 -> 대전 -> 대구 -> 부산print("A", "B", "C", sep="-", end="!\n")
# 출력결과: A-B-C!
# 날짜 형식 출력
print(2024, 1, 15, sep='/', end=' ')
print(14, 30, 0, sep=':')
# 출력결과: 2024/1/15 14:30:0문자열 내에서 특수한 의미를 가지는 문자들입니다.
| 이스케이프 문자 | 설명 | 예제 |
|---|---|---|
\n |
줄바꿈 (New Line) | print("Hello\nWorld") |
\t |
탭 (Tab) | print("Name\tAge") |
\\ |
역슬래시 (Backslash) | print("C:\\Users") |
\' |
홑따옴표 | print('It\'s good') |
\" |
쌍따옴표 | print("He said \"Hi\"") |
\r |
캐리지 리턴 (Carriage Return) | print("Hello\rWorld") |
\b |
백스페이스 (Backspace) | print("Hello\bWorld") |
\0 |
널 문자 (Null) | - |
예제:
# 줄바꿈
print("첫 번째 줄\n두 번째 줄\n세 번째 줄")
# 출력결과:
# 첫 번째 줄
# 두 번째 줄
# 세 번째 줄
# 탭 사용
print("이름\t나이\t주소")
print("홍길동\t25\t서울")
print("김철수\t30\t부산")
# 출력결과:
# 이름 나이 주소
# 홍길동 25 서울
# 김철수 30 부산
# 따옴표 출력
print("그가 말했다: \"안녕하세요!\"")
# 출력결과: 그가 말했다: "안녕하세요!"
print('It\'s a beautiful day')
# 출력결과: It's a beautiful dayRaw String은 문자열 내부의 모든 이스케이프 문자의 특수 기능을 제거한 문자열입니다.
사용 방법: 문자열 앞에 r 또는 R을 붙입니다.
# 일반 문자열 - 이스케이프 문자 해석됨
path = "C:\new\test\file"
print(path)
# 출력결과: C:
# ew est
# ile (오류 발생!)
# 역슬래시를 두 번 사용
path = "C:\\new\\test\\file"
print(path)
# 출력결과: C:\new\test\file
# Raw String 사용 - 가장 간단한 방법
path = r"C:\new\test\file"
print(path)
# 출력결과: C:\new\test\file# 일반적인 방법 (역슬래시 두 번)
path1 = "C:\\Users\\Documents\\Python\\project"
print(path1)
# 출력결과: C:\Users\Documents\Python\project
# Raw String 사용 (권장)
path2 = r"C:\Users\Documents\Python\project"
print(path2)
# 출력결과: C:\Users\Documents\Python\project
# 두 방법 비교
path_normal = "C:\\Windows\\System\\Python"
path_raw = r"C:\Windows\System\Python"
print(path_normal == path_raw)
# 출력결과: True정규 표현식에서는 Raw String이 매우 유용합니다.
import re
# 일반 문자열 - 복잡함
pattern1 = "\\d+\\.\\d+" # 소수점 숫자 매칭
# Raw String - 간결함
pattern2 = r"\d+\.\d+" # 동일한 패턴
text = "가격은 123.45원 입니다."
print(re.findall(pattern1, text)) # ['123.45']
print(re.findall(pattern2, text)) # ['123.45']# Raw String도 역슬래시로 끝날 수 없음
# path = r"C:\Users\" # SyntaxError 발생!
# 해결 방법 1: 역슬래시 추가
path = r"C:\Users" + "\\"
print(path)
# 출력결과: C:\Users\
# 해결 방법 2: 슬래시 사용
path = r"C:\Users/"
print(path)
# 출력결과: C:\Users/Python에서 문자열에 변수 값을 삽입하는 세 가지 방법을 설명합니다.
C 언어 스타일의 포맷팅 방법입니다.
기본 구문: "문자열 %서식지정자" % (값)
# 문자열 삽입
print("Hello %s" % ("파이썬"))
# 출력결과: Hello 파이썬
# 변수 사용
name = "Python"
print("I love %s" % name)
# 출력결과: I love Python
# 여러 값 삽입
print("주소: %s 우편번호: %d" % ('서울', 12345))
# 출력결과: 주소: 서울 우편번호: 12345
# 정수와 실수
age = 25
height = 175.5
print("나이: %d세, 키: %.1f cm" % (age, height))
# 출력결과: 나이: 25세, 키: 175.5 cm소수점 자리수 지정:
import math
PI = math.pi
print("정수: %d" % PI) # 출력결과: 정수: 3
print("실수: %f" % PI) # 출력결과: 실수: 3.141593
print("소수점 1자리: %.1f" % PI) # 출력결과: 소수점 1자리: 3.1
print("소수점 3자리: %.3f" % PI) # 출력결과: 소수점 3자리: 3.142
print("소수점 5자리: %.5f" % PI) # 출력결과: 소수점 5자리: 3.14159너비 지정:
# 최소 너비 지정 (오른쪽 정렬)
print("[%10s]" % "hello") # 출력결과: [ hello]
print("[%10d]" % 123) # 출력결과: [ 123]
# 왼쪽 정렬 (- 사용)
print("[%-10s]" % "hello") # 출력결과: [hello ]
print("[%-10d]" % 123) # 출력결과: [123 ]
# 0으로 채우기
print("[%05d]" % 42) # 출력결과: [00042]
print("[%08.2f]" % 3.14) # 출력결과: [00003.14]Python 2.6+에서 도입된 더 유연한 포맷팅 방법입니다.
기본 사용법:
# 위치 인자
print("My name is {}, I'm {} years old".format("박수진", 10))
# 출력결과: My name is 박수진, I'm 10 years old
# 인덱스 지정
print("{0}와 {1}".format("사과", "배"))
# 출력결과: 사과와 배
print("{1}와 {0}".format("사과", "배"))
# 출력결과: 배와 사과
# 동일 인덱스 반복
print("{0} {0} {1}".format("hello", "world"))
# 출력결과: hello hello world키워드 인자:
print("My name is {name}, I'm {age} years old".format(name="박수진", age=10))
# 출력결과: My name is 박수진, I'm 10 years old
# 딕셔너리 언패킹
person = {"name": "홍길동", "age": 30}
print("이름: {name}, 나이: {age}".format(**person))
# 출력결과: 이름: 홍길동, 나이: 30숫자 포맷팅:
import math
PI = math.pi
print("PI = {}".format(PI))
# 출력결과: PI = 3.141592653589793
print("PI = {:.3f}".format(PI))
# 출력결과: PI = 3.142
print("PI = {:.1f}".format(PI))
# 출력결과: PI = 3.1
# 천단위 구분자
print("{:,}".format(1234567890))
# 출력결과: 1,234,567,890
# 퍼센트 표시
print("{:.2%}".format(0.25))
# 출력결과: 25.00%
# 진법 변환
num = 255
print("10진수: {:d}".format(num)) # 출력결과: 10진수: 255
print("2진수: {:b}".format(num)) # 출력결과: 2진수: 11111111
print("8진수: {:o}".format(num)) # 출력결과: 8진수: 377
print("16진수: {:x}".format(num)) # 출력결과: 16진수: ff
print("16진수: {:X}".format(num)) # 출력결과: 16진수: FF정렬과 채우기:
# 기본 정렬 (오른쪽)
print("[{:10}]".format("hello")) # 출력결과: [hello ]
print("[{:10d}]".format(123)) # 출력결과: [ 123]
# 왼쪽 정렬 (<)
print("[{:<10}]".format("hello")) # 출력결과: [hello ]
# 오른쪽 정렬 (>)
print("[{:>10}]".format("hello")) # 출력결과: [ hello]
# 가운데 정렬 (^)
print("[{:^10}]".format("hello")) # 출력결과: [ hello ]
# 특정 문자로 채우기
print("[{:*^10}]".format("hello")) # 출력결과: [**hello***]
print("[{:-<10}]".format("hello")) # 출력결과: [hello-----]
print("[{:0>10}]".format(123)) # 출력결과: [0000000123]가장 현대적이고 가독성이 좋은 포맷팅 방법입니다.
기본 사용법:
name = "Python"
version = 3.11
print(f"Language: {name}, Version: {version}")
# 출력결과: Language: Python, Version: 3.11
# 표현식 사용 가능
a = 10
b = 20
print(f"{a} + {b} = {a + b}")
# 출력결과: 10 + 20 = 30
# 함수 호출
text = "hello"
print(f"대문자: {text.upper()}")
# 출력결과: 대문자: HELLO숫자 포맷팅:
import math
PI = math.pi
print(f'원주율은 {PI} 입니다')
# 출력결과: 원주율은 3.141592653589793 입니다
print(f'원주율은 {PI:.2f} 입니다')
# 출력결과: 원주율은 3.14 입니다
print(f'원주율은 {PI:.4f} 입니다')
# 출력결과: 원주율은 3.1416 입니다
# 천단위 구분자
price = 1234567890
print(f"가격: {price:,}원")
# 출력결과: 가격: 1,234,567,890원
# 퍼센트
ratio = 0.7568
print(f"비율: {ratio:.1%}")
# 출력결과: 비율: 75.7%정렬:
name = "Python"
print(f"[{name:10}]") # 출력결과: [Python ]
print(f"[{name:<10}]") # 출력결과: [Python ]
print(f"[{name:>10}]") # 출력결과: [ Python]
print(f"[{name:^10}]") # 출력결과: [ Python ]
print(f"[{name:*^10}]") # 출력결과: [**Python**]디버깅 (Python 3.8+):
x = 10
y = 20
print(f"{x=}, {y=}")
# 출력결과: x=10, y=20
print(f"{x + y = }")
# 출력결과: x + y = 30| 서식 지정자 | 설명 | 예제 | 출력 |
|---|---|---|---|
%s |
문자열 (String) | "%s" % "hello" |
hello |
%d |
십진수 정수 (Decimal Integer) | "%d" % 42 |
42 |
%i |
정수 (%d와 동일) | "%i" % 42 |
42 |
%f |
부동소수점 실수 (Float) | "%f" % 3.14 |
3.140000 |
%e |
지수 표기법 (소문자) | "%e" % 1234.5 |
1.234500e+03 |
%E |
지수 표기법 (대문자) | "%E" % 1234.5 |
1.234500E+03 |
%g |
%f와 %e 중 짧은 것 | "%g" % 0.00001 |
1e-05 |
%G |
%f와 %E 중 짧은 것 | "%G" % 0.00001 |
1E-05 |
%c |
단일 문자 (Character) | "%c" % 65 |
A |
%o |
8진수 (Octal) | "%o" % 8 |
10 |
%x |
16진수 소문자 (Hexadecimal) | "%x" % 255 |
ff |
%X |
16진수 대문자 | "%X" % 255 |
FF |
%% |
퍼센트 문자 자체 | "100%%" |
100% |
| 서식 | 설명 | 예제 | 출력 |
|---|---|---|---|
{:d} |
정수 | f"{42:d}" |
42 |
{:f} |
실수 (기본 6자리) | f"{3.14:f}" |
3.140000 |
{:.2f} |
실수 (소수점 2자리) | f"{3.14159:.2f}" |
3.14 |
{:e} |
지수 표기법 | f"{1234:e}" |
1.234000e+03 |
{:b} |
2진수 | f"{10:b}" |
1010 |
{:o} |
8진수 | f"{10:o}" |
12 |
{:x} |
16진수 소문자 | f"{255:x}" |
ff |
{:X} |
16진수 대문자 | f"{255:X}" |
FF |
{:,} |
천단위 구분자 | f"{1000000:,}" |
1,000,000 |
{:.2%} |
퍼센트 | f"{0.25:.2%}" |
25.00% |
{:10} |
너비 지정 | f"{'hi':10}" |
hi |
{:<10} |
왼쪽 정렬 | f"{'hi':<10}" |
hi |
{:>10} |
오른쪽 정렬 | f"{'hi':>10}" |
hi |
{:^10} |
가운데 정렬 | f"{'hi':^10}" |
hi |
{:*^10} |
채움 문자 지정 | f"{'hi':*^10}" |
****hi**** |
{:05d} |
0으로 채우기 | f"{42:05d}" |
00042 |
{:+d} |
부호 표시 | f"{42:+d}" |
+42 |
{: d} |
양수에 공백 | f"{42: d}" |
42 |
| 방법 | 도입 버전 | 장점 | 단점 |
|---|---|---|---|
% 연산자 |
초기 | C언어 경험자에게 익숙 | 복잡한 포맷팅 어려움 |
format() |
2.6 | 유연하고 강력함 | 코드가 다소 길어짐 |
| f-string | 3.6 | 가독성 최고, 표현식 지원 | Python 3.6+ 필요 |
input() 함수는 키보드로부터 입력을 받아 **항상 문자열(str)**로 반환합니다.
# 기본 입력
a = input()
print(a)
print(type(a)) # <class 'str'>
# 프롬프트 메시지와 함께 입력
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")
# 이름을 입력하세요: 홍길동
# 안녕하세요, 홍길동님!input()은 항상 문자열을 반환하므로, 숫자 연산을 위해서는 형변환이 필요합니다.
# 잘못된 예시 - 문자열 연결됨
a = input("숫자 입력: ") # 10 입력
print(a + 10) # TypeError 발생!
# 올바른 예시 - 형변환 사용
a = input("숫자 입력: ") # 10 입력
print(int(a) + 10)
# 출력결과: 20
# 한 줄로 처리
num = int(input("정수 입력: "))
print(num * 2)
# 실수 입력
height = float(input("키를 입력하시오 (cm): "))
print(f"당신의 키는 {height}cm 입니다.")하나의 input()으로 여러 값을 입력받으려면 split() 메서드를 사용합니다.
기본 사용 (공백 구분):
# 잘못된 방법
a = input("3개 입력: ") # "10 20 30" 입력
# a에는 "10 20 30"이라는 하나의 문자열이 저장됨
a, b, c = input("3개 입력: ") # Error 발생!
# 올바른 방법 - split() 사용
a, b, c = input("3개 입력: ").split()
print(f'a={a}, b={b}, c={c}')
# 입력: 10 20 30
# 출력: a=10, b=20, c=30특정 구분자 사용:
# 콜론(:)으로 구분
hour, minute, second = input("시:분:초 형식입력: ").split(":")
print(f'hour={hour} minute={minute} second={second}')
# 입력: 2:22:54
# 출력: hour=2 minute=22 second=54
# 쉼표(,)로 구분
name, age, city = input("이름,나이,도시 입력: ").split(",")
print(f"이름: {name}, 나이: {age}, 도시: {city}")
# 입력: 홍길동,25,서울
# 출력: 이름: 홍길동, 나이: 25, 도시: 서울
# 하이픈(-)으로 구분
year, month, day = input("날짜 입력 (YYYY-MM-DD): ").split("-")
print(f"{year}년 {month}월 {day}일")
# 입력: 2024-01-15
# 출력: 2024년 01월 15일split()으로 나눈 값들은 여전히 문자열입니다. 숫자 연산을 위해 map() 함수를 사용합니다.
문제 상황:
# split()만 사용 - 문자열 상태
a, b, c = input("3개의 정수 입력: ").split()
print(a, b, c)
print(a + b + c)
# 입력: 10 20 30
# 출력: 10 20 30
# 출력: 102030 (문자열 연결!)map() 함수로 해결:
# map()을 사용하여 정수로 변환
a, b, c = map(int, input("3개의 정수 입력: ").split())
print(a, b, c)
print(a + b + c)
# 입력: 10 20 30
# 출력: 10 20 30
# 출력: 60 (정수 덧셈!)
# 실수로 변환
x, y, z = map(float, input("3개의 실수 입력: ").split())
print(f"합계: {x + y + z}")
# 입력: 1.5 2.5 3.0
# 출력: 합계: 7.0개수가 정해지지 않은 여러 값을 리스트로 받을 수 있습니다.
# 문자열 리스트
words = input("단어들을 입력하세요: ").split()
print(words)
# 입력: apple banana cherry
# 출력: ['apple', 'banana', 'cherry']
# 정수 리스트
numbers = list(map(int, input("숫자들을 입력하세요: ").split()))
print(numbers)
print(f"합계: {sum(numbers)}")
# 입력: 1 2 3 4 5
# 출력: [1, 2, 3, 4, 5]
# 출력: 합계: 15예제 1: 평균 계산
n = int(input())
total = sum(map(int, input().split()))
print("{:.2f}".format(total/n))
# 입력:
# 3
# 99 65 30
# 출력:
# 64.67예제 2: 좌표 입력
x, y = map(int, input("좌표 입력 (x y): ").split())
print(f"입력한 좌표: ({x}, {y})")
print(f"원점으로부터 거리: {(x**2 + y**2)**0.5:.2f}")
# 입력: 3 4
# 출력: 입력한 좌표: (3, 4)
# 출력: 원점으로부터 거리: 5.00예제 3: 학생 성적 처리
n = int(input("학생 수: "))
scores = []
for i in range(n):
name, score = input(f"{i+1}번째 학생 (이름 점수): ").split()
scores.append((name, int(score)))
print("\n=== 성적표 ===")
for name, score in scores:
print(f"{name}: {score}점")
avg = sum(score for _, score in scores) / n
print(f"평균: {avg:.1f}점")| 기능 | 사용법 | 예제 |
|---|---|---|
| 기본 출력 | print() |
print("Hello") |
| 줄바꿈 없이 출력 | print(..., end='') |
print("Hi", end='') |
| 구분자 변경 | print(..., sep=',') |
print(1, 2, 3, sep=',') |
| Raw String | r"문자열" |
r"C:\Users" |
| % 포맷팅 | "... %s" % 값 |
"%s님" % "홍길동" |
| format() | "...{}".format(값) |
"{}님".format("홍길동") |
| f-string | f"...{변수}" |
f"{name}님" |
| 기본 입력 | input() |
a = input() |
| 숫자 입력 | int(input()) |
n = int(input()) |
| 여러 값 입력 | input().split() |
a, b = input().split() |
| 숫자 여러 개 | map(int, input().split()) |
a, b = map(int, input().split()) |