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

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

课程:《Python程序设计》

班级: 1912

姓名: 陈发强

学号: 20191206

实验教师:王志强

实验日期:2020年4月19日

必修/选修: 公选课

1.实验内容

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

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

2. 实验过程及结果

pre = '''

加减乘除 取模 整除 运算符 小括号 分别为 + - * / % // ()

例如 (2+2-1)*5 % 4 --> 3 ; 10//7 --> 1

取绝对值 abs() 例如 abs(-2) --> 2

平方 sqr() 例如 sqr(2) -> 4

三次方 cube() 例如 cube(2) -> 8

n次方 pow(底数,指数) 例如 pow(2,4)-> 16

开方 sroot() 例如 sroot(4) -> 2

三次根号 croot() 例如 croot(8) ->2

n次根号 nroot(底数,次数)例如 nroot(8,3) ->2

log log(真数,底数) 例如 log(4,2) -> 2

ln ln(真数) 例如 ln(2.72) -> 1.0006

阶乘 fac() 例如 fac(5) -> 120

十进制转二进制 bi() 例如 bi(10) -> 1010

十进制转八进制 oc() 例如 oc(10) -> 12

十进制转十六进制 he() 例如 he(10) -> A

二进制转十进制 abbi() 例如 abbi(10100) -> 20

八进制转十进制 aboc() 例如 aboc(1010) -> 520

十六进制转10进制 abhe(" ") 例如 abhe("AB") 或者 abhe("ab") -> 171

圆周率 = pi 例如 pi * 2 ->6.28...

自然对数 = e 例如 e * 2 -> 5.42...

'''

import math

instruction = '使用手册'

print("{:*^40} {}".format(instruction,pre))

pi = math.pi

e = math.e

def sqr(a):

result = a * a

return result

def cube(a):

result = a * a * a

return result

def sroot(a):

result = pow(a,0.5)

return result

def croot(a):

result = pow(a,1/3)

return result

def nroot(a,n):

result = pow(a,1/n)

return result

def log(a,n):

result = math.log(a,n)

return result

def ln(a):

result = math.log(a)

return result

def fac(a):

result = 1

for i in range(1,a+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 True:

scanf = input("请输入算式 按回车键退出程序 ")

if scanf == '':

break

else:

try:

result = eval(scanf)

print(" 计算结果为{} ".format(result))

except:

print("格式错误! ")

实验结果还是很满意的,做到了 电脑自带科学计算机的所有功能,像 加减乘除,取模、整除,对数、指数、幂函数,阶乘,绝对值,以及自带常见的无理数,圆周率 pi 和自然对数 e ,

还完成了十进制转 二进制,八进制,十六进制 ,此外还完成了 我电脑上没有的 二进制,八进制,十六进制转十进制

而且界面更加友好,键盘输入比鼠标点计算器的各种按钮 方便快捷的多

这回程序的异常处理也加上了,就算用户错误的输入了一些非法的东西,程序也不会出现异常,还能继续运行,等待下一次输入

程序还可以反复输入算式,而不是每算一次算式,都要重启一次程序

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

问题1:如何做到,一直计算,算完一个题不用重启程序就能继续算下一道题,直到“按回车键才退出程序”

问题1解决方案:首先思考按回车键退出程序,按回车键对于计算机是什么意义。经过思考并查证后发现,回车键退出程序就是当input接收到空字符串的时候退出程序。因此需要使用判断语句,像

a = input("请输入")

if a == '':

exit(0)

这样就能做到回车退出程序了

问题2:如何使异常处理能够循环执行,即如果进入了except 还想返回继续执行 try

问题2解决方案:首先思考了一下,进入了except 后,怎么回到 try ,后来发现这是我做不到的,进入except后,后面只能再进入 else 语句 或者 finally 语句 ,如果finally 里面填和 try 语句中 相同的代码,那么如果try 语句再出错,就不得不再进入except 语句,而我们还想继续执行try语句,就不得不再加第二层finally 语句 ,所以就没完没了。

后来发现应该换个思考角度,不应该钻进except 后面再进入 try 的死胡同,而应该表述成,我要循环执行try 语句,如果 用户输入后,程序出错,则进入except,如果不出错,输出结果后,再进入循环即可。

因此,再异常处理外面,整体加上一个 无限循环语句即可,

想回车退出程序时,break 即可

while True:

try:

a = input("请输入")

if a == '':

break

else:

print("result")

except:

print("输入格式有误")

问题3:十六进制转二进制的时候,由于函数输入的带字母,而字母又是未定义的变量,导致程序出错。如果要用户输入字符串,又不能直接通过索引的方式直接对字符串中的字母进行重新赋值。

问题3解决方案:问题的症结在于,函数接受参数的时候,参数中有未定义的变量,然后我就想,如果在函数内部先把变量定义好了行不行,不如 a = 10,

b = 11, c = 12... 经调试发现不行,因为如果字母连在一起,就又是一个未定义的新的变量 像 abc 就是未定义的。

所以只好把用户的输入切分成单个的字符,所以用户的输入也只好是字符串了,

本来想偷懒用str.split() 方法直接返回一个列表,但可惜,不会自动切分没有分隔符(像空格 逗号 句号 ...)的字符串

所以只好新建一个列表,用字符串索引,将每个字符进行相应的操作后,填入列表的对应位置,

然后再对列表进行操作

其他(感悟、思考等)

很多问题最开始不会解决,不一定是自己的知识不够,能力不够,而是没有经过反复的思考,没有活学活用已掌握的知识和技能,或者说,理解的还不够到位。

问题虽然还是那个问题,但如果通过反复的琢磨,就能将问题理解的更加透彻,尤其是能进行更细致的模块化,将问题进行分解,进而像搭积木一样,一点点的解决问题。

其实大多数的问题都能通过循环语句和条件语句解决掉,自己对循环语句和条件语句的理解还不够到位,应用还不够灵活。

参考资料

无参考资料,纯原创,用IDLE查了点python的库函数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
重庆邮电大学【实验python程序设计实验8- python科学计算和数据可视化是计算机科学与技术专业的一门实验课程,旨在让学生掌握使用python进行科学计算和数据可视化的基本方法和技巧。 在本实验中,学生将学习使用python中的一些科学计算库,如NumPy、SciPy和Pandas来处理和分析数据。通过学习这些库的使用,学生将能够实现一些常见的科学计算任务,例如数据的统计分析、插值和拟合、优化和数值积分等。 此外,学生还将学习使用Matplotlib和Seaborn等库进行数据可视化。通过这些库,学生可以将数据以图形的形式呈现出来,从而更直观地理解数据的内在规律和趋势。学生将学习如何绘制各种类型的图形,如折线图、柱状图、散点图、饼图等,并学会如何对图形进行修改和美化,使其更具艺术性和信息传达效果。 在实验过程中,学生将通过一系列的练习和实例来巩固所学的知识和技能。通过实际操作,学生将进一步理解和掌握python程序设计中的一些概念和技巧,并通过完成实验报告来展示自己的工作成果。这样的实践过程旨在帮助学生熟悉和掌握科学计算与数据可视化在实际工作中的应用,培养他们的问题解决能力和实践能力。 通过本实验,学生将进一步提高自己在python程序设计方面的能力,拓宽对科学计算和数据可视化的理解,为将来的研究和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值