基于mvc实现简单计算器
时间: 2024-06-17 10:03:55 浏览: 14
基于MVC实现简单计算器,可以将视图、控制器和模型分别定义,分工明确,便于维护和升级。
1. 模型层(Model):负责处理数据和逻辑,进行数值计算。例如定义一个Calculator类,包含加、减、乘、除等计算方法。
2. 视图层(View):负责展示结果,例如定义一个CalculatorView类,包含显示结果的方法。
3. 控制器层(Controller):负责将视图和模型进行连接,接收用户输入并调用模型的方法进行计算。例如定义一个CalculatorController类,包含处理用户输入的方法。
具体实现步骤如下:
1. 定义模型层:创建一个Calculator类,包含加、减、乘、除等计算方法。
```python
class Calculator:
def __init__(self):
self.result = 0
def add(self, x, y):
self.result = x + y
def subtract(self, x, y):
self.result = x - y
def multiply(self, x, y):
self.result = x * y
def divide(self, x, y):
if y == 0:
raise ValueError('Cannot divide by zero')
self.result = x / y
```
2. 定义视图层:创建一个CalculatorView类,包含显示结果的方法。
```python
class CalculatorView:
def show_result(self, result):
print('Result:', result)
```
3. 定义控制器层:创建一个CalculatorController类,包含处理用户输入的方法。
```python
class CalculatorController:
def __init__(self, model, view):
self.model = model
self.view = view
def run(self):
while True:
operation = input('Enter operation (+, -, *, /): ')
if operation not in ['+', '-', '*', '/']:
print('Invalid operation')
continue
try:
x = float(input('Enter first number: '))
y = float(input('Enter second number: '))
except ValueError:
print('Invalid input')
continue
if operation == '+':
self.model.add(x, y)
elif operation == '-':
self.model.subtract(x, y)
elif operation == '*':
self.model.multiply(x, y)
else:
try:
self.model.divide(x, y)
except ValueError as e:
print(e)
continue
self.view.show_result(self.model.result)
choice = input('Do you want to continue? (y/n): ')
if choice.lower() != 'y':
break
```
4. 在主程序中创建对象并运行。
```python
if __name__ == '__main__':
model = Calculator()
view = CalculatorView()
controller = CalculatorController(model, view)
controller.run()
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)