TOC
참고 강의
SWEA 파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법 #3
Literal
소스코드 상에서 내장 자료형의 상수 값을 나타내는 용어
Literal의 종류
- 정수형 리터럴 : 15
- 부동소수점 숫자형 리터럴 : 3.14
- 문자열 리터럴 : '파이썬'
- 부울형(Boolean) 리터럴 : True
- 리스트형 리터럴 : [1, 2, 3]
type() 함수
- Literal의 자료형을 확인할 때 사용하는 함수
- Python은 값에 의해 자료형이 결정되는 동적 타이핑 언어의 성격을 가지기 때문에 자료형의 확인이 필요한 경우가 종종 발생
>>> type(15)
<class 'int'> # 정수형
>>> type(3.14)
<class 'float'> # 부동소수점 숫자형
>>> type('파이썬')
<class 'str'> # 문자열형
>>> type(True)
<class 'bool'> # 부울형
>>> type([1, 2, 3])
<class 'list'> # 리스트형
숫자형
정수형
- 5, 10, 0, -3
- 메모리가 허락하는 한 무한히 긴 숫자도 가능
- 0o접두어 : 8진수 (ex. 0o177 = 127)
- 0x접두어 : 16진수 (ex. 0xdeadbeef = 373528559)
- 0b접두어 : 2진수 (ex. 0b100110111 = 311)
- 정수형 Literal 내의 '_' 는 무시됨.
- 100_000_000_000 = 100000000000
- 0b_1110_0101 = 229
부동 소수점형
- 3.14, -10.5
>>> 10.
10.0 # 소수부 생략
>>> .001
0.001 # 정수부 생략
>>> 3.14_159_3
3.141593 # underbar 무시
- 매우 큰 수와 정밀한 수를 표현하기 위해 지수 표기법 사용 가능
>>> 1e100
1e+100
>>> 3.14e-10
3.14e-10
>>> 0e0
0.0
허수형
주의 : Python에서 허수형은 i 대신 j를 사용한다!
>>> 3.14j
3.14j
>>> 10.j
10j # 소수부 생략 가능
>>> .001j
0.001j # 정수부 생략 가능
>>> 1e100j
1e+100j # 지수 표기 가능
>>> 3.14_15_93j
3.141593j # underbar 무시
문자열
- 파이썬은 자료형으로서의 문자형은 제공하지 않음!
- 길이가 어떻든
문자열
로 취급 - 다행 문자열 ' 또는 " 3개로 범위 묶기
a = """
안녕하세요.
파이썬 프로그래밍을
시작합니다."
"""
print(a)
안녕하세요.
파이썬 프로그래밍을
시작합니다."
Escape Sequence
프로그램 소스 코드 내에서 사용할 수 있도록 백슬래시(\) 기호와 조합해서 사용하는 사전에 정의해둔 문자 조합. 주로 문자열의 출력 결과를 제어하기 위해 사용
\\
백슬래시 자체를 출력하고 싶을 때
>>> print("백슬래시\\")
백슬래시\
\'
, \"
작은 따옴표나 큰 따옴표 자체를 출력하고 싶을 때
print('작은 따옴표 \'를 출력합니다.')
print("큰 따옴표 \"를 출력합니다.")
작은 따옴표 '를 출력합니다.
큰 따옴표 "를 출력합니다.
\n
라인 피드(LF; Line Feed). 즉, 줄바꿈을 하는 용도로 사용
\t
수평 탭(TAB)을 사용할 때 사용한다.
>>> print("****\t****\t****\n****\t****\t****")
**** **** ****
**** **** ****
문자열 포맷팅
문자열 내에 사용된 문자열 표시 유형(문자열 포맷 코드)을 특정 값으로 변경하는 기법 Python은 %-포맷팅, str.format() 함수를 이용한 문자열 포맷팅 제공
%- 포맷팅을 사용
s
: 문자열 포맷c
: 문자 포맷. 정수를 유니코드 문자로 변환해 출력d
: 10진 정수로 출력o
: 8진수로 출력x
: 16진수로 출력f
: 부동소수점 숫자로 출력. 소수점 이하 6자리의 정밀도를 기본값으로 가짐%
: % 문자 자체를 출력
>>> print("이름 : %s" % "홍길동")
이름 : 홍길동
>>> print("나이 : %s 세" % 20)
나이 : 20세
>>> print("결혼 : %s" % False)
결혼 : False
>>> print("키 : %s cm" % 180.5)
키 : 180.5 cm
# 2개 이상의 인자를 사용하기 위해 자료구조 tuple()을 사용하는 경우
>>> print("이름 : %s\n나이 : %s 세" % ("홍길동", 20))
이름 : 홍길동
나이 : 20세
# 2개 이상의 인자를 사용하기 위해 자료구조 dictionary{}를 사용하는 경우
>>> print("이름 : %(name)s\n나이 : %(age)s 세" % {"name":"홍길동", "age":20})
이름 : 홍길동
나이 : 20세
- %c, %d 이용
>>> print("%c => %d" % (97, 97))
# %c : 정수를 유니코드 문자로 변환해 출력
# %d : 숫자를 10진 정수로 출력
a => 97
- %d, %o, %x 이용
>>> print("%d %o %x" % (10, 10, 10))
# %o : 8진수 형태로 문자열 변환
# %x : 16진수 형태로 문자열 변환
10 12 a
- ord() 함수 이용
>>> print("%s %d %x" % ("가", ord("가"), ord("가")))
가 44032 ac00
- %f 이용
>>> print("%f %d" % (3.14, 3.14))
# %f : 소수점 6자리 수까지 표현
# %d : 소수의 정수부만 표현
3.140000 3
# 소수점의 출력 폭 및 정밀도 표현
>>> "%0.2f" % 3.141593 # 소수점 이하 2자리까지 표시
3.14
>>> "%10.2f" % 3.141593
# 소수점 이하 2자리까지 표시
# 소수점을 포함한 전체 자리수를 10으로 함
' 3.14' # 좌측에 6개의 공백
>>> "010.2f" % 3.141593
# 소수점을 포함한 전체 자릿수를 10
# 소수점 이하 2자리까지 표시
# 앞의 공백을 0으로 채움
0000003.14
- %% 이용
>>> print("%d 점은 상위 %d%%에 속합니다." % (98, 1))
98 점은 상위 1%에 속합니다.
- 문자열 출력 폭과 정렬 방향
>>> print("%10s" % "우측정렬") # 문자열의 폭이 10, 정렬의 방향이 우측
' 우측정렬' # 우측정렬 텍스트 4칸과 좌측 공백 6칸
>>> print("%-10s" % "좌측정렬") # 문자열의 폭이 10, 정렬의 방향이 좌측
'좌측정렬 ' # 좌측정렬 텍스트 4칸과 우측 공백 6칸
str.format() 함수
>>> print("이름: {0}, 나이: {1} 세".format("홍길동", 20))
이름: 홍길동, 나이: 20세
# 위치 index를 생략한 경우
# 순서대로 배치
>>> print("이름: {}, 나이: {} 세".format("홍길동", 20))
이름: 홍길동, 나이: 20세
# 위치 index를 비순차적으로 하는 경우
# 해당하는 index의 인자를 가져옴
>>> print("나이: {1} 세, 이름: {0}".format(20, "홍길동") )
나이: 20세, 이름: 홍길동
format을 지정하는 경우
>>> print("{0:c} => {1}".format(97, 97))
# {0:c}는 숫자 97을 유니코드 문자 a(No.97)로 변환
# {1}은 숫자 97을 그대로 끌고 옴
a => 97
>>> print("{0:f}, {1:.2f}".format(3.14, 3.14))
3.140000, 3.14
- 이름을 이용하는 경우
>>> print("이름: {name}, 나이: {age} 세".format(name="홍길동", age=20))
이름: 홍길동, 나이: 20 세
- ord함수를 이용하는 경우
>>> print("{0}, {1}, {2:x}".format("가", ord("가"), ord("가")))
# %c % 97 이 97 에 해당하는 유니코드인 a를 도출한다면
# ord("a")는 a의 유니코드 숫자인 97을 도출하는 반대의 역할
가, 44032, ac00
- 정렬 방향을 지정하는 경우
>>> print("{0:<10}".format("좌측정렬"))
# '<'은 정렬의 방향이 좌측임을 의미
# 10은 문자열의 총 길이가 10임을 의미
'좌측정렬 '
>>> print("{0:>10}".format("우측정렬"))
# '>'은 정렬의 방향이 우측임을 의미
# 10은 문자열의 총 길이가 10임을 의미
' 우측정렬'
>>> print("{0:^10}".format("중앙정렬"))
# '^'은 정렬의 방향이 중앙임을 의미
# 10은 문자열의 총 길이가 10임을 의미
' 중앙정렬 '
>>> print("{0:*^10}".format("중앙정렬"))
# '*'은 공백을 채울 문자
'***중앙정렬***'