20183202 实验二《Python程序设计》实验报告
20183202 2019-2020-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 1842
姓名: 李思远
学号:20183202
实验教师:王志强
实验日期:2020年4月11日
必修/选修: 公选课
1.实验内容
(1)设计并完成一个完整的应用程序,完成加减乘除摸等运算,功能多多益善。
(2)考核基本语法、判定语句、循环语句、逻辑运算等知识点
2. 实验过程及结果
2.1分析数学计算式,确定代码编写思路及步骤。
(1)对于一个计算式整体,先算括号里面的,再算括号外面的。
所以我们就可以确定,第一个步骤是将所有内层括号里面的算式找出来。
(2)括号里面应该是先算乘除法,然后再算加减法。
算出这些值,替换掉原来带括号的式子。再找带括号的式子,重复上述操作。直至式子中不含括号。
(3)最后再进行加减乘除运算
2.2编写代码
(1)导入re模块
(2)计算单个的乘除法
代码如下:
(3)计算单个的加减法
代码如下:
(4)计算加减乘除混合运算
代码如下:
(5)计算乘除法
代码如下:
(6)删除字符串中的空格
(7)处理符号问题
(8)进行计算的输入操作
在编写完成后,全部代码为:
'''
实验二:计算器设计
学号:20183202
姓名:李思远
'''
import re
def ind_mul(sz):
if '*' in sz: #计算单个的乘法
a,b = sz.split('*')
return str(float(a) * float(b))
elif '/' in sz: #计算单个的除法
a, b = sz.split('/')
return str(float(a) / float(b))
def add_sub(sz): #计算加减法
ret = re.findall('[+-]?\d+(?:\.\d+)?', sz) #利用正则表达式匹配算式中的带符号的每项数字,返回一个列表
sz_sum = 0
for i in ret:
sz_sum += float(i) #将列表中的每一项求和
return sz_sum
def cal(sz): #计算加减乘除混合运算
sz = mul_div(sz) #调用mul_div函数先计算乘除法
sz = signal_exp(sz) #调用format_exp处理计算时候的符号
exp_sum = add_sub(sz) #调用add_sub计算加减法
return exp_sum # float #返回计算结果
def mul_div(sz): #计算乘除法
while True:
ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',sz) #利用正则表达式匹配乘或除法
if ret: #如果匹配到的话
atom_sz = ret.group() #将这个值拿出来
res = ind_mul(atom_sz) #调用上面个的atom_cal计算
sz = sz.replace(atom_sz,res) #将计算的结果把原来的算是替换掉
else:return sz #如果匹配不到的话说明乘除法计算完毕,返回计算结果
def main(sz):
sz = sz.replace(' ','') #删除字符串中的空格
while True:
ret = re.search('\([^()]+\)',sz) #匹配括号
if ret : #如果匹配到的话
inner_bracket = ret.group() #用group()将匹配到的括号内容取出来
res = str(cal(inner_bracket)) #调用cal()计算括号中的内容,将返回的结果转换成字符串
sz = sz.replace(inner_bracket,res) #将匹配到的括号中的内容用计算结果替换
sz = signal_exp(sz) #处理符号
else:break #直到没有括号跳出循环
return cal(sz) #将剩下的内容进行计算,然后返回
def signal_exp(sz): #处理符号的问题
sz = sz.replace('--','+')
sz = sz.replace('+-','-')
sz = sz.replace('-+','-')
sz = sz.replace('++','+')
return sz
s = str(input('请输入你要计算的式子:'))
ret = main(s)
print(ret)
运行结果如下:
1.输入算式1+2-3*4/6,结果如下:
2.输入算式:(20+3*2-1)/4,结果如下:
3.输入算式(1842+1852)*20-3/2,结果如下:
运行结果与计算器结果一致,则程序编写成功。
3. 实验过程中遇到的问题和解决过程
- 问题1:数学计算式运算简单,且只包含加减乘除四则运算,但对于算式结构不知道如何拆分,对于将其编成代码没有头绪。
- 问题1解决方案:
1.找出一个复杂的,包含加减乘除运算的算式,逐步分析计算的解决方法,将计算步骤拆为从里向外的小括号计算,厘清思路。
2.在确定了宏观计算步骤后,结合编程语言的特性,再层层细化编程步骤。
3.编程遇到不确定的方法,尤其是在定义函数时不知道怎么编写,上网查阅了相关资料并与同学讨论。 - 问题2:编写代码时,对于定义函数,存在一些问题。
- 问题2解决方案:
1,通过重新看视频讲解,查阅参考书籍,与同学讨论后,解决了此问题。 - 问题3:编写代码后运行时频频报错。
-问题3解决方案:
1.起初使用python自带的IDLE编译器将代码逐行检查,但人工检查又难免漏掉一些错误,且IDLE不提示,运行时仍会报错。
2.后来下载安装使用了pyCharm中的debug功能,将代码中的错误找出后,重新编写。
-问题4:在最初编写程序时,想选择定义简单的四则运算函数,然后将其运用于式子的计算,但没有编译完成。
问题4解决方案:
1.加减乘除运算是人脑思维在计算式子时最常用的基本法则,但对于编程语言又是另一种截然不同的逻辑。在思考后舍弃了这种做法。
其他(感悟、思考等)
我的思考如下:
1.对于人脑思维与编程逻辑之间的关联性:
解决问题时的思维步骤与编程逻辑之间不同,但也存在一定的联系。所以在对于目标程序设计时,应先思考出解决问题的步骤,并且需要明确化,具体化。在对于编程没有思路时,可以仔细回想一下解决问题的步骤,然后将其向编程语言中的方法靠拢。
2.对于编译器的选择与使用:
频频报错的原因还主要是由于编写代码时的粗心大意,但可以在一定程度上借用软件的帮助。
参考资料
-
[《零基础学PYTHON》]