命令行计算器(支持加减乘除)
编程基础第一期《1-30》小练习,掌握基础语法与核心概念,本期内容是实现命令行计算器,其中包含python基础知识有:
- 类与对象(面向对象编程)
- 字符串处理
- 流程控制
- 类型转换
- 异常处理
第一种方法
使用的是传统的遍历字符串,找出不是数字的下标(就是找出运算符),然后以序列的方式分别取出开头数、结尾数和运算符。
# 计算器
class Calculator:
def __init__(self, expression):
self.expression = expression
# 方法1:遍历查找运算符位置
operator_pos = None
# 循环索引和字符串,组成一个元组且遍历
for i, char in enumerate(expression):
if not char.isdigit():
operator_pos = i
break
if operator_pos is not None:
num1 = int(expression[:operator_pos])
operator = expression[operator_pos]
num2 = int(expression[operator_pos + 1:])
self.num1 = num1
self.Operator = operator
self.num2 = num2
else:
raise ValueError("表达式中未找到运算符")
def add(self):
return int(self.num1) + int(self.num2)
def sub(self):
return int(self.num1) - int(self.num2)
def mul(self):
return int(self.num1) * int(self.num2)
def div(self):
return int(self.num1) / int(self.num2)
def result(self):
if self.Operator == "+":
return self.add()
elif self.Operator == "-":
return self.sub()
elif self.Operator == "*":
return self.mul()
elif self.Operator == "/":
return self.div()
else:
return "无效的运算符"
expression = input("请输入表达式:")
result = Calculator(expression)
print(result.result())
第二种方法
使用正则表达式匹配,正则表达式篇可以参考:正则表达式(知识总结篇)-优快云-笨笨轻松熊
# 计算器
import re
class Calculator:
def __init__(self, expression):
self.expression = expression
pattern = r"(\d+)([+\-*/])(\d+)"
match = re.fullmatch(pattern, expression)
if match:
num1 = int(match.group(1))
operator = match.group(2)
num2 = int(match.group(3))
self.num1 = num1
self.Operator = operator
self.num2 = num2
else:
raise ValueError("无效的表达式格式")
def add(self):
return int(self.num1) + int(self.num2)
def sub(self):
return int(self.num1) - int(self.num2)
def mul(self):
return int(self.num1) * int(self.num2)
def div(self):
return int(self.num1) / int(self.num2)
def result(self):
if self.Operator == "+":
return self.add()
elif self.Operator == "-":
return self.sub()
elif self.Operator == "*":
return self.mul()
elif self.Operator == "/":
return self.div()
else:
return "无效的运算符"
expression = input("请输入表达式:")
result = Calculator(expression)
print(result.result())