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的库函数
python程序设计报告-20191206 实验二《Python程序设计》实验报告相关推荐
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告
20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...
- matlab的程序设计实验报告答案,实验二 MATLAB程序设计(含实验报告).doc
实验二 MATLAB程序设计(含实验报告) 实验二 MATLAB程序设计 实验目的 1.掌握利用if语句实现选择结构的方法. 2.掌握利用switch语句实现多分支选择结构的方法. 3.掌握利用for ...
- java 二叉树实验报告_20172310《程序设计与数据结构》(下)实验二:二叉树实验报告...
20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...
- 2017-2018-1 20155213 20155303 实验二 固件程序设计
2017-2018-1 20155213 20155303 实验二 固件程序设计 任务一:固件程序设计-1-MDK 注意不经老师允许不准烧写自己修改的代码 两人(个别三人)一组 参考云班课资源中&qu ...
- 汇编语言实验二 汇编语言程序设计(顺序、多分支、循环)
**实验二 汇编语言程序设计(顺序.多分支.循环)** 一. 实验目的 1.掌握顺序和循环程序结构和设计方法: 2.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程. 二 ...
- 2018-2019-1 20165223 20165218 实验二 固件程序设计
实验二 固件程序设计 转载于:https://www.cnblogs.com/zicerain/p/9906002.html
- matlab用for编写乘法表,实验二 Matlab程序设计基本方法1
实验二Matlab程序设计基本方法 覃照乘自092 电气工程学院 一.实验目的: 1.熟悉MATLAB 程序编辑与设计环境 2.掌握各种编程语句语法规则及程序设计方法 3.函数文件的编写和设计 4.了 ...
- python语言基础实验_实验二Python语言基础函数包练习.doc
实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...
- 2018-2019-1 20165205 20165233 实验二 固件程序设计
2018-2019-1 20165205 20165233 实验二 固件程序设计 2018-2019-1 20165205 20165233 实验二 固件程序设计 https://www.cnblog ...
最新文章
- MapReduce骚气分析
- 金山网盾监测:游戏玩家下载西西游戏外挂会中大量***
- SAP MM 初阶之事务代码MIGO中采购退货的处理
- when busy dialog closed iDuration renderFioriFlower jQuery Animation closeL
- Java中final、finally和finalize的区别(转)
- JVM运行时内存分区
- 【渝粤教育】国家开放大学2019年春季 2321物流学概论 参考试题
- docker镜像创建
- 最新版WebMax0929版下载【火爆速递】
- 使用Word制作签名电子版
- 庞加莱猜想的证明过程
- 项目延期,不重视过程项目团队将自食其果
- 外边距+内边距+边框详解
- Nvidia Isaac Sim ROS机器人仿真和AMR开发环境
- 10个有关快门的必学知识
- 关于支持电脑登录选项设置
- 神经系统分类和组成图表,神经系统的组成概念图
- 移植ffplay媒体播放器和sdl2到Android平台
- 从零开始构建PHP版mud游戏(一)
- Linux命令汇总 | vim | shell | 进阶【2022版】
热门文章
- 红绿灯问题(位运算)
- IE9,IE10,IE11下当Content-type为application/json时,打开接口会出现下载弹框
- 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
- Kafka深度解析(如何在producer中指定partition)(转)
- 实现一个对象验证库系列 -- 1) 接口介绍以及总体思路概述 (请大神批评)
- liferay和cas系统集成
- (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
- NYOJ 453 小珂的烦恼 模拟
- 第13天:提取方法对象
- .NET常见线程简介