Python程序设计实验报告六:函数
安徽工程大学
Python程序设计 实验报告
班级 物流192 姓名 冯非凡 学号 3190505208 成绩
日期 2020.5.4 指导老师 修宇
【实验目的】
掌握函数的定义与使用方法;掌握函数的参数传递和变量的作用域;掌握函数的嵌套调用和递归调用的方法;
【实验条件】
PC机或者远程编程环境
【实验内容】
1、完成三个编程题。
题目一 、计算三维空间某点距离原点的欧式距离
题目描述:
欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义。三维空间里点a和b的坐标如果分别为a(x1,y1,z1)、b(x2,y2,z2),则ab的距离的计算机公式是dist(a,b) = √( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 )????????????????????????????????????????????????????????????????????????????????。????????????????????????????????????????????????????????????????????????????????提示:使用math.sqrt()函数求平方根
要求:将虚线下的代码复制到答题区域、补充完善后再提交。????????????????????????????????????????????????????????????????????????????????
-------------------------------------------------------------------------------------------------------------------------????????????????????????????????????????????????????????????????????????????????
#请在这里定义distance函数,计算点(x,y,z)与原点的距离值并返回????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????x,y,z=input().split(",")????????????????????????????????????????????????????????????????????????????????
d=distance(float(x),float(y),float(z))#调用distance函数????????????????????????????????????????????????????????????????????????????????
print("{:.2f}".format(d))#输出距离值,保留三维小数????????????????????????????????????????????????????????????????????????????????
#代码区结束????????????????????????????????????????????????????????????????????????????????
输入格式:
输入是一个点a的三维坐标,以逗号分割,形如:x,y,z ,其中x,y,z都是非负实数。????????????????????????????????????????????????????????????????????????????????
例如:1.2,1.3,1.4????????????????????????????????????????????????????????????????????????????????
输出格式:
输出点a与原点的距离(保留小数点后两位)????????????????????????????????????????????????????????????????????????????????, 例如:2.08????????????????????????????????????????????????????????????????????????????????
输入输出示例:
输入 输出
示例 1 1.0,1.0,1.0 1.73
拓展:
在数学中,欧几里得距离或欧几里得度量是欧几里得空间中两点间“普通”(即直线)距离。使用这个距离,欧氏空间成为度量空间。相关联的范数称为欧几里得范数。较早的文献称之为毕达哥拉斯度量。在实践中这个函数在数据分析及挖掘中经常会被使用做相似度的计算。
题目2、汉诺塔的求解(可选,自行在本地电脑实现)
描述
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。????????????????????????????????????????????????????????????????????????????????
知乎上有关 汉诺塔的讨论 :https://www.zhihu.com/question/24385418
百度百科:https://baike.baidu.com/item/%E6%B1%89%E8%AF%BA%E5%A1%94/3468295?fr=aladdin
本题要求:????????????????????????????????????????????????????????????????????????????????
1. 使用函数递归的方法实现一个汉诺塔的求解程序;????????????????????????????????????????????????????????????????????????????????
2. 汉诺塔的层数为:3????????????????????????????????????????????????????????????????????????????????
3. 要求将所有的圆盘从最右边的A号柱子全部移动到最左边的C号柱子,且每次只能移动一个圆盘。????????????????????????????????????????????????????????????????????????????????
4. 输出总共移动了多少次。
三根柱子从左至右依次为A、B、C,六颗串珠从小到大依次为1到3
题目3、判断闰年
闰年是公历中的名词。闰年分为普通闰年和世纪闰年。普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年。(如2004年就是闰年);世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年);
闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天(1-12月分别为31天,29天,31天,30天,31天,30天,31天,31天,30天,31天,30天,31天)
关于闰年 : https://baike.baidu.com/item/%E9%97%B0%E5%B9%B4/27098?fr=aladdin
抽象:闰年的判断
1、能被4整除,但不能被100整除;
或
2、能被400整除;
提示
1)怎么实现“能被4整除,但不能被100整除”判断?
对year 求余数,看看余数是否为0;参考:year%4==0 and year%100!=0
2)怎么实现“能被400整除”判断?
还是对year求余数 year%400==0:
3)把二个条件同时考虑
(year%4==0 and year%100!=0) or year%400==0
描述
编写函数leap,根据“四年闰百年不闰,四百年又闰”判断是否闰年。在主程序输入一个年份,调用leap函数判断其是否为闰年,并输出判断结果。注意:复制下面代码,填写补充完整,实际参数和形式参数部分也要修改。????????????????????????????????????????????????????????????????????????????????
输入格式????????????????????????????????????????????????????????????????????????????????
输入一个代表年份的整数????????????????????????????????????????????????????????????????????????????????
输出格式
输出年份是否闰年的判断结果,请见输入输出示例说明
【实验记录与分析】
(1)计算三维空间某点距离原点的欧式距离
输入代码
输出结果
注意:上下x,y,z的参数分别对应。且此函数的计算公式中有用到sqrt,而sqrt必须由math库引出,故第一行要有import math
(2)汉诺塔的求解
输入代码
输出结果
注:汉诺塔可以用多个将大象关进冰箱门的过程来理解,将一个大问题拆分成多个小问题,而后逐一解决
3.判断闰年
输入代码
输出结果
注意:return的缩进问题及代码中的逻辑问题