콘텐츠로 이동

1단원 과제 정답: 데이터 타입과 변수


문제 1. 나눗셈 연산자의 비밀

① 2.0
② 2
③ <class 'float'>
④ <class 'int'>
⑤ True
⑥ False

해설

항목 결과 이유
10 / 5 2.0 /는 항상 float 반환
10 // 5 2 //는 몫 연산, int 반환
2.0 == 2 True 값은 같음 (암시적 타입 변환)
type(2.0) == type(2) False floatint, 타입은 다름

⑤에서 값이 같아도 ⑥에서 타입이 다르다는 게 핵심 함정입니다.


문제 2. bool은 int인가?

① 2
② 1
③ 10
④ <class 'int'>
⑤ True
⑥ False

해설

항목 결과 이유
True + True 2 True = 1, False = 0으로 계산
type(True + True) <class 'int'> bool 연산 결과는 int (bool 아님!)
True == 1 True 값이 같음
type(True) == type(1) False boolint

④에서 True + True의 결과 타입이 bool이 아닌 int라는 점이 함정입니다. ⑤와 ⑥을 비교해보면, 값은 같아도 타입은 다릅니다.


문제 3. 타입 변환의 함정

① 3
② 3
③ True
④ False
⑤ False
⑥ <class 'str'>

해설

항목 결과 이유
int(3.9) 3 반올림이 아닌 버림 (소수점 이하 제거)
int(float("3.14")) 3 int("3.14")는 오류 → float 거쳐야 함
bool("0") True 비어있지 않은 문자열은 모두 True
bool(0) False 숫자 0False
bool("") False 빈 문자열만 False
type(str(True)) <class 'str'> str(True) → 문자열 "True"

③이 가장 큰 함정입니다. 문자열 "0"은 숫자 0이 아니라 문자열이므로 True입니다. ④와 비교해보면 같은 0이어도 숫자 vs 문자열에 따라 결과가 다릅니다.


문제 4. 변수는 값의 별명

① 15
② 10
③ True
④ False

해설

a = 10       →  a ──→ [10]
b = a        →  a ──→ [10] ←── b
a = a + 5    →  a ──→ [15]   [10] ←── b
항목 결과 이유
15 a = 10 + 5 로 재대입됨
10 ba의 이전 값 10을 가리킴, a가 바뀌어도 영향 없음
True 둘 다 int 타입
False a15, b10 — 서로 다른 값이므로 주소도 다름

b = a는 b가 a의 값(10) 을 가리키게 할 뿐, a를 "추적"하는 것이 아닙니다.


문제 5. 쇼핑 계산기

price    = int(input("단가 (원): "))
quantity = int(input("수량: "))

subtotal = price * quantity
tax      = subtotal / 10
total    = subtotal + tax

print("---")
print("소계:", subtotal)
print("부가세:", tax)
print("합계:", total)
print("합계 타입:", type(total))
print("합계 (정수):", int(total))

빈칸 정답

빈칸 정답 이유
price ______ quantity * 단가 × 수량 = 소계
subtotal ______ 10 / /는 항상 float 반환 → 부가세가 600.0
______(total) (타입) type 타입 확인 함수
______(total) (정수) int float → int 변환

함정: // 10을 쓰면 부가세가 int(600)이 되어 실행 예시(600.0)와 다르게 출력됩니다.