pythonで1次方程式の問題を作る方法Part2

 おはようございます!にわこまです。

 今回はpythonで1次方程式の問題集作ってみました。プログラムを実行すれば自動で問題が生成されるようにしてみました。

 最後まで読んでいただけたら幸いです。 何かご指摘があればご連絡ください!

 

スポンサードサーチ


1次方程式を作る方法

 前回の1次方程式を生成するプログラムは、変数xが出てくる場所が同じで1パターンの式になってしまいました。

 そこで今回は変数xが出てくる回数を1~3回にして1パターンにならないように工夫してみました。

 また、足し算だけでなく引き算も追加しました。さらに、イコールの位置も変化させることで、より多くのパターンが生成されるように工夫してみました。

 今回は、前回のコードとは違い、関数をかなり作ってしまったので詳しく説明していきたいと思います。

 

コード

 前回のコードと全く違うので、新たに説明していきたいと思います。

 

 「plusminus()」という関数を作りました。関数名からわかるように、プラスかマイナスの符号を返す関数です。後で、数字を代入しやすいように「{0}」または「(-{0})」のような形で返します。

 

 次に「r_positive(n)」という関数を作りました。これは、1~nの間の数字を返します。今回は「nを10」に設定しています。整数が返されるようにしてあります。さらに、「plusminus()」と数字を結合して返却しています。

ここまでで、数字の生成は終了です。

 

 次に「addsub()」という関数を作りました。この関数も関数名からわかるように足し算か引き算を返却します。この関数にかんしては特に説明することはありません。

 

 最後に「mk_formula()」という関数を作りました。この関数では、1次方程式を作ります。

 まず「str_list = []」を定義しました。これは数字や足し算引き算を格納しておくためのリストです。

 次に「count = 0」と「r = random.randint(1, 3)」を定義しました。この二つは文字の制限や結合を制御するために定義しました。

 rは文字の個数です。4つ数字が生成されるので、最大4つまで文字を結合することが出来ますが、0個と4個にはならないようにしてあります。

 

 理由は0個だと1次方程式にならないからです。4つだと答えが0になるからです。

 

 for文では繰り返し回数を7回としました。
「数字、文字、数字、文字、数字、文字、数字」
を生成するためです。この繰り返し回数をいじれば、式を長くしたり、短くしたりすることができます。

 その後は、if文で文字を結合するか判断します。 最後に「=」を加えていきます。まずは、リストの中から加算か減算を取り出し、削除します。そしてそこに「=」を入れていきます。あとは結合するだけです。以上コードの説明でした。

 

  実際に使った3つのコードを公開します。コピーOKなので実際に自分のパソコンで実行してみてください。

1つ目 style.css

@charset "UTF-8";
@import url('https://fonts.googleapis.com/css?family=Merriweather');


body {
  font-family: 'メイリオ', 'Hiraino Kaku Gothic Pro', sans-serif;
  color: #0000ff;
  background-color: #abcdcd;
}

/* ############# linear-equation ############## */
.main-body {
  background-color: #ffffFF;
  margin: 0;
  padding: 0;
}

.linear-equ {
  display: flex;
  flex-direction: row;
}
.linear-equ section {
  margin: 50px;
  font-size: 18px;
  width: 50%;
  height: 20%;
}

@media (min-width: 1000px) {
  .main-body {
    width: 1000px;
    margin-left: auto;
    margin-right: auto;
  }
}

 

2つ目 print.css

body {
  color: #0000ff;
}

.main-body {
  size: A4;
}
.container {
  size: A4;
}
/* ############# linear-equation ################# */
.linear-equ {
  display: flex;
  flex-direction: row;
}
.linear-equ section {
  margin: 50px;
  font-size: 18px;
  width: 50%;
  height: 20%;
}

@media (min-width: 1000px) {
  .main-body {
    width: 1000px;
    margin-left: auto;
    margin-right: auto;
  }
}

 

3つ目 pythonのコード

import random

html = """
        <!DOCTYPE html>
        <html lang="ja" dir="ltr">
          <head>
            <meta charset="utf-8">
            <title>一次方程式</title>
            <link rel="stylesheet" href="style.css" media="screen">
            <link rel="stylesheet" href="print.css" media="print">

          </head>
          <body>
            <div class="main-body">
              <article class="add-calculation">
                <section>
                  {0}
                </section>
                <section>
                  {1}
                </section>
              </article>

              <article class="add-calculation">
                <section>
                  {2}
                </section>
                <section>
                  {3}
                </section>
              </article>

              <article class="add-calculation">
                <section>
                  {4}
                </section>
                <section>
                  {5}
                </section>
              </article>

              <article class="add-calculation">
                <section>
                  {6}
                </section>
                <section>
                  {7}
                </section>
              </article>

              <article class="add-calculation">
                <section>
                  {8}
                </section>
                <section>
                  {9}
                </section>
              </article>


            </div>
          </body>
        </html>
        """

# 符号 + or -
def plusminus():
    r = random.randint(0, 1)
    if(int(r) == 0):
        return "{0}"
    else:
        return "(-{0})"

# from 1 to n (positive nubmer)
def r_positive(n):
    r = random.randint(1,n)
    formula = plusminus()
    return formula.format(str(r))


# plus or minus and symbol or sign
# 足し算 or 引き算
def addsub():
    r = random.randint(0, 1)
    if(r == 0):
        return " + "
    else:
        return " - "

# 一次方程式をつくる 関数
def mk_formula():
    str_list = []
    count = 0
    r = random.randint(1, 3)
    for i in range(7):
        list = [r_positive(9), addsub()]
        if(count < r and (i%2) == 0 ):
            str_list.append(list[(i%2)] + "x")
            count = count + 1
        else:
            str_list.append(list[(i%2)])

    n = int(len(str_list)/2) - 1
    r = 2 * random.randint(0, n) + 1
    del str_list[r]
    str_list.insert(r, " = ")

    return "".join(str_list)


formula0 = formula1 = formula2 = formula3 = formula4 = ""
formula5 = formula6 = formula7 = formula8 = formula9 = ""
formula_list = [formula0, formula1, formula2, formula3, formula4,
                formula5, formula6, formula7, formula8, formula9,]

for i in range(0, 10):
    formula_list[i] = mk_formula()

html_w = html.format(formula_list[0], formula_list[1], formula_list[2], formula_list[3], formula_list[4], formula_list[5], formula_list[6], formula_list[7], formula_list[8], formula_list[9])

path = "Linear-Equation.html"

with open(path, mode="w", encoding="utf-8") as f:
    f.write(html_w)

 

スポンサードサーチ


実行の手順

 全てのファイルを同じフォルダに保存して下さい。

 style.cssとprint.cssは名前を変えずそのまま保存してください。pythonファイルの名前は何でもOKです。

 実行する方法は、まずコマンドプロンプトを起動して、保存したフォルダまで移動して下さい。次に、「python ファイル名.py」と打ち込んで下さい。

 そうすると、同フォルダにhtmlファイルが生成されていると思います。そのファイルをダブルクリックすることで、問題が表示されます。

 最後に、そのページを印刷することで問題集として使用することが出来ます。

 

まとめ

 pythonで1次方程式の問題集を作る方法はいかがだったでしょうか?

 個人的には、改善の余地があるので精進していきたいと思っています。

 pythonで何かものを作るのは意外と簡単であると思います。今回のような簡単なコードでも問題集をつくることが出来ます。

 pythonは他にもできることはいっぱいありますが、少しずつ挑戦していきたいと思います。

 リクエストなどがありましたらtwitterのDMでお願いします。

 


スポンサードサーチ