学号 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程序设计》实验报告相关推荐

  1. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  2. 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告

    20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...

  3. matlab的程序设计实验报告答案,实验二 MATLAB程序设计(含实验报告).doc

    实验二 MATLAB程序设计(含实验报告) 实验二 MATLAB程序设计 实验目的 1.掌握利用if语句实现选择结构的方法. 2.掌握利用switch语句实现多分支选择结构的方法. 3.掌握利用for ...

  4. java 二叉树实验报告_20172310《程序设计与数据结构》(下)实验二:二叉树实验报告...

    20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...

  5. 2017-2018-1 20155213 20155303 实验二 固件程序设计

    2017-2018-1 20155213 20155303 实验二 固件程序设计 任务一:固件程序设计-1-MDK 注意不经老师允许不准烧写自己修改的代码 两人(个别三人)一组 参考云班课资源中&qu ...

  6. 汇编语言实验二 汇编语言程序设计(顺序、多分支、循环)

    **实验二 汇编语言程序设计(顺序.多分支.循环)** 一. 实验目的 1.掌握顺序和循环程序结构和设计方法: 2.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程. 二 ...

  7. 2018-2019-1 20165223 20165218 实验二 固件程序设计

    实验二 固件程序设计 转载于:https://www.cnblogs.com/zicerain/p/9906002.html

  8. matlab用for编写乘法表,实验二 Matlab程序设计基本方法1

    实验二Matlab程序设计基本方法 覃照乘自092 电气工程学院 一.实验目的: 1.熟悉MATLAB 程序编辑与设计环境 2.掌握各种编程语句语法规则及程序设计方法 3.函数文件的编写和设计 4.了 ...

  9. python语言基础实验_实验二Python语言基础函数包练习.doc

    实验二Python语言基础函数包练习 实验 Python语言基础函数包练习:1208 学号: 实验目的 1.Python语言包,如math.NumPySciPy和Matplotlib等函数包的使用实验 ...

  10. 2018-2019-1 20165205 20165233 实验二 固件程序设计

    2018-2019-1 20165205 20165233 实验二 固件程序设计 2018-2019-1 20165205 20165233 实验二 固件程序设计 https://www.cnblog ...

最新文章

  1. MapReduce骚气分析
  2. 金山网盾监测:游戏玩家下载西西游戏外挂会中大量***
  3. SAP MM 初阶之事务代码MIGO中采购退货的处理
  4. when busy dialog closed iDuration renderFioriFlower jQuery Animation closeL
  5. Java中final、finally和finalize的区别(转)
  6. JVM运行时内存分区
  7. 【渝粤教育】国家开放大学2019年春季 2321物流学概论 参考试题
  8. docker镜像创建
  9. 最新版WebMax0929版下载【火爆速递】
  10. 使用Word制作签名电子版
  11. 庞加莱猜想的证明过程
  12. 项目延期,不重视过程项目团队将自食其果
  13. 外边距+内边距+边框详解
  14. Nvidia Isaac Sim ROS机器人仿真和AMR开发环境
  15. 10个有关快门的必学知识
  16. 关于支持电脑登录选项设置
  17. 神经系统分类和组成图表,神经系统的组成概念图
  18. 移植ffplay媒体播放器和sdl2到Android平台
  19. 从零开始构建PHP版mud游戏(一)
  20. Linux命令汇总 | vim | shell | 进阶【2022版】

热门文章

  1. 红绿灯问题(位运算)
  2. IE9,IE10,IE11下当Content-type为application/json时,打开接口会出现下载弹框
  3. 虚拟网络编辑器的知识和出现的一些问题(没有VMnet0或VMnet8)
  4. Kafka深度解析(如何在producer中指定partition)(转)
  5. 实现一个对象验证库系列 -- 1) 接口介绍以及总体思路概述 (请大神批评)
  6. liferay和cas系统集成
  7. (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
  8. NYOJ 453 小珂的烦恼 模拟
  9. 第13天:提取方法对象
  10. .NET常见线程简介