[SW Expert Academy / 파이썬 프로그래밍 기초] 3. 기초 문법의 이해
Programming/Python

[SW Expert Academy / 파이썬 프로그래밍 기초] 3. 기초 문법의 이해

  • 목차
    • 숫자형의 특징
    • 문자열의 특징
    • 문자열 포맷팅
    • 주석 처리

 

리터럴 (Literal)

소스코드 상에서 내장 자료형의 상수 값을 나타내는 용어

>>> 15                  # 정수형 리터럴
15
>>> 3.14                # 부동소수점 숫자형 리터럴
3.14
>>> '파이썬'              # 문자열 리터럴
'파이썬'
>>> True                # 부울형 리터럴
True
>>> [1, 2, 3]           # 리스트형 리터럴
[1, 2, 3]

type() 함수

파이썬은 값에 의해 자료형이 결정되는 동적 타이핑 언어의 성격을 가지므로 type() 함수를 통해 자료형을 확인한다.

>>> type(15)
<class 'int'>           # 정수형
>>> type(3.14)
<class 'float'>         # 부동소수점 숫자형
>>> type('파이썬')
<class 'str'>           # 문자열형
>>> type(True)
<class 'bool'>          # 부울형
>>> type([1, 2, 3])
<class 'list'>          # 리스트형

 

 

1. 숫자형의 특징

숫자형

숫자 리터럴이 사용된 자료형

  • 정수형 : 5
  • 부동소수점형 : 3.14
  • 허수형 : 3 + 2j

 

정수형

>>> 7                    # 양의정수
7
>>> 0                    # 영
0
>>> -3                   # 음의정수
-3
>>> 79228162514264337593543950336
79228162514264337593543950336

# 정수형의 길이는 무제한이며, 메모리가 허용하는 범위까지 사용할 수 있음.

>>> 0o177                # 0o 접두어 : 8진수 사용
127
>>> 0o377
255
>>> 0xdeadbeef           # 0x 접두어 : 16진수 사용
3735928559
>>> 0b100110111          # 0b 접두어 : 2진수 사용
311

>>> 100_000_000_000      # 정수형 리터럴 내의 _는 무시됨
100000000000
>>> 0b_1110_0101
229

 

부동소수점형

>>> 3.14                 # 양의 부동소수점
3.14
>>> -2.4                 # 음의 부동소수점
-2.4
>>> 10.                  # 소수부 생략
10.0
>>> .001                 # 정수부 생략
0.001

# 매우 큰 수, 매우 정밀한 수를 표현하기 위해 지수 표기법 사용 가능
>>> 1e100
1e+100
>>> 3.14e-10
3.14e-10
>>> 0e0
0.0

>>> 3.14_15_93           # 부동소수점 숫자형 리터럴 내의 _는 무시됨
3.141593

 

허수형

# 파이썬의 허수형은 j 접미사를 사용함
>>> 3.14j
3.14j
>>> 10.j
10j
>>> 10j
10j
>>> .001j
0.001j
>>> 1e100j
1e+100j
>>> 3.14e-10j
3.14e-10j

# 허수형 리터럴 내의 _는 무시됨
>>> 3.14_15_93j
3.141593j

 

 

2. 문자열의 특징

문자열

문자들의 집합. "" , '' 파이썬은 자료형으로서의 문자형은 제공하지 않는다.

>>> "안녕하세요"                # 5음절의 문자열로, 문자열의 길이가 5임
'안녕하세요'
>>> "5"                      # 1음절의 문자열로, 문자열의 길이가 1임
'5'
>>> '홍길동'
'홍길동'
>>> '가'
'가'

따옴표 안에 따옴표를 사용할 수 있다.

>>> "'시간의 역사' 남기고 떠난 스티븐 호킹..."
"'시간의 역사' 남기고 떠난 스티븐 호킹..."
>>> '"시간의 역사" 남기고 떠난 스티븐 호킹...'
'"시간의 역사" 남기고 떠난 스티븐 호킹...'

