pbj0812의 코딩 일기

[수학] python을 이용한 십진법 변환기 제작 본문

Science/수학

[수학] python을 이용한 십진법 변환기 제작

pbj0812 2020. 9. 26. 01:01

0. 목표 

 - python을 이용한 십진법 변환기 제작

1. 플로우 차트

 - 소수점을 기준으로 정수 부분과 소수 부분을 분리

 - 정수 부분은 뒤집어서 순서대로 계산

 - 각 계산결과 덧셈

2. 실습

 1) 정수 변환 모듈

  (1) list 형태로 받아서 숫자 하나씩 쪼갬(ex : 1101 => 1, 1, 0, 1)

  (2) 뒤집기

  (3) for 문을 이용하여 십진법 변환

def numeral_int(inp, num):
    tmp = list(inp)
    tmp.reverse()
    len_inp = len(inp)
    result = 0
    for i in range(len_inp):
        result += int(tmp[i]) * (num ** i)
    return result

 - 테스트

print(numeral_int('1101', 2))

 - 결과

13

 2) 소수 변환 모듈

  (1) list 형태로 받아서 숫자 하나씩 쪼갬(ex : 1101 => 1, 1, 0, 1)

  (2) for 문을 이용하여 십진법 변환

   * 이 때 i + 1 을 해줘서 1승부터 시작

def numeral_decimal(inp, num):
    tmp = list(inp)
    len_inp = len(inp)
    result = 0
    for i in range(len_inp):
        result += int(tmp[i]) / (num ** (i + 1))
    return result

 - 테스트

print(numeral_decimal('101', 2))

 - 결과

0.625

 3) 통합 모듈

  (1) str 형태로 변환

  (2) .을 기준으로 분리(소수점 없을 경우 무시) 및 리스트화

  (3) 분리 결과의 길이가 2일 경우 정수 변환 모듈과 소수 변환 모듈의 결과의 덧셈 결과를 출력,

       아닐 경우(길이가 1일 경우) 정수 변환 모듈만 적용

def numeral(inp, num):
    tmp = str(inp)
    tmp2 = tmp.split('.')
    result = 0
    if len(tmp2) == 2:
        tmp_int = numeral_int(tmp2[0], num)
        tmp_decimal = numeral_decimal(tmp2[1], num)
        result = tmp_int + tmp_decimal
    else:
        result = numeral_int(tmp2[0], num)
    return result

 - 테스트

print(numeral(1101.101, 2))

 - 결과

13.625

3. 참고

 - 수학의 정석(10-가)

 - Python List 아이템 순서 바꾸기, Reverse()

Comments