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

课程:《Python程序设计》

班级: 1843

姓名: 李新锐

学号:20184302

实验教师:王志强

实验日期:2020年4月11日

必修/选修: 公选课

1.实验内容

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

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

2. 实验过程及结果

*实验的完整代码和码云链接如下:

-码云链接

-代码截图:









  • 首先叙述一下整体思路:我们将运算数与运算符各自为各自的输入,由于Python中的输入input都为字符串,所以对于小数还是整数的类型转化需要分开,所以在一开始需要询问是选择纯整数运算还是浮点数运算,对于纯整数运算我们只能输入整数否则会报错,而对于浮点数来说我们可以输入整数,也可以输入浮点数,也可以混合输入,最后的运算结果保留到小数点的后十位,在浮点数运算中如果输入了两个整数,虽然结果正确,但是会带有小数点。然后整体套入一个循环条件为1的while循环,在每次做完计算后都会询问是否再次进行运算,如果输入的为“是”,则继续循环,如果输入其它则退出循环。在开头有两个函数fun1和fun2,主要是用来计算两个数的最小公倍数和最大公约数。主要用于分数计算,我有添加了一个分数运算,只可以输入分数,否则会报错,最后结果也会用分数表示类似于1/3+2/3也会表示为1.0/1.0.对于纯整数运算我们提供+,-,,/,mod,^ ; 对于浮点数运算我提供+,-,,/,^,因为mod运算只能用于整数,对于分数我们提供+,-,*,/。
  • 我们将整个计算器分为三部分,第一部分为纯整数运算,因为对输入采取的是强制整数类型转换所以必须输入的是整数否则会进行报错提醒。纯整数运算结果或者参与运算数可以为负。对于指数运算底数不能为0,除数不能为0,如果为0,则会重新输入。对于指数操作我们主要使用了**,而mod运算使用的是%。
  • 第二部分我们输入为浮点数,采用round函数将结果限制在小数点后十位。
  • 第三部分为分数运算,关于如何将分数转化为我们能够计算的数,我们主要采用了字符串分割的思想,使用index函数采用“/”为分割信号,将“/”前面的字符和后面的字符,需注意a[1:3]前面位置是包含的,后面位置不包含。由于分子和分母我们一般不使用小数,所以强制转化为整数。对于加法和减法我们都分成两类,一类是分母相同的一类是分母不同的。对于分母相同的,我们只计算其分子的和,然后将分子和以及分母带入求最大公约数的函数中求出最大公约数然后约分。对于分母不同的我们先将两个分母带入求最小公倍数的函数中求出最小公倍数,再用最小公倍数除以各自的分母,查看它们乘以多少才到达了虽大公倍数,再用此数乘分子然后相加,最后仍需约分。对于分数的乘法来说分子乘分子,分母乘分母,再约分。而对于除法而言,我们采用除一个数就是乘该数的倒数。
  • 关于最小公倍数和最大公约数的查找我分别放入了fun1和fun2,采用的是欧几里得法(辗转相除法),这条算法基于一个定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。而最小公倍数为:最小公倍数 = 两个整数的乘积 / 最大公约数。
  • 对于代码的改进还可以加入开方运算,初步想法为使用分数指数,即pow(144,0.5),以整数开方为例代码为:
a=int(input("请输入您想计算的第一个数:"))
c=input("请输入您想计算的第二个数:")
where1 = c.index("/")
c1 = int(c[0:where1])
c2 = int(c[where1+1:])
answer=pow(a,c1/c2)
print(answer)

实验结果截图:









对于分数运算其实可以使用任意位数的分子分母因为主要是以“/”来进行分割,而不是长度。



对于分数的运算由于不能输入不带“/”符号的数,所以除数为0也就不可行了。



对于纯整数不能输入浮点数,主要卡在强制类型转换



可以看到整数与浮点数的运算是可行的。

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

  • 问题1:在输入两个浮点数进行运算的时候,我们的结果出现了不规则的情况。
  • 问题1解决方案:使用了round函数,将结果截止到小数点后十位。
  • 问题2:在一开始的截取字符串的时候我们使用的是a[1,2],结果报错所说,索引只能为整数。
  • 问题2解决方案:将“,”改为“:”,主要是太固有C语言的语法和对python的语法还是不够熟悉。
  • 问题3:在一开始的分数运算结果约分时,对于公约数为0的情况没有加以注意。
  • 问题3解决方案:使用if区分开公约数为0和不为0的情况。

