트랙
/
Python
Python
/
연습 문제
/
All Your Base
All Your Base

All Your Base

보통

소개

방금 수학과 교수로 채용되었어요. 첫 주는 잘 지나갔는데, 둘째 주에는 뭔가 이상해요. 문제는 학생들이 내놓는 답이 전부 틀렸다는 거예요! 다행히도 수학 실력 덕분에 원인을 알아냈어요. 학생들의 답은 정말로 맞아요. 다만 모두 2진법(이진법)으로 되어 있을 뿐이에요! 놀랍게도, 매주 학생들은 서로 다른 진법을 사용한대요. 학생들의 답을 빠르게 확인할 수 있도록, 진법 사이를 변환해 주는 도구를 만들 거예요.

지침

한 진법에서 어떤 수를 나타내는 숫자열을, 같은 수를 나타내는 다른 진법의 숫자열로 변환해요.

Note

변환은 직접 구현해 봐요. 변환을 대신 해 주는 다른 것을 사용하지 마세요.

위치 기수법 알아보기

위치 기수법에서는 밑이 b인 수를 b의 거듭제곱들의 선형 결합으로 이해할 수 있어요.

42라는 수는 10진법에서 다음을 뜻해요:

(4 × 10¹) + (2 × 10⁰)

101010이라는 수는 2진법에서 다음을 뜻해요:

(1 × 2⁵) + (0 × 2⁴) + (1 × 2³) + (0 × 2²) + (1 × 2¹) + (0 × 2⁰)

1120이라는 수는 3진법에서 다음을 뜻해요:

(1 × 3³) + (1 × 3²) + (2 × 3¹) + (0 × 3⁰)

네. 위의 세 수는 정확히 같은 수예요. 축하해요!

예외 메시지

때로는 예외를 발생시키는 것이 필요해요. 이때는 항상 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 함께 넣어야 해요. 그래야 코드를 읽기 쉬워지고 디버깅에 훨씬 도움이 돼요. 오류 원인이 특정 유형이라고 확실한 상황이라면 내장 오류 유형 중 하나를 발생시켜도 되지만, 그때도 의미 있는 메시지는 꼭 포함해야 해요.

이 연습 문제에서는 입력 진법과 출력 진법이 다를 때 ValueError를 "던지기" 위해 raise 문을 사용해야 해요. exception을 raise하면서 의미 있는 메시지도 함께 넣어야만 테스트를 통과할 수 있어요.

메시지와 함께 ValueError를 발생시키려면, 메시지를 exception 유형의 인자로 작성해요:

# for input.
raise ValueError("input base must be >= 2")

# another example for input.
raise ValueError("all digits must satisfy 0 <= d < input base")

# or, for output.
raise ValueError("output base must be >= 2")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

All Your Base 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.