1. 표준 입력
파이썬에서 사용자로부터 입력을 받는 가장 기본적인 방법은 input() 함수를 사용하는 것이다.
input() 함수는 프로그램 실행 중 사용자의 키보드 입력을 받아들인다.
1.1. input() 함수의 기본 사용법
input() 함수는 프롬프트 메시지를 선택적으로 받아 사용자에게 표시할 수 있다.
ex)
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")
위 코드를 실행하면 "이름을 입력하세요: "라는 프롬프트가 표시되고, 사용자가 이름을 입력하면 그 값이 name 변수에 저장된다.
1.2. input() 함수의 특징
input() 함수를 통해 입력받은 값은 항상 문자열(str) 타입이다.
숫자를 입력받아도 문자열로 저장되므로, 필요에 따라 형변환을 해주어야 한다.
ex)
age_str = input("나이를 입력하세요: ")
print(type(age_str)) # <class 'str'>
# 숫자로 변환
age = int(age_str)
print(type(age)) # <class 'int'>
# 한 줄로 작성
height = float(input("키를 입력하세요(cm): "))
print(f"당신의 키는 {height}cm입니다.")
입력값을 숫자로 사용하려면 int() 또는 float() 함수를 사용하여 형변환을 해야 한다.
1.3. 여러 값 입력받기
공백으로 구분된 여러 값을 입력받을 때는 split() 메서드를 사용한다.
ex)
# 공백으로 구분된 이름들 입력받기
names = input("이름을 공백으로 구분하여 입력하세요: ").split()
print(f"입력한 이름: {names}") # 리스트로 저장됨
# 공백으로 구분된 숫자들 입력받기
numbers = list(map(int, input("숫자들을 공백으로 구분하여 입력하세요: ").split()))
print(f"입력한 숫자들의 합: {sum(numbers)}")
# 특정 구분자로 구분된 값들 입력받기
data = input("데이터를 쉼표로 구분하여 입력하세요: ").split(',')
print(f"입력한 데이터: {data}")
split() 메서드는 기본적으로 공백을 구분자로 사용하지만, 인자로 다른 구분자를 지정할 수 있다.
2. 파이썬 표준 출력
파이썬에서 화면에 출력하는 가장 기본적인 방법은 print() 함수를 사용하는 것이다.
2.1. print() 함수의 매개변수
print() 함수는 다양한 옵션을 제공하는 여러 매개변수를 가지고 있다.
- sep: 여러 항목 사이에 삽입할 구분 문자열 (기본값은 공백)
- end: 출력 끝에 추가할 문자열 (기본값은 줄바꿈 문자 '\n')
- file: 출력을 보낼 파일 객체 (기본값은 표준 출력 스트림)
ex)
# sep 매개변수: 항목 사이의 구분자 지정
print("사과", "바나나", "오렌지", sep=", ") # 사과, 바나나, 오렌지
# end 매개변수: 출력 끝에 추가할 문자 지정 (기본값은 '\n')
print("Hello", end=" ")
print("World") # Hello World
# file 매개변수: 출력 위치 지정 (기본값은 sys.stdout)
with open("output.txt", "w") as f:
print("이 내용은 파일에 저장됩니다.", file=f)
2.2. 문자열 정렬과 형식 지정
문자열 메서드를 사용하여 출력 시 정렬과 형식을 지정할 수 있다.
- ljust(): 왼쪽 정렬 (지정한 너비에 문자열을 왼쪽으로 정렬하고 남은 공간을 공백으로 채움)
- rjust(): 오른쪽 정렬 (지정한 너비에 문자열을 오른쪽으로 정렬하고 남은 공간을 공백으로 채움)
- center(): 가운데 정렬
- zfill(): 지정한 너비로 문자열의 왼쪽을 0으로 채움
ex)
# ljust()
print("Python".ljust(10) + "프로그래밍") # Python 프로그래밍
# rjust()
print("Python".rjust(10) + "프로그래밍") # Python프로그래밍
# center()
print("Python".center(10) + "프로그래밍") # Python 프로그래밍
# zfill()
print("42".zfill(5)) # 00042
print("-42".zfill(5)) # -0042
이런 메서드들은 표 형태의 데이터나 숫자를 특정 형식으로 출력할 때 유용하다.
3. 문자열 포맷팅
파이썬에서는 다양한 문자열 포맷팅 방법을 제공한다.
특히 문자열의 format() 메서드는 복잡한 포맷팅 요구사항을 처리할 수 있다.
3.1. format() 메서드 기본
format() 메서드는 중괄호 {}를 사용하여 대체 필드를 지정하고, 이를 format()의 인자로 대체한다.
ex)
# 기본 사용법
print("Hello, {}!".format("Python")) # Hello, Python!
# 위치 인덱스 사용
print("{0}, {1}, {2}".format("하나", "둘", "셋")) # 하나, 둘, 셋
print("{2}, {1}, {0}".format("하나", "둘", "셋")) # 셋, 둘, 하나
# 키워드 인자 사용
print("이름: {name}, 나이: {age}".format(name="무무", age=7)) # 이름: 무무, 나이: 7
format() 메서드는 문자열 내의 중괄호를 해당 값으로 대체한다.
3.2. 포맷 지정자 문법
format() 메서드는 다양한 형식 지정을 위한 포맷 지정자(format specifier)를 지원한다.
포맷 지정자의 일반적인 형식은 다음과 같다.
{인덱스:[[빈칸 채우기]정렬][기호][공간 확보][쉼표][.자릿수][자료형]}
3.2.1. 정렬과 빈칸 채우기
- <: 왼쪽 정렬
- >: 오른쪽 정렬
- ^: 가운데 정렬
- 기본 빈칸 채우기는 공백이며, 다른 문자로 지정 가능
ex)
# 왼쪽 정렬 (< 사용)
print("|{:<10}|".format("Python")) # |Python |
# 오른쪽 정렬 (> 사용)
print("|{:>10}|".format("Python")) # | Python|
# 가운데 정렬 (^ 사용)
print("|{:^10}|".format("Python")) # | Python |
# 빈칸 채우기 지정
print("|{:*>10}|".format("Python")) # |****Python|
print("|{:0<10}|".format("Python")) # |Python0000|
3.2.2. 숫자 포맷팅
- +: 양수에도 부호 표시
- 숫자 앞의 공간 확보: 예) {:5d}, {:05d}
- ,: 천 단위 구분자 추가
- .자릿수f: 소수점 이하 자릿수 지정
ex)
# 기호 표시
print("{:+}".format(42)) # +42
print("{:+}".format(-42)) # -42
# 공간 확보
print("|{:5d}|".format(42)) # | 42|
print("|{:05d}|".format(42)) # |00042|
# 쉼표 추가 (천 단위 구분자)
print("{:,}".format(1234567890)) # 1,234,567,890
# 소수점 이하 자릿수 지정
print("{:.2f}".format(3.14159)) # 3.14
print("{:.5f}".format(3.14)) # 3.14000
3.2.3. 자료형 지정
- d: 10진수 정수
- f: 고정 소수점 실수
- e 또는 E: 지수 표기법
- x 또는 X: 16진수
- o: 8진수
- b: 2진수
- #: 0x, 0o, 0b와 같은 접두사 추가
ex)
# 정수 (d: decimal)
print("{:d}".format(42)) # 42
# 실수 (f: float)
print("{:f}".format(3.14159)) # 3.141590
# 지수 표기법 (e: exponent)
print("{:e}".format(1234567890)) # 1.234568e+09
print("{:.2e}".format(1234567890)) # 1.23e+09
# 16진수 (x: hex)
print("{:x}".format(255)) # ff
print("{:#x}".format(255)) # 0xff (# 접두사 추가)
# 8진수 (o: octal)
print("{:o}".format(8)) # 10
print("{:#o}".format(8)) # 0o10
# 2진수 (b: binary)
print("{:b}".format(10)) # 1010
print("{:#b}".format(10)) # 0b1010
4. 다양한 출력 형식
현대 파이썬에서는 문자열 포맷팅을 위한 여러 방법이 있다.
4.1. % 연산자 (오래된 방식)
C언어 스타일의 포맷팅으로, 레거시 코드에서 볼 수 있다.
ex)
name = "무무"
age = 7
print("이름: %s, 나이: %d" % (name, age)) # 이름: 무무, 나이: 7
% 연산자는 여전히 유효하지만, 새 코드에서는 더 현대적인 방식을 권장한다.
4.2. format() 메서드
앞서 설명한 format() 메서드는 강력하고 유연한 포맷팅을 제공한다.
ex)
name = "무무"
age = 7
print("이름: {}, 나이: {}".format(name, age)) # 이름: 무무, 나이: 7
4.3. f-문자열 (Python 3.6+)
현대 파이썬에서 가장 간결하고 직관적인 포맷팅 방법이다.
ex)
name = "무무"
age = 7
print(f"이름: {name}, 나이: {age}") # 이름: 무무, 나이: 7
# f-문자열에서도 포맷 지정자 사용 가능
pi = 3.14159
print(f"파이 값: {pi:.2f}") # 파이 값: 3.14
print(f"파이 값(가운데 정렬): {pi:^10.2f}") # 파이 값(가운데 정렬): 3.14
f-문자열은 간결하고 가독성이 좋아 현대 파이썬 코드에서 많이 사용된다.