그러나 같은 따옴표를 사용할 수는 없다. 같은 따옴표를 사용할 경우 이스케이프 시퀀스 \ 를 사용해야 한다.

>>> ''시간의 역사' 남기고 떠난 스티븐 호킹...'
SyntaxError: invalid syntax

# 작은 따옴표(') 문자 자체를 의미하는 이스케이프 시퀀스 작은따옴표(\') 문자 조합 사용
>>> '\'시간의 역사\' 남기고 떠난 스티븐 호킹...'
"'시간의 역사' 남기고 떠난 스티븐 호킹..."

문자열을 다중행으로 표현할 수 있다.

>>> """
안녕하세요
파이썬 프로그래밍을
시작합니다.
"""
'\n안녕하세요\n파이썬 프로그래밍을\n시작합니다.\n'

>>> print('\n안녕하세요\n파이썬 프로그래밍을\n시작합니다.\n')

안녕하세요
파이썬 프로그래밍을
시작합니다.

>>> print("""
안녕하세요
파이썬 프로그래밍을
시작합니다.
""")

안녕하세요
파이썬 프로그래밍을
시작합니다.

 

이스케이프 시퀀스

프로그램의 소스 코드 내에서 사용할 수 있도록 백슬래시() 기호와 조합해서 사용하는 사전에 정의해둔 문자 조합으로 문자열의 출력 결과를 제어하기 위해 사용함

  • \\ : 백슬래시 (\)
>>> print("백슬래시\\")
백슬래시\

# 백슬래시(\) 하나를 사용할 경우:
# 백슬래시(\)와 큰 따옴표(")의 이스케이프 문자 조합이 또 다른 이스케이프 시퀀스가 됨.
  • \' : 작은따옴표 (')
>>> print("작은 따옴표 \'를 출력합니다."
작은 따옴표 '를 출력합니다.

# 작은 따옴표(')는 문자열 리터럴을 만들 때 사용됨:
# 작은 따옴표(') 자체를 의미하려면, 백슬래시(\)와의 이스케이프 문자 조합이 필요
  • \" : 큰따옴표 (")
