用 Python 搭建解一元二次方程的计算器

目录

前言

一、算法实现

二、TK 图形化界面

三、一元二次方程计算器 - 完整代码

参考资料


前言

一元二次方程想必大家都不陌生。在中学时,我们学过求根公式:

x = \frac{-b\pm\sqrt{b^2-4ac}}{2a}

当 b² - 4ac 大于零时,方程有两个解;等于零时有一个解;小于零时则无解。

那么就把数学公式变成代码!我们说干就干。


一、算法实现

首先导入要用到的数学库 math

import math

知识点:连续输入多个 float 型数字

a,b,c = map(float,input("对于方程a^2x+bx+c=0, \n请输入a,b,c(空格隔开):").split())
# Tips: 可以通过.split(',') 将输入的分隔符改为逗号

通过求根公式解方程

k = b*b-4*a*c

# 知识点:if 判断语句的使用
if k < 0 :

   print('方程无解')

# 注意,逻辑'等于'是两个等号,一个等号代表赋值
elif k == 0 :

   x = -b/(2*a)

   # 知识点:通过 %.2f 使输出的数保留两位小数
   print('方程的解为:x1=x2=%.2f' % x)

else :
   x1 = (-b+math.sqrt(k))/(2*a)
   x2 = (-b-math.sqrt(k))/(2*a)

   print('\n方程的解为: x1=%.2f, x2=%.2f' % (x1,x2))

运行结果展示:

算法部分就完成了。但是,运行要依靠命令行输入数字,对普通用户还是不太友好。

接下来,我们给这个计算器加上 GUI 界面:


二、TK 图形化界面

Tkinter 是 Python 的标准 GUI 库,且内置在了 Python 的安装包中。也就是说,我们只需输入这么一行:

import tkinter as tk

就可以开始 GUI 编程啦~ 接下来,我们先搭一个简单的计算器界面

创建一个窗口,我们输入:

window = tk.Tk() # 创建窗口

window.title('计算器') # 窗口的标题

window.geometry('800x400') # 窗口的大小(也可以不指定)

window.mainloop() # 窗口运行起来,要放在结尾哦

一个基本的窗口就搭建起来了~

在窗口上显示一行字:

k = tk.Label(window,text='请输入一个数字:',font=('Arial',12)) # 文字label
k.grid() # 固定文字的位置

再增加一个输入框:

x = tk.Entry(window) # 输入框
x.grid()

 再放一个按钮:

# 先定义一个点击按钮时触发的函数
def cal():
    a = float(x.get()) # 从输入框中读取一个 float 变量
    b = a + 1
# 定义一个按钮
b1 = tk.Button(window,text='计算',command=cal)
b1.grid()

 当然,我们还需要一个显示计算结果的地方:

def cal():
    a = float(x.get()) # 从输入框中读取一个 float 变量
    b = a + 1
    c.set(b) # 注意,在这个函数里插了一行
c = tk.StringVar() # 字符串变量
# 把计算结果显示出来
l = tk.Label(window,textvariable=c,font=('Arial',12))
l.grid()

这时候我们输入一个数,点击“计算”,就能得到这个数+1的数啦~

一个简单的计算“+1”的计算器就建好了。

但是,这个这几个文字和框竖着排成了一列,有些不太规整。

# 把上面几行用于排版的代码改一下:
k.grid(row=0,column=0,sticky='w')
x.grid(row=1,column=0)
b1.grid(row=1,column=1,padx=20)
l.grid(row=3,column=0,sticky='w')


三、一元二次方程计算器 - 完整代码

在第二章,我们基本搭建了一个界面。接下来,我们将第一章中的算法打包进去

先放运行结果:

 接下来是完整代码

import tkinter as tk
import math

window = tk.Tk() # 创建窗口
window.title('一元二次方程计算器') # 窗口的标题
# window.geometry('800x400') # 窗口的大小(也可以不指定)

# 一些界面元素
# grid 是一个格点,决定元素显示哪里
# columnspan 横跨多列格点,rowspan 同理
# padx pady ipadx ipady 调整分别调整外边距和内边距
# sticky = E 靠右 W 靠左

k = tk.Label(window,text='请输入一元二次方程的参数:',font=('Arial',12)) # 文字label
k.grid(row=0,column=0,columnspan=3,sticky='w',padx=10,pady=10)

x02 = tk.Entry(window) # 输入框
x02.grid(row=1,column=0,padx=10)

p1 = tk.Label(window,text=' x² + ',font=('Arial',12))
p1.grid(row=1,column=1)

x01 = tk.Entry(window)
x01.grid(row=1,column=2)

p2 = tk.Label(window,text=' x + ',font=('Arial',12))
p2.grid(row=1,column=3)

x00 = tk.Entry(window)
x00.grid(row=1,column=4)

p3 = tk.Label(window,text=' = 0',font=('Arial',12))
p3.grid(row=1,column=5)

# 一元二次方程计算函数(点击按钮后执行)
def cal():
    a = float(x02.get())
    b = float(x01.get())
    c = float(x00.get())

    k = b*b-4*a*c
    g = -c/b

    if a == 0:
        resu.set('方程的解为: x = %.2f' % g)

    if k < 0 :
        resu.set('方程无解')

    elif k == 0 :
        x = -b/(2*a)
        resu.set('方程的解为: x1 = x2 = %.2f' % x)

    else :
        x1 = (-b+math.sqrt(k))/(2*a)
        x2 = (-b-math.sqrt(k))/(2*a)
        resu.set('方程的解为: x1 = %.2f   x2 = %.2f' % (x1,x2))
    
# 按钮
b1 = tk.Button(window,text='计算',width=10,command=cal)
b1.grid(row=1,column=6,padx=20)

# 结果显示
resu = tk.StringVar() # 字符串变量
l = tk.Label(window,textvariable=resu,font=('Arial',12))
l.grid(row=3,column=0,sticky='w',columnspan=3,padx=10)

window.mainloop() # 窗口运行起来,要放在结尾哦

参考资料

【Python】Tkinter教程_木子欢儿的博客-CSDN博客

Python Tkinter Grid布局管理器详解 - 箬笠蓑衣 - 博客园 (cnblogs.com)

如何设置 Tkinter 文本输入控件的高度和宽度 | D栈 - Delft Stack

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值