Skip to content

Latest commit

 

History

History

step01_base

README.md

step01_base — 출력 · 자료형 · 문자열 포매팅

학습 순서 1번. 파이썬의 첫 줄부터 시작합니다.

학습 목표

  • print() 로 출력하고, 주석을 세 가지 방식으로 단다
  • 변수에 값을 대입하고 자료형을 구분한다 — 문자열 · 정수 · 실수 · 복소수
  • print 에서 + 와 , 의 차이를 안다 (여기서 초보자가 가장 많이 막힙니다)
  • % 문자열 포매팅으로 출력 형식을 다듬는다

파일 지도

파일 내용
helloPython.py 첫 출력 + PyCharm 단축키 메모
dataType1.py 자료형 5종, + vs ,, str() 변환
dataType2.py ★ % 포매팅 — %s %d %c %f 와 자릿수·정렬 지정
sumTest.py 주석 3종, 산술 연산, 특수문자 이름 목록
nameCard.py \n 줄바꿈
test1.py 연습문제 — 국어·수학 점수 출력
test2.py 연습문제 — 이름·3과목·총점 출력

실행 방법

python3 step01_base/helloPython.py
python3 step01_base/dataType2.py

전부 키보드 입력 없이 바로 실행됩니다.

짚고 갈 지점

+ 와 , 는 다르다

print('이름 : ' + name)    # 문자열끼리 이어 붙인다
print('이름 : ', name)     # 여러 값을 나열한다 (사이에 공백이 자동으로 들어간다)

결과가 미묘하게 다릅니다. , 는 값 사이에 공백을 하나 넣어 줍니다. 그래서 '이름 : ' 처럼 이미 공백을 넣어 두면 공백이 둘이 됩니다.

더 중요한 차이는 타입입니다.

print('나이 : ' + age)        # TypeError! 문자열 + 정수는 안 된다
print('나이 : ', age)         # OK. , 는 타입을 가리지 않는다
print('나이 : ' + str(age))   # OK. str() 로 바꿔 주면 된다

+ 는 "문자열끼리만" 이어 붙일 수 있습니다. 숫자를 섞으려면 str() 로 변환해야 합니다. dataType1.py 가 이 세 줄을 나란히 놓고 보여 줍니다.

% 포매팅 읽는 법

user = '이름 : %s\n나이 : %-10d\n' % ('뽀로로', 23)
#      └────── 템플릿 ──────────┘  ↑  └── 값 ──┘
#                            포매팅 연산자

값이 둘 이상이면 튜플로 묶어야 합니다. 하나면 그냥 써도 됩니다.

지시어 의미
%s 문자열
%d 정수
%c 문자 하나
%f 실수 (기본 소수점 6자리)

숫자를 붙이면 폭과 정밀도를 지정합니다. dataType2.py 의 tall 4형제를 실행해 비교해 보세요.

'%f'      % 183.4   # 183.400000   기본
'%.2f'    % 183.4   # 183.40       소수점 2자리
'%10.2f'  % 183.4   # '    183.40' 전체 10칸, 오른쪽 정렬
'%-10.2f' % 183.4   # '183.40    ' 전체 10칸, 왼쪽 정렬 (- 가 왼쪽 정렬)

주석 세 가지

# 한 줄 주석

'''
여러 줄 주석
'''

"""
    Doc String — 함수·클래스 바로 아래 쓰면 설명서가 된다
"""

''' 와 """ 는 사실 주석이 아니라 문자열입니다. 아무 데도 대입하지 않아 그냥 버려질 뿐이라 주석처럼 쓰입니다. 그래서 sumTest.py 의 특수문자 목록 같은 것도 여기 넣을 수 있습니다.

sumTest.py 의 특수문자 목록에는 백슬래시(\)가 들어 있습니다. 문자열 안의 \ 는 특별한 뜻이 있어서 Python 3.12부터 경고가 나고 앞으로는 에러가 됩니다. 그래서 이 파일은 r''''' 로 시작하는 raw string(있는 그대로 읽는 문자열)으로 바꿔 두었습니다.

지금은 이렇게 바뀌었습니다

f-string 이 표준입니다. Python 3.6부터 쓸 수 있었지만 이 수업 시점에는 아직 % 를 먼저 가르쳤습니다.

# 이 챕터
print('이름 : ' + name)
print('나이 : ' + str(age))
user = '이름 : %s\n나이 : %-10d\n' % ('뽀로로', 23)

# 지금
print(f'이름 : {name}')
print(f'나이 : {age}')          # str() 불필요 — 알아서 문자열로 바꾼다
user = f'이름 : {name}\n나이 : {age:<10d}\n'

f-string은 값이 쓰이는 자리에 그대로 보여서 읽기 쉽습니다. % 방식은 템플릿과 값이 떨어져 있어 개수가 많아지면 짝을 맞추기 어렵습니다.

정렬·자릿수 지정도 그대로 됩니다.

f'{183.4:.2f}'      # '183.40'
f'{183.4:10.2f}'    # '    183.40'
f'{183.4:<10.2f}'   # '183.40    '   (%- 대신 < 를 쓴다)

그렇다고 % 를 몰라도 되는 건 아닙니다. 오래된 코드와 로깅(logging)에서 여전히 만납니다.

연습 과제

  1. dataType1.py 에서 print('나이 : ' + age) 를 직접 써 보고 TypeError 메시지를 읽어 보세요. 어떤 타입끼리 안 된다고 하나요?
  2. dataType2.py 의 출력을 전부 f-string으로 바꿔 결과가 같은지 확인하세요.
  3. test2.py 에 평균을 추가하고 소수점 둘째 자리까지 출력하세요.
  4. nameCard.py 를 f-string 한 줄로 다시 쓰세요.
  5. complex_num = 3+4.07j 의 실수부와 허수부를 각각 꺼내 출력하세요. (힌트: .real, .imag)