>>> print("큰 따옴표 \"를 출력합니다."
작은 따옴표 "를 출력합니다.

# 큰 따옴표(")는 문자열 리터럴을 만들 때 사용됨:
# 큰 따옴표(") 자체를 의미하려면, 백슬래시(\)와의 이스케이프 문자 조합이 필요
  • \n : 라인 피드 (LF) — 줄바꿈
  • \t : 수평 탭(TAB) — 탭
>>> print("****\t****\t****\n****\t****\t****")
****    ****    ****
****    ****    ****

 

 

3. 문자열 포맷팅

문자열 포맷팅

문자열 내에 사용된 문자열 표시 유형(문자열 포맷 코드)을 특정 값으로 변경하는 기법

파이썬은 % 포맷팅, str.format() 함수를 이용한 문자열 포맷팅을 제공한다.

%-포맷팅을 사용한 문자열 포맷팅

유형 내용
%s 문자열 포맷
%c 문자 포맷. 정수를 유니코드 문자로 변환해 출력
%d 10진 정수로 출력
%o 8진수로 출력
%x 16진수로 출력
%f 부동소수점 숫자로 출력. 소수점 이하 6자리의 정밀도를 기본값으로 가짐
%% % 문자 자체를 출력
# %s : % 다음의 값을 문자열로 변환해 처리하는 기능을 가짐.

>>> "이름: %s" % "홍길동"
'이름: 홍길동'
>>> "나이: %s 세" %20
'나이: 20 세'
>>> "결혼: %s" % False
'결혼: False'
>>> "키: %s cm" %180.5
'키: 180.5 cm'

# 자료구조 튜플 사용, 각 원소를 인자로 각각의 %s에 전달함
>>> "이름: %s\n나이: %s세 " % ("홍길동", 20)
'이름: 홍길동 \n나이: 20세 '

# 자료구조 사전 사용
>>> "이름: %(name)s \n나이: %(age)s세 " % {"name" : "홍길동", "age" : 20}
'이름: 홍길동 \n나이: 20세 '

# %c, %d로 문자열 포맷팅 적용
>>> "%c => %d" % (97, 97)
'a => 97'

# %d, %o, %x로 문자열 포맷팅 적용
>>> "%d %o %x" %(10, 10, 10)
'10 12 a'

# ord : 유니코드 '가'에 대한 정수값
>>> "%s %d %x" % ("가", ord("가"), ord("가"))
'가 44032 ac00'

# %f로 문자열 포맷팅 적용
>>> "%f %d" % (3.14, 3.14)
'3.140000 3'

# %%로 문자열 포맷팅 적용
>>> "%d 점은 상위 %d%%에 속합니다." %(98,1)
'98 점은 상위 1%에 속합니다.'

 

문자열 출력 폭과 정렬 방향

>>> "%10s" % "우측정렬"      # 출력할 문자열의 폭이 10, 정렬의 방향이 우측임
'      우측정렬'
>>> "%-10s" % "좌측정렬"     # 출력할 문자열의 폭이 10, 정렬의 방향이 좌측임
'좌측정렬      '

 

부동소수점 숫자의 출력 폭 지정, 소수점 이하의 정밀도 표현 적용

>>> "%0.2f" % 3.141592     # 부동소수점을 소수점 2자리까지 표시함
'3.14'
>>> "%10.2f" % 3.141592    # 부동소수점을 소수점을 포함한 전체 자리수를 10으로 함
'      3.14'
>>> "%010.2f" % 3.141592   # 앞의 남은 자리를 0으로 채움
'0000003.14'

str.format()함수를 이용한 문자열 포맷팅

# 값의 위치 이용
# str.format() 함수에서 전달할 인자의 위치 인덱스는 0부터 시작함.
>>> "이름: {0}, 나이: {1} 세".format("홍길동", 20)
'이름: 홍길동, 나이: 20 세'
>>> "이름: {}, 나이: {} 세".format("홍길동", 20)        # 생략할 경우 순차적으로 적용
'이름: 홍길동, 나이: 20 세'"

# 문자열 내의 {}에서 : 뒤에 문자열 표시 유형을 사용해 포맷 지정
>>> "{0:c} => {1}".format(97, 97)                  # 0을 유니코드 문자 a로 변환
'a => 97'
>>> "{0}, {1}, {2:x}".format('가', ord("가"), ord("가"))
'가, 44032, ac00'
>>> "{0:f} {1:.2f}".format(3.14, 3.14)
'3.140000 3.14'

# 이름 이용
# str.format() 함수에서 이름 = 값 형식으로 인자를 구성하면 이름을 이용해 인자 전달
>>>  "이름: {name}, 나이: {age} 세".format(name='홍길동', age=20)
'이름: 홍길동, 나이: 20 세'

# 문자열 폭, 정렬방향 지정
>>>  "{0:<10}".format("좌측정렬")                     # 정렬의 방향이 좌측, 문자열의 폭이 10
'좌측정렬      '
>>>  "{0:>10}".format("우측정렬")
'      우측정렬'
>>>  "{0:^10}".format("중앙정렬")
'   중앙정렬   '
>>> "{0:*^10}".format("중앙정렬")                     # 공백을 채울 문자 *
'***중앙정렬***'

# 부동소수점 숫자 폭, 소수점 이하 정밀도 표현
>>> "{0:0.2f}".format(3.141592)
'3.14'
>>> "{0:10.2f}".format(3.141592)
'      3.14'
>>> "{0:010.2f}".format(3.141592)                   # 앞의 남은 자리를 0으로 채움
'0000003.14'
>>> "{{ {0:.1f} }}".format(98.5)                    # 대괄호를 그대로 포함
'{ 98.5 }'

 

 

4. 주석 처리

주석

프로그램의 코드 앞에 #을 붙여 작성된 부분으로, 소스 코드에 대한 상세 설명을 달거나 특정 코드를 실행하지 않을 목적으로 사용함.

인터프리터의 문법 검사에서 무시되고 실행되지 않음.