实验六
Python程序设计 实验报告
班级:物流191 姓名:彭艺 学号:31905051395
成绩: 日期:2020年5月5日 指导老师:修宇
【实验目的】
掌握函数的定义与使用方法;掌握函数的参数传递和变量的作用域;掌握函数的嵌套调用和递归调用的方法;
【实验条件】
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
输入输出示例:

实验记录与分析:
根据题目要求,我们需要定义一个函数distance用于调用,而distance函数需要计算所给定的坐标与坐标原点之间的距离,我们知道公式dist(a,b,c) = √( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 )。用户输入(a,b,c),可以计算得到d,开根号我们需要引用math.sqrt函数,所以在前面需要用到import.math引入math库,然后计算求和d=math.sqrt(x**2,y**2,z**2)
代码如下:

过程中在检验函数的准确性时,输入并没有按照1.0,1.0,1.0格式而是输入(1.0,1.0,1.0)造成运行错误

题目二:判断闰年
闰年是公历中的名词。闰年分为普通闰年和世纪闰年。普通闰年:公历年份是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函数判断其是否为闰年,并输出判断结果。
注意:复制下面代码,填写补充完整,实际参数和形式参数部分也要修改。

输入格式:
输入一个代表年份的整数
输出格式:
输出年份是否闰年的判断结果,请见输入输出示例说明

实验记录与分析:
由题意我们需要定义一个函数来判断输入值是否可以整除400或者整除4但不整除100,得到true则输出为闰年,否则则不是闰年,由提示year%4==0 and year%100!=0 表示可以整除4并且不会整除100,year%400==0表示可以整除四百,当满足两者之一时既可以执行,故得到
def leap(y):
if (year%4==0 and year%100!=0) or year%400==0:
return true
将此部分填入之前的函数代码如下:

部分错误,在输入时没有了解到python中代码一次性的问题,直接输入数字导致没有得到结果
题目三:汉诺塔的求解(可选,自行在本地电脑实现)
题目描述:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着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. 输出总共移动了多少次。
实验记录与分析:


浙公网安备 33010602011771号