【Python】1からnまでの数値の10進数・8進数・16進数・2進数を一覧表示する方法
問題概要
ある値 n が与えられたとします。ここでの課題は、1から n までの各整数について、10進数・8進数・16進数・2進数それぞれの表記を求め、4つの列にきれいに揃えて出力することです。
Pythonの書式指定では、d(10進数)、o(8進数)、X(16進数)、b(2進数)というプレフィックス文字を使うことで、同じ数値をさまざまな基数で手軽に表現できます。これらを組み合わせることで、目的の出力はごく短いコードで実現できます。
出力イメージ
たとえば入力が n = 10 の場合、プログラムは次のような結果を出力します。
1 1 1 1 2 2 2 10 3 3 3 11 4 4 4 100 5 5 5 101 6 6 6 110 7 7 7 111 8 10 8 1000 9 11 9 1001 10 12 A 1010
解き方の手順
この問題を解くための手順は以下の通りです。
- ステップ1: 変数 l に「n の2進数表現の桁数 − 2」を代入します。
bin()関数の戻り値には先頭に「0b」という接頭辞が付くため、その2文字分を差し引いて実際の桁数を求めます。 - ステップ2: 1から n までの範囲でループ処理を行います。
- 変数 f を空文字列として初期化します。
- "doXb" の各文字 c に対して、次の処理を繰り返します。
- f が空でない場合は、半角スペースを1つ連結します。
- f に「右寄せ・幅 l 桁」の書式指定(l を文字列化したもの)と文字 c を連結して追加します。
- 完成した書式文字列 f に対し i を4回渡して整形し、1行として出力します。
実装例
それでは、理解を深めるために実際の実装を見てみましょう。
def solve(n):
l = len(bin(n)) - 2
for i in range(1, n + 1):
f = ""
for c in "doXb":
if f:
f += " "
f += "{:>" + str(l) + c + "}"
print(f.format(i, i, i, i))
n = 10
solve(n)
入力
10
出力
1 1 1 1 2 2 2 10 3 3 3 11 4 4 4 100 5 5 5 101 6 6 6 110 7 7 7 111 8 10 8 1000 9 11 9 1001 10 12 A 1010
コードのポイント
このコードの最大の特徴は、書式指定文字列を動的に組み立てている点です。「{:>4d}」「{:>4o}」のように、2進数表現の桁数(ここでは n=10 なので4桁)に合わせて右寄せ幅を統一することで、すべての列が縦にきれいに揃います。
さらに、"doXb" という文字列をループさせることで、10進数(d)、8進数(o)、16進数(X)、2進数(b)の4種類の基数変換をひとつの処理にまとめており、非常にスマートな実装になっています。n の値を変更すれば、任意の範囲の数値に対して同様の一覧表を自動生成できるのも嬉しいポイントです。
-
Pythonで16進数の文字列を10進数に変換する方法を解説
この記事では、16進数の文字列を10進数に変換する問題の解決策について詳しく解説します。課題の概要16進数形式の文字列が与えられたとき、それを対応する10進数の値に変換することを目標とします。例えば、16進数の「F」は10進数では「15」に相当します。この問題には主に2つのアプローチがあります。力ずく(ブルートフォース)な手法:int関数を使った明示的な型変換組み込みモジュールを活用する手法:astモジュールのliteral_eval関数を使用方法1:int関数を使った変換最もシンプルで一般的な方法は、Pythonの組み込み関数であるint()を利用するものです。この関数は2つの引数を受け取り
-
Pythonで10進数を2進数に変換する方法|再帰処理とbin()関数の実装例
この記事では、「10進数を2進数に変換する」という問題に対する解決策を、具体的なコード例とともにわかりやすく解説します。 問題の概要 問題: 与えられた10進数の整数を、それに対応する2進数表現へ変換する。 この問題を解くには、大きく分けて2つのアプローチがあります。順番に見ていきましょう。 方法1:再帰を使った実装 10進数を2進数に変換する基本的な考え方は、「数値を2で割り続け、その余りを記録する」ことです。再帰関数を使うと、除算を繰り返しながら余りを自動的に上位の桁から順に出力できます。 サンプルコード def DecimalToBinary(num): if num &g