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-가)