Post List

2016년 7월 10일 일요일

Doing Math with Python. Chapter 01. 숫자, 연산

이 포스팅은 Jupiter Notebook로 작성되었습니다.

그러니 직접 Python 코드를 실행시키고 싶으신 분은 아래 Link에서 다운로드 받으셔서 실행할 수 있습니다.

https://github.com/DevStarSJ/Study/tree/master/Blog/Python/DoingMathWithPython

파이썬으로 풀어보는 수학

책표지

1장 숫자, 연산

1. 사칙연산

1.1 기본연산 (더하기, 빼기, 곱하기)

In [1]:
1 + 2
Out[1]:
3
In [2]:
-1 + 3.5
Out[2]:
2.5
In [3]:
100 - 45
Out[3]:
55
In [4]:
3 * 2
Out[4]:
6
In [5]:
3.5 * 1.5
Out[5]:
5.25
In [6]:
3 / 2
Out[6]:
1.5
In [7]:
4 / 2
Out[7]:
2.0

1.2 나누기 ( 나누기, 나머지), 지수

In [1]:
3 / 2
Out[1]:
1.5
In [2]:
4 / 2
Out[2]:
2.0
In [3]:
3 // 2 # 버림 나눗셈 : 소숫점 아래를 내림
Out[3]:
1
In [4]:
-3 // 2 # 음수인 경우 원래 답보다 작거나 같은 값이므로 -1.5 -> -2.0이 됨
Out[4]:
-2
In [5]:
9 % 2 # 나머지
Out[5]:
1
In [6]:
2 ** 2 # 2의 2승
Out[6]:
4
In [7]:
2 ** 10
Out[7]:
1024
In [8]:
2 ** (0.5) # 2의 1/2 승이니 Root 2와 같음
Out[8]:
1.4142135623730951
In [9]:
8 ** (1/3) # 8의 세재곱근
Out[9]:
2.0

2. 분수 (Fraction)

사용하기 위해서는 fractions 모듈에서 Fraction class를 임포트해야 합니다.
Fraction(분자 , 분모)의 형태로 입력합니다.
In [3]:
from fractions import Fraction
f = Fraction(3, 4)
f
Out[3]:
Fraction(3, 4)
In [5]:
Fraction(3,4) + 1 + 1.5
Out[5]:
3.25

3. 복소수 (Complex numbers)

문자 j 또는 J를 이용해서 허수부를 입력할 수 있습니다.
In [6]:
c = 2 + 3j
type(c)
Out[6]:
complex
complex 객체를 이용해서도 가능합니다.
In [2]:
c = complex(2,3)
c
Out[2]:
(2+3j)
complex 의 사칙연산입니다. ( 나머지 % 와 버림 //은 제공하지 않습니다. )
In [16]:
b = 3 + 3j
b + c
Out[16]:
(5+6j)
In [9]:
b - c
Out[9]:
(1+0j)
In [10]:
b * c
Out[10]:
(-3+15j)

복소수의 곱셈

(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]:
(1.153846153846154-0.23076923076923078j)

복소수의 나눗셈

(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]:
(2-3j)

복소수의 값(magnitude)

절대치(abs() 함수)를 이용해서 구할수 있습니다.
In [29]:
abs(c)
Out[29]:
3.605551275463989
계산 공식은 (실수부의 제곱 + 허수부의 제곱)의 제곱근(루트) 입니다.
In [30]:
(c.real ** 2 + c.imag ** 2) ** 0.5
Out[30]:
3.605551275463989

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))        
Input a : 8
Input b : 2
True
특정 정수에 대한 모든 팩터를 구하기 위해서는 어떻게 해야 할까요 ? 그 수보다 작은 모든 양의 정수에 대해서 검사를 하면 됩니다.
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))
input a : 16
[1, 2, 4, 8, 16]

5. 측정 단위 변환

센티미터 to 인치

1인치는 2.54센티미터입니다.
In [9]:
37.5 * 2.54
Out[9]:
95.25

마일 to 킬로미터

1마일은 1.609킬로미터와 같습니다.
In [10]:
320 * 1.609
Out[10]:
514.88

화씨 to 섭씨

C = (F - 32) * 5 / 9
In [12]:
F = 98.6
(F - 32) * 5 / 9
Out[12]:
37.0
반대로는 위 수식의 역수를 취하면 됩니다.
F = C * 9 / 5 + 32
In [13]:
C = 37
C * 9 / 5 + 32
Out[13]:
98.6

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))
Enter a :1
Enter b :2
Enter c :1
-1.00
-1.00

프로그래밍 연습

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')
Enter number: 2
2 is even :
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

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)
Enter start number :9
Enter number of step :15
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
9 * 10 = 90
9 * 11 = 99
9 * 12 = 108
9 * 13 = 117
9 * 14 = 126
9 * 15 = 135

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)
Enter command (1.KilloMeterToMile, 2.MileToKilloMeter, 3.KilloGramToPound, 4.PoundToKilloGram, 5.CelsiusToFahrenheit, 6.FahrenheitToCelsius) : 5
Enter value : 36.5
Result :  97.7

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')
Enter first fraction : 3/4
Enter second fraction : 2/6
Operation to perform - [A]dd, [S]ubtract, [D]ivide, [M]ultiply : M
3/4 * 1/3 = 1/4

댓글 없음:

댓글 쓰기