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

课程:《Python程序设计》
班级: 1912
姓名: 斯廷响
学号:20191212
实验教师:王志强老师
实验日期:2021年5月5日
必修/选修: 公选课

1.实验内容

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

  • 考核基本语法、判定语句、循环语句、逻辑运算等知识点
  • 要求:创建工程项目,使用Python语言实现具体的操作运算,并完成程序调试和运行,代码托管到码云。


2. 实验过程及结果
设计思路:

通过调用python的库,可以获取许多种包含取绝对值、求对数、求阶乘、进制转换等数学运算。只要通过上网查询即可得知,又因为python的一大特点就是数据库中包含大量的现成函数供直接调用,所以这样不违背程序设计的原则,所以合理。(这个思路参考了以前用C语言写程序时的想法)

这样做不进可以大大减小程序的复杂度也可以使工作量减少,免去了写专门函数的过程。通过查询资料可得知一部分函数,在经过自己的加工以及定义设计可以得到abs() 、fac()  、bi() 、oc() 、abbi()  、aboc()等函数可以用来调用(具体功能见代码的pre注释说明部分)。

代码如下:

pre = '''

四则运算: 直接+-*/(()) : (9*9)+3-2/2 = 83
幂运算:
平方 sqr(底数) : sqr(8) = 64
三次方 cube(底数) 例: cube(3) = 27
n次方 pow(底数,指数) 例: pow(3,4) = 1296
根式运算:
开方 sroot(底数) 例: sroot(16) = 4
三次根号 croot(底数) 例: croot(8) = 2
n次根号 nroot(底数,次数)例: nroot(8,3) = 2
对数运算:
log log(真数,底数) 例: log(4,2) = 2
ln ln(真数) 例: ln(2.72) = 1.0006
取绝对值:
| | abs() : abs-985 = 985
阶乘 :
! fac() 例: fac(5) = 120
进制转换:
十进制转换成其他:
十进制——>二进制 bi() 例: bi(10) = 1010
十进制——>八进制 oc() 例: oc(10) = 12
十进制——>十六进制 he() 例: he(10) = A
其他转换成十进制:
二进制——>十进制 abbi() 例: abbi(10100) = 20
八进制——>十进制 aboc() 例: aboc(1010) = 520
十六进制——>十进制 abhe(" ") 例: abhe("AB") 或者 abhe("ab") = 171

其他参数
π 记作 pi 例: pi / 3 = 1.0471975512..
自然对数 记作 e 例:e * 4 = 10.8731273138..

'''
import math
instruction = '本计算器的操作方法'
print("{:*^40} {}".format(instruction,pre))
print("***************************************")


pi = math.pi
e = math.e

def sqr(x):
result = x * x
return result
def cube(x):
result = x * x * x
return result


def sroot(x):
result = pow(x,0.5)
return result
def croot(x):
result = pow(x,1/3)
return result
def nroot(x,y):
result = pow(x,1/y)
return result


def log(x,y):
result = math.log(x,y)
return result
def ln(x):
result = math.log(x)
return result

def fac(x):
result = 1
for i in range(1,x+1):
result *= i
return result
def bi(a):
result = bin(a)[2:]
return result
def oc(a):
result = oct(a)[2:]
return result
def he(a):
result = hex(a)[2:].upper()
return result

def abbi(a):
result = 0
n = 0
while a//10 != 0 :
result += (a%10) * pow(2,n)
n += 1
a //= 10
result += (a%10) * pow(2,n)
return result
def aboc(a):
result = 0
n = 0
while a//10 != 0 :
result += (a%10) * pow(8,n)
n += 1
a //= 10
result += (a%10) * pow(8,n)
return result
def abhe(a):
le = len(a)
result = 0
ls = [0] * le
for i in range(le):
if a[i] == 'a' or a[i] == 'A':
ls[i] = 10
elif a[i]=='b' or a[i] =='B':
ls[i] = 11
elif a[i]=='c' or a[i] =='C':
ls[i] = 12
elif a[i]=='d' or a[i] =='D':
ls[i] = 13
elif a[i]=='e' or a[i] =='E':
ls[i] = 14
elif a[i]=='f' or a[i] =='F':
ls[i] = 15
else :
ls[i] = int(a[i])
result += ls[i] * pow(16,le-i-1)

return result
while 1:
scanf = input("输入算式 ")
if scanf == '':
break
else:
try:
result = eval(scanf)
print(" ={} ".format(result))
except:
print("语法错误! ")

运行程序:

 输入一些算式测试计算器程序的计算功能:

验证思路:

通过真实计算器和在线进制转换工具验证上述算式结果,均正确,说明计算器的计算能力没有问题。设计成功。

上传码云:

https://gitee.com/besti2021python/stx20191212homework/blob/master/experiment2


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


- 问题1:虽然对设计计算器实验的思路有了不少,但是由于自己也是一个学习python的新手对函数大多不太了解,不是很懂python的库中有哪些计算方法以及怎么使用它们。
- 问题1解决方案:通过查询

https://blog.csdn.net/u011222983/article/details/45007599?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.vipsorttest&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.vipsorttest

https://blog.csdn.net/weixin_44431795/article/details/94436620?utm_term=python3%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-3-94436620&spm=3001.4430

两个网址发现了一些我不知道的python数学函数,通过学习它们的用法并加以实际操作便合理运用,即通过自己的定义使程序的输入更加符合非程序员使用时的思维。成功将自己计算器的功能增多。


- 问题2:不知如何使程序能够在完成一个计算以后仍然能够继续进行计算而非关闭计算器需要重新打开。
- 问题2解决方案:(参考以前学习C语言时候的学过的一些知识)写一段程序代码(在最后),使程序只有在用户不输入值就输入回车的情况下才退出,否则不退出。

- 问题3:虽然程序功能都做的正确,但是对于不知道我定义的这些函数甚至是非程序员来说,使用这个计算器几乎是不可能的,因为他可能不知道输入的格式以及我自己定义的一些函数。说白了就是这个计算器只有我自己能使用,而不能分享给比人。
- 问题3解决方案:写注释。通过将注释首先打印在屏幕上,让用户可以根据自己的需求按对应的方法输入算式,即pre。通过这个操作方法教学指南以及实例演示可以让用户清晰明了的知晓自己正确的输入是什么。

4. 其他

一些感悟:


1.对设计的计算器还算是比较满意的,因为相比于先选择运算符号再输入数字计算和一些在线计算器模拟按键输入的方法,直接用键盘输入想要计算的算式更加符合直觉。

2.查询资料真的很有用。有一些不知道的东西,只要百度一下很快就能(比自己想来说)得到现成的结论。

3.许多语言在某一些部分都是相通的,由于在大一的时候学过C语言,上学期接触过C++,所以在实现功能的时候有很多值得借鉴吸收的地方。其实在基于C语言的数据结构学习过程中(实验课)进行过大整数计算器的设计,对于这次实验有不少启发。

4.自己对于python的一些语法以及函数细节其实理解还是不够,在以后的python程序设计课上我要更加认真学习一些系统的知识,方便自己在以后的实验课以及将来的python实践运用中能更好的实现功能。

5.参考资料

https://blog.csdn.net/u011222983/article/details/45007599?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.vipsorttest&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.vipsorttest

https://blog.csdn.net/weixin_44431795/article/details/94436620?utm_term=python3%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-3-94436620&spm=3001.4430

原文地址:https://www.cnblogs.com/stx3220665294/p/14752685.html