Pythonプログラムを作成しよう

学習の目的

  • 基数変換の計算手順を整理し、Pythonで基数変換プログラムが作成できる

    1. 2進数を10進数に変換する手順を整理する

    2. Pythonのプログラムを完成させる

Pythonは、シンプルで読みやすい構文が特徴のプログラミング言語です。初めてのプログラミング学習にも適しており、身近な問題をコンピュータで解決する楽しさを体験できます。

プログラムを書くためには、「どのような手順で問題を解決するか」を一つ一つ順序立てて考える必要があります。たとえば、「1から10までの数を表示する」という課題でも、「どこから始めるのか」「どう繰り返すのか」といった論理的な手順が求められます。

このように、Pythonを使ってプログラムを書くことは、自然と論理的に物事を考える力を育てることにつながります。将来、どんな分野に進んでも必要とされる「論理的思考力」を、プログラミング学習を通じて楽しく身につけていきましょう。

1. 2進数を10進数に変換する手順を整理する

2進数を10進数に変換する場合は、桁ごとに2のべき乗の重みを求めて変換することは覚えてますか?

2進数 "1011" を例に計算方法を確認しましょう。

計算方法は次の図のとおりです。

プログラムで処理をする場合は、1桁ずつ計算を行います。そのため、1 × 23 + 0 × 22 + 1 × 21 + 1 × 20 を計算するときは1桁ずつ分解をして計算します。

この図のように、2進数の値を1桁ずつ取り出して、取り出した値の桁の重みを使いながら計算を行います。

図の①~④の計算は以下の手順で行われます。

計算手順

手順には、何通りかありますが、左端の桁から計算をしていく手順を考えます。

① 4桁目の計算

手順1 : 4桁目の値を取り出す

左から1文字目を取り出します。

手順2 : 桁の重みを計算する

4桁目の重みは基数の3乗です。

手順3 : 桁の数値計算する

手順1と2で求めた値を掛け算します。

手順4 : 合計を求める

合計を求めるときは0から計算を始めます。

② 3桁目の計算

手順1 : 3桁目の値を取り出す

左から2文字目を取り出します。

手順2 : 桁の重みを計算する

3桁目の重みは基数の2乗です。

手順3 : 桁の数値計算する

手順1と2で求めた値を掛け算します。

手順4 : 合計を求める

前の合計8に手順3で求めた0を加算します。

③ 2桁目の計算

手順1 : 2桁目の値を取り出す

左から3文字目を取り出します。

手順2 : 桁の重みを計算する

2桁目の重みは基数の1乗です。

手順3 : 桁の数値計算する

手順1と2で求めた値を掛け算します。

手順4 : 合計を求める

前の合計8に手順3で求めた2を加算します。

④ 1桁目の計算

手順1 : 1桁目の値を取り出す

左から4文字目を取り出します。

手順2 : 桁の重みを計算する

1桁目の重みは基数の0乗です。

手順3 : 桁の数値計算する

手順1と2で求めた値を掛け算します。

手順4 : 合計を求める

前の合計10に手順3で求めた1を加算します。

④の手順4で求めた値「11」が2進数 1011 を10進数に基数変換した結果です。

基数変換は、①~④の各桁ごとに計算をしていますが、手順を見て何か気付いたことはありましたか?

①~④で、手順1、手順2での計算で使う数字は違ってますが、計算方法は全て同じです。

良いところに目を付けましたね。この手順をまとめると次のようになります。

手順のまとめ

  • 手順1

    計算対象の値である1文字目から最後の桁の文字まで取り出す。

  • 手順2

    取り出した桁の重みを基数を使って計算する。

  • 手順3

    手順1と手順2の値を乗算する。

  • 手順4

    手順3で計算した値を、合計に加算する。

この4つの手順を繰り返せば、2進数から10進数に変換できるのですね!

出来そうな気がします!

この手順で作成したpythonプログラムを見てみましょう。

Pythonプログラムを完成させよう

次のPythonで作成したプログラムは、2進数を10進数に変換するプログラムです。

プログラムの1行目で指定された2進数(例では「1010」)を10進数に変換します。

ただし、「###」から始まる10行目、13行目、16行目、19行目の4行が未完成です。

data = "1010"   # 変換したい数(ここでは2進数)を文字列で指定
base = 2        # 基数(2進数なら2、16進数なら16など)
decimal = 0     # 10進数での計算結果を入れる変数(はじめは0)
        
dcount = len(data)  # dataの桁数(文字の数)を調べて変数に入れる
        
# 桁の数だけ繰り返す(左から右へ順に)
for i in range(dcount):
    # i番目の文字を取り出し数値(0か1)に変換
    ### (a)
   
    # 重みを計算(左端の桁から順に、2の何乗か)
    ### (b)

    # その桁の値と重みを掛ける
    ### (c)

    # 桁の値と重みを掛けた結果を10進数に加算する
    ### (d)

        
# 最終的に計算した10進数の値を表示する
print(decimal)        

プログラムを完成させるには「###a」~「###d」の4か所をPythonのプログラムで置き換える必要があります。

次の手順でプログラムを完成させましょう。

  • 手順1

    プログラムをコピーして「Google Colab」に貼り付けます。

    Google Colabにある前のプログラムは削除しましょう。

  • 手順2

    「###a」~「###d」にあてはまる命令を次の4つから選んで、置き換えてみましょう。

    各コードの動きを想像しながら実行してみましょう!

    プログラムに入れる命令

    digit = digit * weight
    
    digit = int(data[i])
    
    decimal = decimal + digit
    
    weight = base ** (dcount - i - 1)
    

    「###a」などは消してから、命令を入れてください。

  • 手順3

    プログラムを実行して正しいか確かめましょう。

    プログラムの1行目に2進数(1010)2が指定されています。(1010)2は10進数では「10」です。

    プログラムの実行結果が10と表示されれば正解です。

    実行結果が「10」にならなければ、正しい順番で命令が入っていません。順番を入替えて実行して見ましょう。

###(a)から###(d)にそれぞれ当てはめた命令文を答えてください。

###(a)に当てはめた命令文

###(b)に当てはめた命令文

###(c)に当てはめた命令文

###(d)に当てはめた命令文

※この再現版では提出は行いません(送信先は未接続です)

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる