参照Windows(标准/科学)计算器功能,实现加、减、乘、除等运算。增加要求:声明按钮数组;对0~9数字操作,采用相同算法解决;解决除数为0问题。
时间: 2024-02-17 20:03:07 浏览: 74
好的,这是一个比较简单的计算器功能,可以使用Python实现。
首先,我们需要设计一个简单的GUI界面,其中包含数字按钮、运算符按钮、等号按钮和显示结果的文本框。为了方便操作,我们可以使用按钮数组来存储所有的按钮。
代码如下:
```python
import tkinter as tk
# 创建窗口
window = tk.Tk()
window.title("计算器")
# 创建按钮数组
btn_text = ['7', '8', '9', '+', '4', '5', '6', '-', '1', '2', '3', '*', '0', '/', '=', 'C']
btns = []
# 添加按钮
for i in range(4):
for j in range(4):
btn = tk.Button(window, text=btn_text[i*4+j], width=5, height=2, font=('Arial', 12))
btn.grid(row=i+1, column=j, padx=1, pady=1)
btns.append(btn)
# 显示文本框
result = tk.StringVar()
result.set('0')
display = tk.Label(window, textvariable=result, width=23, height=2, bg='white', font=('Arial', 18), justify='right')
display.grid(row=0, column=0, columnspan=4, padx=5, pady=5)
# 运算符和数字按钮的功能函数
def button_click(symbol):
if symbol == 'C':
result.set('0')
elif symbol == '=':
try:
result.set(str(eval(result.get())))
except:
result.set('Error')
else:
if result.get() == '0':
result.set(symbol)
else:
result.set(result.get() + symbol)
# 给每个按钮绑定功能函数
for i in range(len(btns)):
btns[i].config(command=lambda symbol=btn_text[i]: button_click(symbol))
# 运行窗口
window.mainloop()
```
上述代码中,我们使用了Python的tkinter库来创建GUI界面。首先创建了一个窗口,然后定义了按钮数组和文本框,最后将每个按钮和文本框添加到窗口中。按钮的点击事件绑定了一个名为`button_click`的函数,该函数根据不同的按钮执行不同的操作。其中,`eval`函数可以将字符串形式的表达式转化为Python可执行的代码,从而计算出结果。
接下来,我们需要解决除数为0的问题。当用户输入除以0的表达式时,程序会抛出异常。为了避免这种情况,我们可以在`button_click`函数中添加一些逻辑,如下所示:
```python
def button_click(symbol):
if symbol == 'C':
result.set('0')
elif symbol == '=':
try:
# 检查除数是否为0
if '/0' in result.get():
result.set('Error')
else:
result.set(str(eval(result.get())))
except:
result.set('Error')
else:
if result.get() == '0':
result.set(symbol)
else:
result.set(result.get() + symbol)
```
在这个函数中,我们使用了一个`/0`字符串来检查除数是否为0。如果用户输入了除以0的表达式,程序会将结果文本框中的值改为`Error`。
最后,我们需要解决数字按钮的重复代码问题。由于数字按钮的功能相同,我们可以将其功能函数改为一个通用的函数,然后在循环中将其绑定到所有数字按钮上,如下所示:
```python
# 通用按钮功能函数
def digit_button_click(symbol):
if result.get() == '0':
result.set(symbol)
else:
result.set(result.get() + symbol)
# 绑定数字按钮
for i in range(10):
btns[i].config(command=lambda symbol=str(i): digit_button_click(symbol))
```
在这个函数中,我们将数字按钮的功能函数改为了一个名为`digit_button_click`的通用函数,并使用循环将其绑定到所有数字按钮上。这样,我们就避免了重复的代码。
阅读全文