그러니 직접 Python 코드를 실행시키고 싶으신 분은 아래 Link에서 다운로드 받으셔서 실행할 수 있습니다.
https://github.com/DevStarSJ/Study/tree/master/Blog/Python/DoingMathWithPython
파이썬으로 풀어보는 수학
- 원서명 : Doing Math with Python: Use Programming to Explore Algebra, Statistics, Calculus, and More! (ISBN 9781593276409)
- 지은이 : 아미트 사하(Amit Saha)
- 원서 및 관련자료 : https://www.nostarch.com/doingmathwithpython
- 번역서 : http://www.acornpub.co.kr/book/doing-math-with-python
- 원서명 : Doing Math with Python: Use Programming to Explore Algebra, Statistics, Calculus, and More! (ISBN 9781593276409)
- 지은이 : 아미트 사하(Amit Saha)
- 원서 및 관련자료 : https://www.nostarch.com/doingmathwithpython
- 번역서 : http://www.acornpub.co.kr/book/doing-math-with-python
1장 숫자, 연산
1. 사칙연산
1.1 기본연산 (더하기, 빼기, 곱하기)
In [1]:
1 + 2
Out[1]:
In [2]:
-1 + 3.5
Out[2]:
In [3]:
100 - 45
Out[3]:
In [4]:
3 * 2
Out[4]:
In [5]:
3.5 * 1.5
Out[5]:
In [6]:
3 / 2
Out[6]:
In [7]:
4 / 2
Out[7]:
In [1]:
1 + 2
Out[1]:
In [2]:
-1 + 3.5
Out[2]:
In [3]:
100 - 45
Out[3]:
In [4]:
3 * 2
Out[4]:
In [5]:
3.5 * 1.5
Out[5]:
In [6]:
3 / 2
Out[6]:
In [7]:
4 / 2
Out[7]:
1.2 나누기 ( 나누기, 나머지), 지수
In [1]:
3 / 2
Out[1]:
In [2]:
4 / 2
Out[2]:
In [3]:
3 // 2 # 버림 나눗셈 : 소숫점 아래를 내림
Out[3]:
In [4]:
-3 // 2 # 음수인 경우 원래 답보다 작거나 같은 값이므로 -1.5 -> -2.0이 됨
Out[4]:
In [5]:
9 % 2 # 나머지
Out[5]:
In [6]:
2 ** 2 # 2의 2승
Out[6]:
In [7]:
2 ** 10
Out[7]:
In [8]:
2 ** (0.5) # 2의 1/2 승이니 Root 2와 같음
Out[8]:
In [9]:
8 ** (1/3) # 8의 세재곱근
Out[9]:
In [1]:
3 / 2
Out[1]:
In [2]:
4 / 2
Out[2]:
In [3]:
3 // 2 # 버림 나눗셈 : 소숫점 아래를 내림
Out[3]:
In [4]:
-3 // 2 # 음수인 경우 원래 답보다 작거나 같은 값이므로 -1.5 -> -2.0이 됨
Out[4]:
In [5]:
9 % 2 # 나머지
Out[5]:
In [6]:
2 ** 2 # 2의 2승
Out[6]:
In [7]:
2 ** 10
Out[7]:
In [8]:
2 ** (0.5) # 2의 1/2 승이니 Root 2와 같음
Out[8]:
In [9]:
8 ** (1/3) # 8의 세재곱근
Out[9]:
2. 분수 (Fraction)
사용하기 위해서는 fractions
모듈에서 Fraction
class를 임포트해야 합니다.
Fraction(분자 , 분모)의 형태로 입력합니다.
In [3]:
from fractions import Fraction
f = Fraction(3, 4)
f
Out[3]:
In [5]:
Fraction(3,4) + 1 + 1.5
Out[5]:
사용하기 위해서는
fractions
모듈에서 Fraction
class를 임포트해야 합니다.
Fraction(분자 , 분모)의 형태로 입력합니다.
In [3]:
from fractions import Fraction
f = Fraction(3, 4)
f
Out[3]:
In [5]:
Fraction(3,4) + 1 + 1.5
Out[5]:
3. 복소수 (Complex numbers)
문자 j
또는 J
를 이용해서 허수부를 입력할 수 있습니다.
In [6]:
c = 2 + 3j
type(c)
Out[6]:
complex 객체를 이용해서도 가능합니다.
In [2]:
c = complex(2,3)
c
Out[2]:
complex
의 사칙연산입니다. ( 나머지 %
와 버림 //
은 제공하지 않습니다. )
In [16]:
b = 3 + 3j
b + c
Out[16]:
In [9]:
b - c
Out[9]:
In [10]:
b * c
Out[10]:
문자
j
또는 J
를 이용해서 허수부를 입력할 수 있습니다.
In [6]:
c = 2 + 3j
type(c)
Out[6]:
complex 객체를 이용해서도 가능합니다.
In [2]:
c = complex(2,3)
c
Out[2]:
complex
의 사칙연산입니다. ( 나머지 %
와 버림 //
은 제공하지 않습니다. )
In [16]:
b = 3 + 3j
b + c
Out[16]:
In [9]:
b - c
Out[9]:
In [10]:
b * c
Out[10]:
복소수의 곱셈
(a + bj) * (c + dj)
= ac + adj + bcj - bd
= (ac - bd) + (bc + ad)j
(2 + 3j) * (3 + 3j) = (6 - 9) + (6 + 9)j = -3 + 15j
In [17]:
b / c
Out[17]:
(a + bj) * (c + dj)
= ac + adj + bcj - bd
= (ac - bd) + (bc + ad)j
(2 + 3j) * (3 + 3j) = (6 - 9) + (6 + 9)j = -3 + 15j
In [17]:
b / c
Out[17]:
복소수의 나눗셈
(a + bj) / (c + dj)
= ((a +bj) * (c - dj)) / ((c + dj) * ( c - dj))
= ((ac + bd) + (bc - ad)j) / (c ** 2 + d ** 2) + (cd - cd)j
= ((ac + bd) + (bc - ad)j) / ( c ** 2 + d ** 2)
(3 +3j) / (2 + 3j) = (6 + 9) / (4 + 9) + ( (6 - 9) / (4 + 9) ) j = 15/13 - 3/13j
(a + bj) / (c + dj)
= ((a +bj) * (c - dj)) / ((c + dj) * ( c - dj))
= ((ac + bd) + (bc - ad)j) / (c ** 2 + d ** 2) + (cd - cd)j
= ((ac + bd) + (bc - ad)j) / ( c ** 2 + d ** 2)
(3 +3j) / (2 + 3j) = (6 + 9) / (4 + 9) + ( (6 - 9) / (4 + 9) ) j = 15/13 - 3/13j
컬레복소수(conjugate)
같은 실수부에 허수부의 부호가 반대인 경우를 말합니다. 바로 앞에서 본 것처럼 나누기 할때 분모의 컬레복소수를 분모 분자에 모두 곱해서 계산을 했습니다.
In [28]:
c.conjugate()
Out[28]:
같은 실수부에 허수부의 부호가 반대인 경우를 말합니다. 바로 앞에서 본 것처럼 나누기 할때 분모의 컬레복소수를 분모 분자에 모두 곱해서 계산을 했습니다.
In [28]:
c.conjugate()
Out[28]:
복소수의 값(magnitude)
절대치(abs() 함수
)를 이용해서 구할수 있습니다.
In [29]:
abs(c)
Out[29]:
계산 공식은 (실수부의 제곱 + 허수부의 제곱)의 제곱근(루트)
입니다.
In [30]:
(c.real ** 2 + c.imag ** 2) ** 0.5
Out[30]:
절대치(
abs() 함수
)를 이용해서 구할수 있습니다.
In [29]:
abs(c)
Out[29]:
계산 공식은
(실수부의 제곱 + 허수부의 제곱)의 제곱근(루트)
입니다.
In [30]:
(c.real ** 2 + c.imag ** 2) ** 0.5
Out[30]:
4. 정수 팩터 계산
0이 아닌 정수 a를 다른 정수 b로 나누었을 때 나머지가 0인 경우 a는 b의 팩터(Factor)라 합니다.
In [10]:
def is_factor(a, b):
if a % b == 0:
return True
else:
return False
if __name__ == '__main__':
while True:
a = input('Input a : ')
a = float(a)
if a.is_integer() and a > 0:
break
print('Please enter a positive integer for a')
while True:
b = input('Input b : ')
b = float(b)
if b.is_integer() and b > 0:
break
print('Please enter a positive integer for b')
print(is_factor(a,b))
특정 정수에 대한 모든 팩터를 구하기 위해서는 어떻게 해야 할까요 ? 그 수보다 작은 모든 양의 정수에 대해서 검사를 하면 됩니다.
In [8]:
def is_factor(a, b):
if a % b == 0:
return True
else:
return False
def factors(value):
result = []
for i in range (1, value + 1):
if is_factor(value, i):
result.append(i)
return result
if __name__ == '__main__':
while True:
a = input('input a : ')
a = float(a)
if a.is_integer() and a > 0:
a = int(a)
break;
print('Please enter a positive integer for a')
print(factors(a))
0이 아닌 정수 a를 다른 정수 b로 나누었을 때 나머지가 0인 경우 a는 b의 팩터(Factor)라 합니다.
In [10]:
def is_factor(a, b):
if a % b == 0:
return True
else:
return False
if __name__ == '__main__':
while True:
a = input('Input a : ')
a = float(a)
if a.is_integer() and a > 0:
break
print('Please enter a positive integer for a')
while True:
b = input('Input b : ')
b = float(b)
if b.is_integer() and b > 0:
break
print('Please enter a positive integer for b')
print(is_factor(a,b))
특정 정수에 대한 모든 팩터를 구하기 위해서는 어떻게 해야 할까요 ? 그 수보다 작은 모든 양의 정수에 대해서 검사를 하면 됩니다.
In [8]:
def is_factor(a, b):
if a % b == 0:
return True
else:
return False
def factors(value):
result = []
for i in range (1, value + 1):
if is_factor(value, i):
result.append(i)
return result
if __name__ == '__main__':
while True:
a = input('input a : ')
a = float(a)
if a.is_integer() and a > 0:
a = int(a)
break;
print('Please enter a positive integer for a')
print(factors(a))
5. 측정 단위 변환
센티미터 to 인치
1인치는 2.54
센티미터입니다.
In [9]:
37.5 * 2.54
Out[9]:
1인치는
2.54
센티미터입니다.
In [9]:
37.5 * 2.54
Out[9]:
마일 to 킬로미터
1마일은 1.609
킬로미터와 같습니다.
In [10]:
320 * 1.609
Out[10]:
1마일은
1.609
킬로미터와 같습니다.
In [10]:
320 * 1.609
Out[10]:
화씨 to 섭씨
C = (F - 32) * 5 / 9
In [12]:
F = 98.6
(F - 32) * 5 / 9
Out[12]:
반대로는 위 수식의 역수를 취하면 됩니다.
F = C * 9 / 5 + 32
In [13]:
C = 37
C * 9 / 5 + 32
Out[13]:
C = (F - 32) * 5 / 9
In [12]:
F = 98.6
(F - 32) * 5 / 9
Out[12]:
반대로는 위 수식의 역수를 취하면 됩니다.
F = C * 9 / 5 + 32
In [13]:
C = 37
C * 9 / 5 + 32
Out[13]:
6. 이차방정식 근 구하기
ax ** 2 + bx + c
라는 식에 대한 x의 근은 다음과 같이 2개가 존재합니다.
x = (- b (+,-) (b ** 2 - 4ac) ** 0.5) / 2a
In [11]:
def roots(a, b, c):
D = ( b ** 2 - 4 * a * c ) ** 0.5
result = [ (-b + D) / (2 * a) , (-b - D) / (2 * a) ]
return result
if __name__ == '__main__':
a = float(input('Enter a :'))
b = float(input('Enter b :'))
c = float(input('Enter c :'))
rootList = roots(a, b, c)
for i in rootList:
print('{0:.2f}'.format(i))
ax ** 2 + bx + c
라는 식에 대한 x의 근은 다음과 같이 2개가 존재합니다.x = (- b (+,-) (b ** 2 - 4ac) ** 0.5) / 2a
In [11]:
def roots(a, b, c):
D = ( b ** 2 - 4 * a * c ) ** 0.5
result = [ (-b + D) / (2 * a) , (-b - D) / (2 * a) ]
return result
if __name__ == '__main__':
a = float(input('Enter a :'))
b = float(input('Enter b :'))
c = float(input('Enter c :'))
rootList = roots(a, b, c)
for i in rootList:
print('{0:.2f}'.format(i))
프로그래밍 연습
1. 짝수,홀수 자판기
- 입력한 숫자가
짝수
인지 홀수
인지 출력합니다.
- 입력한 숫자 다음으로 오는
짝수
또는 홀수
를 같이 출력합니다.
is_integer()
를 이용하여 유효하지 않은 입력에 대해서는 오류 메세지를 출력하세요.
In [13]:
def is_odd(val):
if val % 2 == 0:
return False
else:
return True
if __name__ == '__main__':
try:
inputNum = float(input('Enter number: '))
except:
print('You must input number')
if inputNum.is_integer():
val = int(inputNum)
print(val, 'is','odd' if is_odd(val) else 'even', ':')
seq = list(range(val, val + 20, 2))
print(seq)
else:
print('You input invalid number')
- 입력한 숫자가
짝수
인지홀수
인지 출력합니다. - 입력한 숫자 다음으로 오는
짝수
또는홀수
를 같이 출력합니다. is_integer()
를 이용하여 유효하지 않은 입력에 대해서는 오류 메세지를 출력하세요.
In [13]:
def is_odd(val):
if val % 2 == 0:
return False
else:
return True
if __name__ == '__main__':
try:
inputNum = float(input('Enter number: '))
except:
print('You must input number')
if inputNum.is_integer():
val = int(inputNum)
print(val, 'is','odd' if is_odd(val) else 'even', ':')
seq = list(range(val, val + 20, 2))
print(seq)
else:
print('You input invalid number')
2. 개선된 곱 테이블
X 단을 Y 개까지 출력하는 방식으로 구현하세요.
In [14]:
try:
val = int(input('Enter start number :'))
num = int(input('Enter number of step :'))
except:
print('Invalid number entered')
for i in range(1, num + 1):
print(val, '*', i, '=', val * i)
X 단을 Y 개까지 출력하는 방식으로 구현하세요.
In [14]:
try:
val = int(input('Enter start number :'))
num = int(input('Enter number of step :'))
except:
print('Invalid number entered')
for i in range(1, num + 1):
print(val, '*', i, '=', val * i)
3. 개선된 단위 변환
아래 변환이 모두 가능한 프로그램을 작성하세요.
- 거리(킬로미터 <-> 마일)
- 무게(킬로그램 <-> 파운드)
- 온도(섭씨 <-> 화시)
In [1]:
def KilloMeterToMile(km):
return km / 1.609
def MileToKilloMeter(mile):
return mile * 1.609
def KilloGramToPound(kg):
return kg * 2.20462
def PoundToKilloGram(pound):
return pound / 2.20462
def CelsiusToFahrenheit(c):
return c * 9 / 5 + 32
def FahrenheitToCelsius(f):
return (f - 32) * 5 / 9
if __name__ == '__main__':
try:
order = int(input('Enter command (1.KilloMeterToMile, 2.MileToKilloMeter, 3.KilloGramToPound, 4.PoundToKilloGram, 5.CelsiusToFahrenheit, 6.FahrenheitToCelsius) : '))
val = float(input('Enter value : '))
except:
print('Invalid command')
task = [KilloMeterToMile, MileToKilloMeter, KilloGramToPound, PoundToKilloGram, CelsiusToFahrenheit, FahrenheitToCelsius]
result = task[order-1](val)
print('Result : ', result)
아래 변환이 모두 가능한 프로그램을 작성하세요.
- 거리(킬로미터 <-> 마일)
- 무게(킬로그램 <-> 파운드)
- 온도(섭씨 <-> 화시)
In [1]:
def KilloMeterToMile(km):
return km / 1.609
def MileToKilloMeter(mile):
return mile * 1.609
def KilloGramToPound(kg):
return kg * 2.20462
def PoundToKilloGram(pound):
return pound / 2.20462
def CelsiusToFahrenheit(c):
return c * 9 / 5 + 32
def FahrenheitToCelsius(f):
return (f - 32) * 5 / 9
if __name__ == '__main__':
try:
order = int(input('Enter command (1.KilloMeterToMile, 2.MileToKilloMeter, 3.KilloGramToPound, 4.PoundToKilloGram, 5.CelsiusToFahrenheit, 6.FahrenheitToCelsius) : '))
val = float(input('Enter value : '))
except:
print('Invalid command')
task = [KilloMeterToMile, MileToKilloMeter, KilloGramToPound, PoundToKilloGram, CelsiusToFahrenheit, FahrenheitToCelsius]
result = task[order-1](val)
print('Result : ', result)
4. 분수계산기
2개의 분수를 입력받아서, 4칙연산을 수행하는 프로그램을 작성하세요.
In [2]:
from fractions import Fraction
a = Fraction(input('Enter first fraction : '))
b = Fraction(input('Enter second fraction : '))
op = input('Operation to perform - [A]dd, [S]ubtract, [D]ivide, [M]ultiply : ')
cmd = op.lower()[0]
if cmd == 'a':
print(a, '+', b, '=', a + b)
elif cmd == 's':
print(a, '-', b, '=', a - b)
elif cmd == 'd':
print(a, '/', b, '=', a / b)
elif cmd == 'm':
print(a, '*', b, '=', a * b)
else:
print('Invalid Operation')
2개의 분수를 입력받아서, 4칙연산을 수행하는 프로그램을 작성하세요.
In [2]:
from fractions import Fraction
a = Fraction(input('Enter first fraction : '))
b = Fraction(input('Enter second fraction : '))
op = input('Operation to perform - [A]dd, [S]ubtract, [D]ivide, [M]ultiply : ')
cmd = op.lower()[0]
if cmd == 'a':
print(a, '+', b, '=', a + b)
elif cmd == 's':
print(a, '-', b, '=', a - b)
elif cmd == 'd':
print(a, '/', b, '=', a / b)
elif cmd == 'm':
print(a, '*', b, '=', a * b)
else:
print('Invalid Operation')
댓글 없음:
댓글 쓰기