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

20193102 2019-2020-2 《Python程序设计》实验x报告

课程:《Python程序设计》
班级:1931
姓名:李潇敏
学号:20193102
实验教师:王志强
实验日期:2020年4月22日
必修/选修: 公选课

1.实验内容

  • 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
  • 考核基本语法、判定语句、循环语句、逻辑运算等知识点。

2. 实验过程及结果

  • 首先,我在构思这个计算器的时候,确定了六项计算器的功能,如图所示:
  • 但是,对于第一项加减乘除运算最简单的是只有两个数运算,没有办法计算多个数,更别说是加减乘除混合的式子。对于这一点,我在网上查了很多资料,看到一个运用压栈的方式计算出结果,但这个知识我们还没有学习,而且他的博客我也不能完全看懂,然而这个方法给了我一个启发。他的方法是通过用户输入一个加减乘除括号混合的式子,再分理出各项,再根据运算符号的不同计算结果。这让我想到了如果可以把式子的每一项变成一个列表中的元素,再通过切片的方式切出运算优先级高的部分,运算得出结果后让这个结果代替这个部分的式子,依次类推,最后得到计算结果。
    • 对于式子中的每项都是一个元素,由于目前的知识还无法做到,但可以通过用户手动逐项输入
    • 这个程序可以有括号的存在,但是括号之间不能叠加存在,因为如果叠加,就不好通过括号的存在前后顺序判断优先级

这是逐项输入式子各项,并将每一项添加到列表里,输入完成后可输入over停止。

这是判断第一个优先级——括号,如果式子中存在括号就通过索引的方式找到括号的位置,并用切片的方法将看括号内的式子重新放在一个列表内

然后在这个新的列表内再索引在是否有第二个优先级乘号,同上一步,如果有,计算出乘号前后两个元素的乘积,用切片删除这个乘法,将运算结果添加到列表中。因为这只能检索一次,所以我将这段程序设为函数,反复调用函数减小代码行数。
同理可以类似写出除法、加法、减法的函数。并按照优先级调用,计算出列表内的运算结果。

按优先级反复调用函数

然后循环通过以上方法处理括号,再按同样的道理按优先级计算没有括号的列表,最后列表中只有一个元素时,即为运算结果。
这是运行结果:

  • 计算器第二个功能为求模运算,这个相比于第一个就容易很多了,只要输出提示语让用户输入两个参与运算的数,再输出结果就可以了。下图为代码和运行结果

  • 计算器第三个功能为进制转化,通过python内置函数就可以做到,之前视频里也提到过,代码和运行结果如下

  • 计算器第四个功能为阶乘,循环即可完成,没有难度

  • 计算器第五个功能为累加运算,可以通过for循环,之前视频中的例子也提到过,代码和运行结果如下

  • 计算器第六个功能为输出九九乘法表,也是个循环

  • 本次实验代码码云链接:
    https://gitee.com/python_programming/li_xiaomin20193102/blob/master/2020.4.21计算器.py

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

  • 问题1:第一个问题也是困扰我很久的问题就是如何让程序可以计算复杂的算式,而不是两个数作加减乘除
  • 问题1解决方案:通过网上查找资料获得启发,从高级的方法里化简为已经学过的知识进行解决
  • 问题2:进行除法时报错
  • 问题2解决方案:/计算出来的是浮点型的,要注意在混合运算中要统一数据类型,因此要用//来做除法
  • 问题3:第一次运行的时候,发现选择一项功能后连续输出了好几遍“还要继续使用计算器么”
  • 问题3解决方案:经过单步调试,我发现是因为在每次功能循环后我没有break跳出循环,所以导致一直在一个地方循环输出是否继续

其他(感悟、思考等)

  • 多翻笔记,虽然记笔记很耗费时间,但是确实可以在之后提醒你、帮助你回忆知识点,这次很多地方是都查看笔记后解决的,并且在应用知识的时候反而理解了当时听视频课时不懂的地方,这也说明理论和实践要相结合才能发挥出更大的作用。因此,虽然要花更多的时间去完成笔记,但我还是会把各科的笔记记下去。
  • 列表是个非常好用的工具,不仅仅是因为它可以把一系列元素集中在一起,而且有很多关于列表的应用函数等,比如遍历输出、查找元素、切片等等可以大大增加我们的需求。
  • 多百度,在网上查找资料,查找资料并不是在网上找答案,而是通过网络接触到大神,接触到不同的编程思路,开阔自己,从中受到启发,提升自己。

参考资料

  • 百度
  • 笔记

猜你喜欢

转载自www.cnblogs.com/lixiaomin/p/12755914.html
今日推荐