学号 2019-2020-2 《Python程序设计》实验x报告
课程:《Python程序设计》
班级:1922
姓名:叶蕊馨
学号:20192221
实验教师:王志强老师
实验日期:2020年4月11日
必修/选修: 公选课
1.实验内容
(1)设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
(2)考核基本语法、判定语句、循环语句、逻辑运算等知识点
2. 实验过程及结果
一、程序流程
1.首先导入re模块
2.计算单个的乘除法的代码
通过判断'*'和'/'是否在字符串内计算
3.计算多乘除法的代码
通过正则表达式循环判断,
.research
语句进行匹配
4.计算加减法的代码
同样通过正则表达式进行匹配
5.混合运算的代码
通过计算顺序调用前面所写的函数
6.从键盘输入算式,并加入循环方便用户使用
7.运行结果
二、程序全代码
全部代码如下
import re
def md(exp):
if '*' in exp:
a, b = exp.split('*')
return str(float(a)*float(b))
elif '/' in exp:
a, b = exp.split('/')
return str(float(a)/float(b))
def sa(exp):
ret = re.findall('[+-]?d+(?:.d+)?', exp)
exp_sum = 0
for i in ret:
exp_sum += float(i)
return exp_sum
def mul_div(exp):
while True:
ret = re.search('d+(.d+)?[*/]-?d+(.d+)?', exp)
if ret:
atom_exp = ret.group()
res = md(atom_exp)
exp = exp.replace(atom_exp, res)
else:
return exp
def cal(exp):
exp = mul_div(exp)
exp_sum = sa(exp)
return exp_sum
c = True
while c:
a = input("请输入一个算式")
print(cal(a))
b = input("你还想继续算吗?(是or否)")
if b == '是':
c = True
elif b == '否':
c = False
3. 实验过程中遇到的问题和解决过程
- 问题1:没想到如何匹配'*'和'/',想用列表但写出来有点复杂
- 问题1解决方案:通过查找正则表达式的符号,写出正则表达式来匹配
- 问题2:最开始输入一次算式计算完毕就自动结束了
不方便使用者操作,需重新运行程序 - 问题2解决方案:增加循环,通过使用者意愿决定是否结束程序
其他(感悟、思考等)
最开始对正则表达式的不熟悉导致编写花费很多的时间,需要不断查找每个字符代表什么意思
后来对常用的几种字符进行了记忆,编写代码更加顺畅