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真的是一个非常简洁明了和实用的语言。
参考资料