학습 순서 2번. 프로그램이 바깥에서 값을 받기 시작합니다.
- 문자와 숫자가 컴퓨터 안에서 어떻게 연결되는지 안다 (
ord/chr) - 형변환 함수
int()·float()·str()를 쓰고type()으로 확인한다 input()은 무엇을 입력하든 항상 문자열을 돌려준다는 것을 안다- 실수를 정수로 바꿀 때 무슨 일이 일어나는지 안다
| 파일 | 내용 |
|---|---|
asciiCode.py |
ord() / chr() — 문자 ↔ 숫자 |
parseInt.py |
★ int() 변환, type() 확인, + 의 두 가지 의미 |
castingEx.py |
실수 → 정수 절삭, (주석) 총점·평균 계산 |
inputTest1.py |
input() 기본 — 이름·성별·나이·신장·체중 |
inputTest2.py |
연습문제 — 두 수를 입력받아 더하기 |
python3 step02_operator/asciiCode.py # 입력 불필요
python3 step02_operator/parseInt.py # 입력 불필요
python3 step02_operator/castingEx.py # 입력 불필요
python3 step02_operator/inputTest1.py # ← 프롬프트가 뜹니다
python3 step02_operator/inputTest2.py # ← 프롬프트가 뜹니다parseInt.py 가 이 챕터의 핵심입니다.
a = '100' # 문자열
b = '200'
a1 = int(a) # 숫자 100
b1 = int(b)
print(a + b) # 100200 ← 이어 붙이기
print(a1 + b1) # 300 ← 더하기같은 + 인데 결과가 다릅니다. 파이썬은 좌우 값의 타입을 보고 무슨 일을 할지 정합니다. 문자열이면 이어 붙이고, 숫자면 더합니다.
그래서 항상 type() 으로 확인하는 습관이 필요합니다.
print(type(a)) # <class 'str'>
print(type(a1)) # <class 'int'>age1 = int(input('나이를 입력하세요 : ')) # 숫자로 바꿔서 받는다
age2 = input('나이를 입력하세요 : ') # 문자열 그대로 받는다inputTest1.py 는 나이를 두 번 물어봅니다. 같은 값을 넣어도 하나는 숫자, 하나는 문자열입니다. 출력 방식도 달라집니다.
print('나이는 ', age1, '세입니다') # , 는 타입 안 가림
print('나이는 ' + age2 + '세입니다') # + 는 문자열이라 가능age1 을 + 로 이으려 하면 TypeError 가 납니다. 직접 해 보세요.
parseInt.py의 주석이 요점을 짚습니다 — "키보드 파일 웹에서 읽어오는 데이터는 모두 문자열". 바깥에서 들어오는 값은 일단 전부 문자열이고, 계산하려면 변환해야 합니다.
pay = 857650
tax = 0.088
rPay = pay - (pay * tax)
print("실 수령액 : ", rPay) # 781677.2
print("실 수령액 : ", int(rPay)) # 781677 ← 반올림이 아니라 버림int() 는 소수점 아래를 그냥 잘라 냅니다. 반올림이 필요하면 round() 를 씁니다. 돈 계산에서 이 차이는 중요합니다.
castingEx.py 의 주석에 있는 줄입니다.
c = '73.45'
print(int(c)) # ValueError!
print(int(float(c))) # 73 ← 실수로 먼저 바꾼 뒤 정수로int() 는 "정수처럼 생긴 문자열"만 받습니다. 소수점이 있으면 float() 를 거쳐야 합니다.
print(ord('A')) # 65 문자 → 숫자
print(chr(65)) # A 숫자 → 문자'A' 는 65, 'a' 는 97입니다. 대소문자 차이가 정확히 32라는 걸 확인해 보세요.
asciiCode.py 에 주석 처리된 print(chr('A')+1) 이 있습니다. chr() 는 숫자를 받는데 문자를 넘겨서 에러가 납니다. 왜 안 되는지 생각해 보세요.
-
출력은 f-string이 편합니다.
print(f'이름은 {name}입니다') print(f'실 수령액 : {rPay:,.0f}원') # 781,677원 — 천 단위 쉼표까지
-
input()을int()로 감싸면 사용자가 숫자가 아닌 걸 넣었을 때ValueError로 프로그램이 죽습니다. 실무에서는try/except로 감싸 다시 묻습니다.while True: try: age = int(input('나이 : ')) break except ValueError: print('숫자를 입력하세요.')
-
아스키(7비트)는 영어만 담습니다. 한글을 포함한 지금의 표준은 유니코드이고, 파이썬 3의 문자열은 처음부터 유니코드입니다.
ord('가')를 찍어 보면 65보다 훨씬 큰 값이 나옵니다.
inputTest1.py에서print('나이는 ' + age1 + '세입니다')를 시도해TypeError를 직접 보세요.castingEx.py의 주석 처리된 총점·평균 블록을 살려 실행하세요.inputTest2.py에 사칙연산을 전부 추가하세요. 나눗셈에서0을 입력하면 어떻게 되나요?- 위 3번의
ZeroDivisionError와 숫자가 아닌 입력의ValueError를try/except로 각각 다르게 처리하세요. ord('가')와ord('힣')를 출력하고, 그 사이에 한글 글자가 몇 개 있는지 계산하세요.