소개
이 섹션에서는 수학적 계산에 대해 논의합니다.
숫자 유형
Python 에는 4 가지 유형의 숫자가 있습니다.
- 부울 (Booleans)
- 정수 (Integers)
- 부동 소수점 (Floating point)
- 복소수 (Complex) (허수)
부울 (bool)
부울은 두 가지 값을 가집니다: True, False.
a = True
b = False
수치적으로, 부울은 값 1, 0을 가진 정수로 평가됩니다.
c = 4 + True ## 5
d = False
if d == 0:
print('d is False')
하지만, 그런 코드는 작성하지 마세요. 이상할 것입니다.
정수 (int)
임의 크기 및 기수의 부호 있는 값:
a = 37
b = -299392993727716627377128481812241231
c = 0x7fa8 ## 16 진수 (Hexadecimal)
d = 0o253 ## 8 진수 (Octal)
e = 0b10001111 ## 2 진수 (Binary)
일반적인 연산:
x + y 더하기 (Add)
x - y 빼기 (Subtract)
x * y 곱하기 (Multiply)
x / y 나누기 (Divide) (부동 소수점 생성)
x // y 정수 나누기 (Floor Divide) (정수 생성)
x % y 나머지 (Modulo) (나머지)
x ** y 거듭제곱 (Power)
x << n 비트 왼쪽 시프트 (Bit shift left)
x >> n 비트 오른쪽 시프트 (Bit shift right)
x & y 비트 AND (Bit-wise AND)
x | y 비트 OR (Bit-wise OR)
x ^ y 비트 XOR (Bit-wise XOR)
~x 비트 NOT (Bit-wise NOT)
abs(x) 절댓값 (Absolute value)
부동 소수점 (float)
부동 소수점 값을 지정하려면 십진수 또는 지수 표기법을 사용합니다:
a = 37.45
b = 4e5 ## 4 x 10**5 or 400,000
c = -1.345e-10
부동 소수점은 네이티브 CPU 표현 IEEE 754를 사용하여 배정밀도로 표현됩니다. 이는 프로그래밍 언어 C 의 double 유형과 동일합니다.
정밀도 17 자리
지수 -308 에서 308 까지
부동 소수점 숫자는 십진수를 표현할 때 정확하지 않다는 점에 유의하십시오.
>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>
이것은 Python 문제가 아니라, CPU 의 기본 부동 소수점 하드웨어 문제입니다.
일반적인 연산:
x + y 더하기 (Add)
x - y 빼기 (Subtract)
x * y 곱하기 (Multiply)
x / y 나누기 (Divide)
x // y 정수 나누기 (Floor Divide)
x % y 나머지 (Modulo)
x ** y 거듭제곱 (Power)
abs(x) 절댓값 (Absolute Value)
이들은 비트 연산자를 제외하고 정수와 동일한 연산자입니다. 추가 수학 함수는 math 모듈에서 찾을 수 있습니다.
import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)
비교 (Comparisons)
다음 비교/관계 연산자는 숫자와 함께 작동합니다:
x < y 미만 (Less than)
x <= y 이하 (Less than or equal)
x > y 초과 (Greater than)
x >= y 이상 (Greater than or equal)
x == y 같음 (Equal to)
x != y 같지 않음 (Not equal to)
다음 연산자를 사용하여 더 복잡한 부울 표현식을 구성할 수 있습니다:
and, or, not
다음은 몇 가지 예입니다:
if b >= a and b <= c:
print('b is between a and c')
if not (b < a or b > c):
print('b is still between a and c')
숫자 변환 (Converting Numbers)
유형 이름을 사용하여 값을 변환할 수 있습니다:
a = int(x) ## x 를 정수로 변환
b = float(x) ## x 를 부동 소수점으로 변환
시도해 보세요.
>>> a = 3.14159
>>> int(a)
3
>>> b = '3.14159' ## 숫자 문자열도 작동합니다.
>>> float(b)
3.14159
>>>
알림: 이 연습은 ~/project 디렉토리에서 작업한다고 가정합니다. mortgage.py 파일을 찾아보세요.
연습 문제 1.7: Dave 의 모기지 (mortgage)
Dave 는 Guido's Mortgage, Stock Investment, and Bitcoin trading corporation 에서 30 년 고정 금리 모기지 $500,000 을 받기로 결정했습니다. 이자율은 5% 이고 월별 납입금은 $2684.11 입니다.
다음은 Dave 가 모기지 기간 동안 지불해야 하는 총액을 계산하는 프로그램입니다:
## mortgage.py
principal = 500000.0
rate = 0.05
payment = 2684.11
total_paid = 0.0
while principal > 0:
principal = principal * (1+rate/12) - payment
total_paid = total_paid + payment
print('Total paid', total_paid)
이 프로그램을 입력하고 실행하십시오. 966279.5999999957의 답을 얻어야 합니다.
연습 문제 1.8: 추가 납입 (Extra payments)
Dave 가 모기지 첫 12 개월 동안 매달 $1000 을 추가로 납입한다고 가정해 봅시다.
이 추가 납입을 포함하도록 프로그램을 수정하고, 납입한 총액과 필요한 개월 수를 함께 출력하도록 하세요.
새 프로그램을 실행하면 342 개월 동안 총 납입액이 929965.6199999959로 보고되어야 합니다.
연습 문제 1.9: 추가 납입 계산기 만들기
추가 납입 정보를 보다 일반적으로 처리할 수 있도록 프로그램을 수정하십시오. 사용자가 다음 변수를 설정할 수 있도록 만드세요:
extra_payment_start_month = 61
extra_payment_end_month = 108
extra_payment = 1000
프로그램이 이러한 변수를 확인하고 적절하게 총 납입액을 계산하도록 하세요.
Dave 가 처음 5 년이 지난 후 4 년 동안 매달 $1000 을 추가로 납입하면 얼마를 지불하게 될까요?
연습 문제 1.10: 테이블 만들기
프로그램을 수정하여 월, 지금까지 납입한 총액, 그리고 남은 원금을 보여주는 테이블을 출력하도록 하세요. 출력 결과는 다음과 유사해야 합니다:
1 2684.11 499399.22
2 5368.22 498795.94
3 8052.33 498190.15
4 10736.44 497581.83
5 13420.55 496970.98
...
308 874705.88 3478.83
309 877389.99 809.21
310 880074.10 -1871.53
Total paid 880074.10
Months 310
연습 문제 1.11: 보너스
이왕 하는 김에, 마지막 달에 발생하는 과다 납입을 수정하도록 프로그램을 수정하세요.
연습 문제 1.12: 미스터리
int()와 float()는 숫자를 변환하는 데 사용할 수 있습니다. 예를 들어,
>>> int("123")
123
>>> float("1.23")
1.23
>>>
이 점을 염두에 두고, 다음 동작을 설명할 수 있습니까?
>>> bool("False")
True
>>>
요약
축하합니다! 숫자 랩을 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 실력을 향상시킬 수 있습니다.