본문 바로가기
프로젝트들/Python_Udemy

[Python]9 - 이진수 (Binary) & 십진수 (Decimal) 컨버터

by 코곰 2020. 12. 8.

이진수 -> 십진수, 십진수 -> 이진수 컨버터를 구현해보자.

 

파이썬 구현

import re

# Get the Conversion System and Number to Convert
system = input("Choose between [1: Binary -> Decimal, 2: Decimal -> Binary] ")
number = input("Enter your number: ")

def binary_to_decimal(number):
     # regular expression to validate the number
     if len(re.findall('[^01]',number)) != 0:
          print('Enter a valid binary number')
          return

     i = converted = 0
     number = int(number)
     while number != 0:
          converted += number % 10 * 2**i
          number = number // 10
          i += 1
     return converted

def decimal_to_binary(number):
     # regular expression to validate the number
     if len(re.findall('[^\d]',number)) != 0:
          print('Enter a valid decimal number')
          return
     
     converted = ''
     number = int(number)

     if number in (0,1):
          return number
     
     while number != 0:
          converted += str(number % 2)
          number = number // 2
     return int(converted[::-1])

if system == '1':
     print(binary_to_decimal(number))
if system == '2':
     print(decimal_to_binary(number))

 

접근법

- 2진수 -> 10진수: 2^n을 각 자릿수에 더하면 되니 숫자로 접근하였다.

- 10진수 -> 2진수: 2로 나눈 나머지를 뒤에서부터 저장하려니, 리스트로 접근하였다. 다만 string -> number -> string -> number 의 변환을 거치려니 마음에 안 든다. ㅜ

- 2진수와 10진수의 형식에 맞는 숫자를 입력받았는 지 확인하기 위해 regular expression을 사용하였다.

 

Udemy가 추천한 방법

github.com/Drhealsgood/miniprojects/blob/master/number_projects/conversion/conversions.py

 

Drhealsgood/miniprojects

Contribute to Drhealsgood/miniprojects development by creating an account on GitHub.

github.com

- decimal <-> binary 컨버터 이외에도 몇 가지 컨버터가 있어 좀 복잡하다. 하지만 전체적인 로직은 내 것과 비슷해 보여 뭔가 안심(?)이 되었다. 엄청 이상하게 한 건 아니구나...ㅎㅎ

댓글