安徽工程大學
Python程序設計 實驗報告
班級 物流192班 姓名 呂晨 學號 3190505209 成績
日期 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
拓展:
在數學中,歐幾里得距離或歐幾里得度量是歐幾里得空間中兩點間“普通”(即直線)距離。使用這個距離,歐氏空間成為度量空間。相關聯的范數稱為歐幾里得范數。較早的文獻稱之為畢達哥拉斯度量。在實踐中這個函數在數據分析及挖掘中經常會被使用做相似度的計算。
題目二、漢諾塔的求解(可選,自行在本地電腦實現)
描述
漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞着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
題目三、判斷閏年
閏年是公歷中的名詞。閏年分為普通閏年和世紀閏年。普通閏年:公歷年份是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函數判斷其是否為閏年,並輸出判斷結果。
注意:復制下面代碼,填寫補充完整,實際參數和形式參數部分也要修改。
輸入格式
輸入一個代表年份的整數
輸出格式
輸出年份是否閏年的判斷結果,請見輸入輸出示例說明
【實驗過程】
實驗過程與記錄
題目一 、計算三維空間某點距離原點的歐式距離
代碼如下:
用IDLE運行程序如下:
dist等式還可以用以下兩種方式表達:
(1)
(2)
在實驗過程中出現的錯誤:
(1)
錯誤分析:未引入math庫,沒有定義math函數導致錯誤,應該在第一行加上import math。
(2)
錯誤分析:return已經輸入開平方后的結果,dist等式還乘二分之一導致錯誤。
題目二、漢諾塔的求解
代碼如下:
用Visual Studio Code運行程序:
用IDLE運行程序:
當盤子數量為3時:
當盤子數量為8時:
本來沒有什么思路,通過老師的指導上網查找了一些資料才有些思路,后來經過老師的講解才真正明白。
經老師提醒發現有時在Visual Studio Code里輸入代碼運行程序更加方便,以后也會試着用在這里編寫代碼。
在實驗過程中出現的錯誤:
錯誤分析:在輸入代碼時出現縮進的錯誤,未將else與if對齊導致出現無效語法。
題目三、判斷閏年
在實驗過程中出現的錯誤:
錯誤分析:將if (y%4==0 and y%100!=0) or y%400==0:錯寫為if (y%4==0 and y%100!=0) and y%400==0:導致輸入2000時,得到的結果是2000不是閏年。