카테고리 없음

ten2two - 이진수와 십진수와 기타 등등 수들의 변환.

hyuckkim 2020. 6. 15. 15:58

왜 만들었나?

정보시간에 10진수를 2진수로 바꾸는 문제가 나왔는데 바로 다음에 2진수를 16진수로 바꾸는 문제가 나와서 그냥 생각을 그만두고 만들었다.

얼마나 했나?

1시간 반.

그래서 뭔가?

'몇' 진수에서 '몇' 진수로 바꿀 지 물어보고 수를 얻는다. 수에는 0부터 z까지 36가지의 문자가 포함되는데, 이 값은 파이썬에서[str(i) for i in range(10)] + list(string.ascii_lowercase) 로 얻을 수 있다. 앞에 [str(i) for i in range(10)]은 0부터 10 미만인 숫자들을 문자열화한 배열이고 list(string.ascii_lowercase)는 ascii 코드에서 소문자 알파벳들의 리스트다. 

함수는 cut 함수와 paste 함수가 있는데, 둘이 이름이 바뀐 느낌이다.

 

paste 함수는 받은 수를 10진수로 바꿔 middle에 저장하는데, 인수와 반환값이 없다. 대충 만들어서 그렇다.

cut 함수는 인수를 받아 spirits 리스트에 하나씩 차곡차곡 쌓는다.

불편했던 부분은?

반환 완료된 값이 리스트로 한 글자씩 나온다. 바꿔야지.

의미가 있었는가?

나중에 이진수 관련된 문제가 나오면 이득을 볼 수 있다는 거 정도.

2진수 101101은 15진법으로 30이다.

 

import math
import string

def cut(num):
    i = num
    while(i >= 1):
        spirits.append(stringl[math.floor(i % end)])
        i /= end
    spirits.reverse()

def paste():
    age = 1
    global middle
    middle = 0
    for i in inp:
        
        middle += age * stringl.index(i)
        age *= start

start = int(input('start : '))
end = int(input('end : '))
stringl = [str(i) for i in range(10)] + list(string.ascii_lowercase)
inp = '0'
middle = 0
while(True):
    spirits = []
    inp = input('input : ')[::-1]
    paste()
    print(middle)
    cut(middle)
    print(spirits)

파이썬이 진짜 개쩐다는걸 다시 느꼈다. for 배열 너무 편해..