Django
前回、Matplotlibを使って、Djangoで作成したWebページにグラフを表示する方法を解説しました。
ただし、少しおかしかったのが一次関数式の表示。
\(y = x\) が \(y = 1x + 0\) や \(y = -2x – 1\) が \(y = -2x + -1\) と表示されてしまい、数学的におかしな式になっていました。
今回は条件分岐のif文を使って、この点を修正していきましょう。
xの係数「a」の条件分岐
まずはxの係数である「a」を条件分岐させ、正しい表示に修正していきます。
修正する方針としてはこんな感じ。
- a = 0の時、aを表示せず、bのみの表示にする
- a=1、またはa=-1の時、1を表示せず、それぞれ「x」、「-x」と表示する
- aが上記以外の時、aに「x」をつけて表示する(a = -2の時、y = -2x)
ということでこんな感じにプログラミングしてみました。
if a == 0:
eq = 'y=' + str(b)
elif a == 1 or a == -1:
str_a = str(a).replace('1', '')
eq = 'y=' + str_a + 'x' + str(b)
else:
str_a = str(a)
eq = 'y=' + str_a + 'x' + str(b)
最終的に表示する式は変数eqとしています。
また前回「y=」をつけ忘れていたので、追加しておきました。
a=0の場合とaが0、1、-1でない場合に関しては特に難しくないと思うので説明は割愛します。
a=1、またはa=-1の場合は、まずは変数aを文字列に変換したのち、「1」を削除することでそれぞれプラスの場合は何もなし、マイナスの場合はマイナス記号だけにしています。
elif a == 1 or a == -1:
str_a = str(a).replace('1', '')
eq = 'y=' + str_a + 'x' + str(b)
これでxの係数「a」に関しては修正完了です。
「b」の条件分岐
次に「b」を条件分岐させ、修正していきます。
「b」に関しての分岐は以下の三種類です。
- b=0の場合、表示しない
- b<0の場合、そのまま表示する(数字にマイナス記号がついているため)
- b>0の場合、プラスの記号をつけて表示する
ただしここで注意する点としては、先ほど分岐させた「a」それぞれに対して上記の処理が必要で、またa=0の場合は「b」はそのまま表示することが必要になります。
ということでこんな感じにプログラミングしてみました。
if a == 0:
eq = 'y=' + str(b)
elif a == 1 or a == -1:
str_a = str(a).replace('1', '')
if b == 0:
eq = 'y=' + str_a + 'x'
elif b > 0:
eq = 'y=' + str_a + 'x+' + str(b)
elif b < 0:
eq = 'y=' + str_a + 'x' + str(b)
else:
str_a = str(a)
if b == 0:
eq = 'y=' + str_a + 'x'
elif b > 0:
eq = 'y=' + str_a + 'x+' + str(b)
elif b < 0:
eq = 'y=' + str_a + 'x' + str(b)
bに関しては単純な条件分岐だけですので、特にこれ以上の解説は割愛します。
試してみた
それではいくつかのパターンでちゃんと表示されるか試してみましょう。
まずはアクセスしたら表示される「y=x」。
これでa=1、b=0の場合は式が問題なく表示されることが分かりました。
次に「y=-x-1」。
これでa=-1、b=-1でも正しく式が表示されていることが分かります。
次に「y=x+1」。
次に「y=1」。
これでa=0でも正しく表示されていることが分かります。
次に「y=2x+2」
こちらも大丈夫そうです。
全ての組み合わせを試したわけではないですが、大体問題なさそうです。
これで一次関数表示アプリは大体完成です。
もちろんWebページを充実させるために、後々解説文等を追加する必要はありますが、それはDjangoの使い方から外れるということで割愛しましょう。
次回はもう一つ新しいアプリを作成することにして、今度は同じ数学のカテゴリの「二次関数」を作成してみることにします。
ではでは今回はこんな感じで。
コメント