【Python】マッチ棒クイズ開発 Part2

こんにちは、にわこまです。

今回は、マッチ棒クイズの答えとなる正しい式を作成します。足し算の式と引き算の式を生成する関数を作成します。

 

誤字脱字や分からない点がございましたらご連絡お願いいたします!

メールまたはTwitterのDMまで!!

 

 

 

スポンサードサーチ


足し算の式を生成するプログラムの作成

足し算の式を生成する関数とは、名前の通り足し算の式を生成します。つまり「x + y = z」のような式を生成するということです。

作成するにあたり注意するべき点があります。Part1で作成した「matchstickX関数」は引数に文字列が必要であるということです。よって、返却する数字や記号は全て文字列にします。

また、1つの式を1つのリストで表現します。イメージは次の通りです。「”3”, “+”, “6”, “=”, “9”」

 

 

コードの提示

足し算の式を生成する関数のソースコードを以下に示します。

def matchstickX(num, sticks):
   # 省略

def makePlusFormula():
    # left + right = ans
    num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    formula_list = []
    for ans in num_list:
        for left in num_list:
            for right in num_list:
                # sum of two numbers
                sotn = left + right
                if(sotn == ans):
                    formula_list.append([str(left), "+", str(right), "=", str(ans)])
    return formula_list

if __name__ == '__main__':
    formula_list = makePlusFormula()
    print(formula_list[:3])

 

上記のコードは以下からダウンロードできます。

 

 

コードの解説

4行目から15行目の「makePlusFormula関数」は、正しい足し算の式を生成する関数です。

makePlusFormula関数に引数は定義していません。

 

6行目の「num_list」は、0~9の数字をリスト型で代入されている変数です。for文でループするときに使用します。

 

7行目の「formula_list」は、式を代入する変数です。最終的にこの変数をreturn文で返却します。

 

8行目の「for文」は、「x + y = z」におけるzの部分のループです。ループ変数はansです。

 

9行目の「for文」は、「x + y = z」におけるxの部分のループです。ループ変数はleftです。

 

10行目の「for文」は、「x + y = z」におけるyの部分のループです。ループ変数はrightです。

 

12行目の「sotn」は、9行目と10行目のループ変数を足した値が代入されている変数です。8行目のループ変数ansとの比較で使用します。(sotn = sum of two numbers)

 

13行目の「if文」は、sotnとansが同じ値であるか比較する条件文です。同じ(True)であれば14行目の処理を実行します。

 

14行目は、[str(left), “+”, str(right), “=”, str(ans)]という形で生成し、formula_listに追加しています。

 

15行目の「return文」は、formula_listを返却しています。

 

 

動作確認

コードを保存したら、コマンドプロンプトを開きファイルを保存したフォルダまで移動します。移動したら、以下のコマンドを入力し実行します。

python matchstickquiz_QA.py

 

出力が多いため上位3つの要素を表示します。以下のように表示されれば動作確認完了です。

[['0', '+', '0', '=', '0'], ['0', '+', '1', '=', '1'], ['1', '+', '0', '=', '1']]

  

 

スポンサードサーチ


引き算の式を生成するプログラムの作成

引き算の式を生成する関数とは、名前の通り引き算の式を生成します。つまり「x – y = z」のような式を生成するということです。

makePlusFormula関数のときを同じく作成するにあたり注意するべき点があります。Part1で作成した「matchstickX関数」は引数に文字列が必要であるということです。よって、返却する数字や記号は全て文字列にします。

また、1つの式を1つのリストで表現します。イメージは次の通りです。「”9”, “-”, “6”, “=”, “3”」

 

 

コードの提示

引き算の式を生成する関数のソースコードを以下に示します。

def matchstickX(num, sticks):
    # 省略

def makePlusFormula():
    # 省略

def makeMinusFormula():
    # left - right = ans
    num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    formula_list = []
    for ans in num_list:
        for left in num_list:
            for right in num_list:
                # substract right from left
                srfl = left - right
                if(srfl == ans):
                    formula_list.append([str(left), "-", str(right), "=", str(ans)])
    return formula_list

if __name__ == '__main__':
    formula_list = makeMinusFormula()
    print(formula_list[:3])

  

上記のコードは以下からダウンロードできます。

 

 

コードの解説

7行目から18行目の「makeMinusFormula関数」は、正しい引き算の式を生成する関数です。

makeMinusFormula関数に引数は定義していません。

 

9行目の「num_list」は、0~9の数字をリスト型で代入されている変数です。for文でループするときに使用します。

 

10行目の「formula_list」は、式を代入する変数です。最終的にこの変数をreturn文で返却します。

 

11行目の「for文」は、「x – y = z」におけるzの部分のループです。ループ変数はansです。

 

12行目の「for文」は、「x – y = z」におけるxの部分のループです。ループ変数はleftです。

 

13行目の「for文」は、「x – y = z」におけるyの部分のループです。ループ変数はrightです。

 

15行目の「srfl」は、12行目から13行目のループ変数を引いた値が代入されている変数です。11行目のループ変数ansとの比較で使用します。(srfl = substract right from left)

 

16行目の「if文」は、srflとansが同じ値であるか比較する条件文です。同じ(True)であれば17行目の処理を実行します。

 

17行目は、[str(left), “-“, str(right), “=”, str(ans)]という形で生成し、formula_listに追加しています。

 

18行目の「return文」は、formula_listを返却しています。

 

 

動作確認

コードを保存したら、コマンドプロンプトを開きファイルを保存したフォルダまで移動します。移動したら、以下のコマンドを入力し実行します。

python matchstickquiz_QA.py

 

出力が多いため上位3つの要素を表示します。以下のように表示されれば動作確認完了です。

[['0', '-', '0', '=', '0'], ['1', '-', '1', '=', '0'], ['2', '-', '2', '=', '0']]

 

  

スポンサードサーチ


まとめ

今回は、答えとなる正しい式を生成する関数を作成しました。具体的には、正しい足し算の式を生成するmakePlusFormula関数と正しい引き算の式を生成するmakeMinusFormula関数を作成しました。

 

次回Part3では、正解の式から問題となる間違った式を生成する関数と間違った式が正しい式でないことを確認する関数を作成します。

 

 

 

最後までお読みいただきありがとうございます。


スポンサードサーチ