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

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

今回から、マッチ棒クイズを開発していきます。KivyというGUIを使って開発を行うため、最終的にはアプリケーションとしてマッチ棒クイズを遊ぶことができます。

Part1は導入となります。マッチ棒クイズとは何なのか?完成形の全体像などを紹介します。本格的なコーディングはPart2からとなります。

 

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

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

 

 

 

スポンサードサーチ


マッチ棒クイズとは?

マッチ棒クイズとは、数式をマッチ棒で表現し、マッチ棒を指定の本数移動させ、間違った式から正しい式へ変換するというクイズです。

 

例題を以下に示します。

Qマッチ棒を一本動かし、「4 – 4 = 9」を正しい式に直しなさい。

右辺の「9」の真ん中の棒を左下に動かせば「0」になり正しい式になります。

 

A 「4 – 4 = 0」

 

以上のような問題が今回扱うマッチ棒クイズです。

テレビのクイズ番組でも見られるクイズであるため、なんとなく分かる方もいらっしゃるのではないでしょうか?

 

 

マッチ棒クイズについて

今回開発するマッチ棒クイズは、「x + y  = z」と「x – y = z」という形式のものだけです。(x, y, zはそれぞれ1桁の数字)1桁の足し算、引き算しか扱いません。

2桁以上の数字や掛け算、割り算は扱いません。

また、イコールの位置も変化しないものとします。

 

 

マッチ棒クイズの全体像(開発環境など)

開発環境について紹介します。

OS : Windows 10 (64bit)

CPU : Intel Core i7-7500

Python : 3.8.5 (32bit)

Kivy : 2.0.0

 

 

 

Part数

マッチ棒クイズ開発は、全24パートあります。

Part1~Part4では、問題と答えを生成するプログラムを作成します。

Part5~Part18では、pythonファイルのみでアプリケーションを作成します。

Part19~Part24では、pythonファイルとkivyファイルを使ってアプリケーションを作成します。

 

 

開発の流れ

本記事とこれからの記事では、(1)作成したい処理の提示、(2)実際のコード、(3)コードの解説、(4)動作確認という順序で解説を行います。

(1)作成したい処理の提示では、そこで何を実現したいのかを示します。

(2)実際のコードでは、私が作成したコードをお見せします。

(3)コードの解説では、コードを見ながら具体的にどんな処理を行っているのか、どんな考えでその書き方にしたのかを解説します。

(4)動作確認では、作成したコードが実際にどのように動くのかをお見せします。

 

 

スポンサードサーチ


数字や記号を変換するプログラムの作成

マッチ棒クイズで一番最初に必要なものは問題と答えです。そのため、問題と答えを生成するプログラムを作成します。

問題とは間違った式のことであり、答えとは正しい式のことです。

例えば、「3 – 6 = 8」という問題と「3 + 5 = 8」という答えを生成するといった感じです。

 

問題を生成するプログラムの中でも、最初は変換に関する関数を作成します。

例えば、「9」はマッチ棒を1本動かすと「0, 6」に変換できます。マッチ棒を1本追加すると「8」に変換できます。1本削除すると「5」も変換できます。

  

変換の対象となるのは、0~9までの10個の数字と「+, -, =」の3つの記号です。

「=」は変化しないものとしているため、変化しないということを定義します。

 

0~9の数字と+, -, =の変換は以下の表のようになります。

数字、記号

1本削除

1本移動

1追加

0

無し

0, 9

8

1

無し

無し

無し

2

無し

3

無し

3

無し

2, 5

9

4

無し

7

無し

5

無し

3

6, 9

6

5

0, 9

8

7

無し

4

無し

8

0, 6, 9

無し

無し

9

3, 5

0, 6

8

+

-

無し

無し

-

無し

無し

+

=

無し

無し

無し

 

 

コードの提示

数字と記号を変換する関数のソースコードを以下に示します。

def matchstickX(num, sticks):
    # 「=(イコール)」は何もしないことを前提とする
    transf_dict = {
        "0":{"minus":[],              "plusminus":["6", "9"], "plus":["8"]},
        "1":{"minus":[],              "plusminus":[],         "plus":[]},
        "2":{"minus":[],              "plusminus":["3"],      "plus":[]},
        "3":{"minus":[],              "plusminus":["2", "5"], "plus":["9"]},
        "4":{"minus":[],              "plusminus":["7"],      "plus":[]},
        "5":{"minus":[],              "plusminus":["3"],      "plus":["6", "9"]},
        "6":{"minus":["5"],           "plusminus":["0", "9"], "plus":["8"]},
        "7":{"minus":[],              "plusminus":["4"],      "plus":[]},
        "8":{"minus":["0", "6", "9"], "plusminus":[],         "plus":[]},
        "9":{"minus":["3", "5"],      "plusminus":["0", "6"], "plus":["8"]},
        "+":{"minus":["-"],           "plusminus":[],         "plus":[]},
        "-":{"minus":[],              "plusminus":[],         "plus":["+"]},
        "=":{"minus":[],              "plusminus":[],         "plus":[]}
    }
    return transf_dict[num][sticks]

if __name__ == '__main__':
    print(matchstickX("9", "plusminus"))

 

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

  

 

コードの解説

1行目から18行目の「matchstickX関数」は、0~9の数字と+、-、=を変換する関数です。

 

matchstickX関数の第1引数「num」は、「0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, =」のどれかを文字列として代入します。第2引数「sticks」は、minus(1本削除)、plusminus(1本移動)、plus(1本追加)のどれかを代入します。

 

3行目から17行目の「transf_dict」は、上記の表を辞書型に変換したものです。変換後の数字または記号はリスト型にしてあります。変換が無いものには空のリストが代入されています。

 

18行目の「return文」はtransf_dictに引数のnumとsticksを指定して、変換後の数字または記号をリスト形式で返却しています。

 

以上で、数字または記号と削除、移動、追加のどれかを指定することで変換後の数字または記号を取得できる関数を作成しました。

 

 

動作確認

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

python matchstickquiz_QA.py

 

以下のように表示されれば動作確認完了です。

['0', '6']

 

 

スポンサードサーチ


まとめ

今回は、マッチ棒クイズの導入と問題を生成するプログラムの作成を行いました。

特に数字と記号の変換の関数を作成しました。変換に関して分からない場合は、実際に棒を用意して動かしてみてると分かりやすいと思います。

 

変換を画像で表したファイル一覧を以下からダウンロードできます。

 

次回Part2では、足し算の正しい式と引き算の正しい式を生成する関数を作成します。

 

 

 

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


スポンサードサーチ