實驗六
Python程序設計實驗報告(四)
班級 : 物流192 姓名:劉嬌陽 學號3190505213 成績:
日期 : 2020.4.30 指導老師:修宇
【實驗目的】
掌握函數的定義與使用方法;掌握函數的參數傳遞和變量的作用域;掌握函數的嵌套調用和遞歸調用的方法;
【實驗條件】
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
輸入:
題目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函數判斷其是否為閏年,並輸出判斷結果。
注意:復制下面代碼,填寫補充完整,實際參數和形式參數部分也要修改。
輸入格式
輸入一個代表年份的整數
輸出格式
輸出年份是否閏年的判斷結果,請見輸入輸出示例說明
【實驗編寫過程】
第一次輸入錯誤:
錯誤原因:沒有寫正確或者錯誤的結果,少寫一個if函數
正確輸入: