LoginSignup
1
0

More than 1 year has passed since last update.

二次方程式の解を求めるプログラム

Last updated at Posted at 2022-07-31

二次方程式の解を求めるプログラム

二次式練習5.py
import tkinter as tk

def dispLabel():
    a = int(EditBox1.get())
    b = int(EditBox2.get())
    c = int(EditBox3.get())
    D = b**2-4*a*c

    if a==0:
        
        lbl4.configure(text="x="+str(-c/b))

    else:    
        if D<0:
            lbl4.configure(text="解無し")
        else:
            answer1=(-b-(b**2-4*a*c))/2*a
            answer2=(-b+b**2-4*a*c)/2*a
            str_answer1=str(answer1)
            str_answer2=str(answer2)
            lbl4.configure(text="x="+str_answer1+","+str_answer2)

root=tk.Tk()
root.geometry("200x300")

EditBox1= tk.Entry(width=2)
EditBox1.place(x = 20, y = 20)
EditBox2= tk.Entry(width=2)
EditBox2.place(x = 60, y = 20)
EditBox3= tk.Entry(width=2)
EditBox3.place(x = 100, y = 20)

btn=tk.Button(text="計算する",command=dispLabel)
btn.place(x = 60, y = 60)
lbl1=tk.Label(text="x²+").place(x = 40, y = 20)
lbl2=tk.Label(text="x+").place(x = 80, y = 20)
lbl3=tk.Label(text="=0").place(x = 120, y = 20)
lbl4=tk.Label(text=" ")
lbl4.place(x = 20, y = 100)

tk.mainloop()

作り方

ax^2+bx+c型の二次式のa,b,cを打ち込めるようにし、x=解と表示できるようにします。
また虚数解になる場合には解無しと表示させるプログラムを作ります。

1行目のimport tkinter as tkはtkinterをインポートし、操作できる画面を作ります。

2から5行目のdef dispLabel():
a = int(EditBox1.get())
b = int(EditBox2.get())
c = int(EditBox3.get())でa,b,c,を入力できるボックスを作ります。

6行目のD = b**2-4*a*cではDを判別式する場合のDの値です。
Dが0未満の時はxは解無しと表示したいため、
D!=0と書くより前の段階で計算しておく必要があります。

又、aが0の時は二次関数ではなくただ一次式を計算すればいいのでif文で先に解を計算させます。

10行目ではaが0でなかった場合、つまり二次式だった時に先ほどのDが0未満であるか否かを判別します。

12から17行目ではDが0以上であるときの計算式を作っています。

18,19行目ではウィンドウの大きさ、20から25行目ではa,b,cのボックスの位置を指定しています。

感想

・aが0だった場合、Dが0未満の場合、それ以外の場合の計算とラベルの反映をどのように場合分けするか。
・a,b,cに入力した数字はそのままだと文字型になってしまうので、どの段階で数字型に変換させたらいいか。
の2点が難しかったです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0