其他(感悟、思考等)

通过该次实验我知道了一些新的函数如round也对一些旧的函数如index有了更加深刻的认识。对于字符串的使用和定义,以及一些操作有了更深层次的领悟。对于python的输入,如何得到想要的输入类型,更加熟悉了。对于判定语句如if和循环语句的应用以及嵌套掌握的更熟练了。对于逻辑运算和基本的语法的领悟也有了一定的提升。感到python真的是一个非常简洁明了和实用的语言。

参考资料

201843 2019-2020-2 《Python程序设计》实验二报告的更多相关文章

  1. Python程序设计实验报告二:顺序结构程序设计(验证性实验)

      安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩 日期     2020.3.22     指导老师       修宇 [实验 ...

  2. 201922904李龙威 2019-2020-2 《Python程序设计》实验二报告

    20192204 2019-2020-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...

  3. 20192113 2020-2021-2 《Python程序设计》实验二报告

    20192113 2020-2021-2 <Python程序设计>实验二报告 课程:<Python程序设计> 班级: 1921 姓名: 衣丽莎 学号:20192113 实验教师 ...

  4. PYTHON程序设计实验

    Python程序设计实验报告一: 熟悉IDLE和在线编程平台 安徽工程大学 Python程序设计实验报告 班级 物流191 姓名 邹缕学号 3190505117成绩 ▁▁▁ 日期 2020.3.5 指 ...

  5. Python程序设计实验报告一:熟悉IDLE和在线编程平台

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩_____           日期     2020.3.8     指导老师  ...

  6. Python程序设计 实验 1 熟悉 IDLE 和在线编程平台

    ------------恢复内容开始------------ 安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2 ...

  7. Python程序设计实验报告四:循环结构程序设计(设计型实验)

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2020.4.8     指导老师       修宇 [实验名称 ...

  8. Python程序设计实验报告三:分支结构程序设计

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2020.4.5     指导老师       修宇 [实验目的 ...

  9. 20145316《Java程序设计》实验二报告

    20145316<Java程序设计>实验二报告 一.实验目的与要求 1.初步掌握单元测试和TDD. 2.理解并掌握面向对象三要素:封装.继承.多态. 3.初步掌握UML建模. 4.熟悉S. ...

随机推荐

  1. IO多路复用小故事

    背景故事 小王住在某城市, 生活并长大. 最近, 小城引进了一个企业, 邮局. 这个邮局可了不得, 只要你花上几角钱, 就可以将一封信送到千里之外的朋友手中. 小王也趁机体验了一把, 得劲. 这天, ...

  2. python 工具链 虚拟环境和包管理工具 pipenv

    Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, ...

  3. coding++:@DisallowConcurrentExecution 注解的作用

    Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞. 在Spring中这时需要设置concurrent ...

  4. INDIRECT函数实现动态图表的跨数据抓取

    涉及函数: indirect函数:通常有两种用法.直接指定单元格地址和隐式指定单元格地址.直接指定:=indirect("A4"),则会返回A4单元格所显示的内容.参数给定的既是字 ...

  5. ES6中的let关键字,有什么用呢?

    来吧,开始本节的学习! ES6 给开发者带来很多令人激动的特性,其中let关键字就是其中之一. 那么,let关键字是什么东西? let 的用途 我们回想一下,我们平时在写代码的时候,用var来声明一个 ...

  6. Go语言: 万物皆异步

    来源:https://www.jianshu.com/p/62c0cd107da3 同步和异步.阻塞和非阻塞 首先要明确的是,同步(Synchronous)和异步(Asynchronous),阻塞(B ...

  7. centos 7 安装更新php5.6

    epel  remi 什么的把我弄晕了 不深研这东西了,直接按步骤操作更新了. # yum install epel-release # rpm -ivh http://rpms.famillecol ...

  8. wait,waitpid的学习使用

    man wait man waitpid 从中可知 函数原型 pid_t wait(int* status); pid_t waitpid(pid_t pid, int* status, int op ...

  9. qt 鼠标拖动窗口 跳动 解决

    因为获取当前的位置,似乎没有把标题栏的高度记进去. 所以移动前,得考虑到标题栏的高度. 用以下方式获取标题栏高度: QApplication::style()->pixelMetric(QSty ...

  10. 霍夫变换(Hough Transform)

    霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.最基本的霍夫变换是从黑白图像中检测直线(线段). 我们先看这样一个问题: 设已知一黑白图像上画了一条直线,要求出这 ...