python实验报告二_20183202 实验二《Python程序设计》实验报告

本文详细记录了一位学生在《Python程序设计》课程中完成实验二——设计计算器的过程。实验涉及括号处理、四则运算、符号处理等复杂逻辑,通过逐步分析、编写和调试代码,最终实现了一个能够处理加减乘除和括号运算的计算器。在实验中遇到了函数定义、代码报错等问题,通过查阅资料、讨论和使用调试工具逐一解决,实现了正确计算各类算式的功能。
摘要由CSDN通过智能技术生成

20183202 2019-2020-2 《Python程序设计》实验二报告

课程:《Python程序设计》

班级: 1842

姓名: 李思远

学号:20183202

实验教师:王志强

实验日期:2020年4月11日

必修/选修: 公选课

1.实验内容

(1)设计并完成一个完整的应用程序,完成加减乘除摸等运算,功能多多益善。

(2)考核基本语法、判定语句、循环语句、逻辑运算等知识点

2. 实验过程及结果

2.1分析数学计算式,确定代码编写思路及步骤。

(1)对于一个计算式整体,先算括号里面的,再算括号外面的。

所以我们就可以确定,第一个步骤是将所有内层括号里面的算式找出来。

(2)括号里面应该是先算乘除法,然后再算加减法。

算出这些值,替换掉原来带括号的式子。再找带括号的式子,重复上述操作。直至式子中不含括号。

(3)最后再进行加减乘除运算

2.2编写代码

(1)导入re模块

1939319-20200411095039547-68555433.png

(2)计算单个的乘除法

代码如下:

1939319-20200411095100134-1590575402.png

(3)计算单个的加减法

代码如下:

1939319-20200411095116256-1034315602.png

(4)计算加减乘除混合运算

代码如下:

1939319-20200411095137653-1348197426.png

(5)计算乘除法

代码如下:

1939319-20200411095156164-295483859.png

(6)删除字符串中的空格

1939319-20200411095217593-108415633.png

(7)处理符号问题

1939319-20200411095234851-1788379192.png

(8)进行计算的输入操作

1939319-20200411095304022-1484770700.png

在编写完成后,全部代码为:

'''

实验二:计算器设计

学号: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,结果如下:

1939319-20200411094134022-921677658.png

2.输入算式:(20+3*2-1)/4,结果如下:

1939319-20200411094152206-1211510234.png

3.输入算式(1842+1852)*20-3/2,结果如下:

1939319-20200411094212909-1440646912.png

运行结果与计算器结果一致,则程序编写成功。

3. 实验过程中遇到的问题和解决过程

问题1:数学计算式运算简单,且只包含加减乘除四则运算,但对于算式结构不知道如何拆分,对于将其编成代码没有头绪。

问题1解决方案:

1.找出一个复杂的,包含加减乘除运算的算式,逐步分析计算的解决方法,将计算步骤拆为从里向外的小括号计算,厘清思路。

2.在确定了宏观计算步骤后,结合编程语言的特性,再层层细化编程步骤。

3.编程遇到不确定的方法,尤其是在定义函数时不知道怎么编写,上网查阅了相关资料并与同学讨论。

问题2:编写代码时,对于定义函数,存在一些问题。

问题2解决方案:

1,通过重新看视频讲解,查阅参考书籍,与同学讨论后,解决了此问题。

问题3:编写代码后运行时频频报错。

-问题3解决方案:

1.起初使用python自带的IDLE编译器将代码逐行检查,但人工检查又难免漏掉一些错误,且IDLE不提示,运行时仍会报错。

2.后来下载安装使用了pyCharm中的debug功能,将代码中的错误找出后,重新编写。

-问题4:在最初编写程序时,想选择定义简单的四则运算函数,然后将其运用于式子的计算,但没有编译完成。

问题4解决方案:

1.加减乘除运算是人脑思维在计算式子时最常用的基本法则,但对于编程语言又是另一种截然不同的逻辑。在思考后舍弃了这种做法。

其他(感悟、思考等)

我的思考如下:

1.对于人脑思维与编程逻辑之间的关联性:

解决问题时的思维步骤与编程逻辑之间不同,但也存在一定的联系。所以在对于目标程序设计时,应先思考出解决问题的步骤,并且需要明确化,具体化。在对于编程没有思路时,可以仔细回想一下解决问题的步骤,然后将其向编程语言中的方法靠拢。

2.对于编译器的选择与使用:

频频报错的原因还主要是由于编写代码时的粗心大意,但可以在一定程度上借用软件的帮助。

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值