安徽工程大學
Python程序設計實驗報告
班級:物流192 姓名:李心悅 學號:3190505218 成績:
日期: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
輸入輸出示例:
輸入 輸出
示例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. 輸出總共移動了多少次。
題目三、判斷閏年
閏年是公歷中的名詞。閏年分為普通閏年和世紀閏年。普通閏年:公歷年份是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)因為是求到原點的距離,所以只需寫x2,若要求其它兩點之間的距離,則需要根據情況改變式子;
(2)“根號”下用sqrt函數,但在使用sqrt函數之前,要先import math
題目二 漢諾塔的求解
注:可以將此題理解成“把大象裝進冰箱需要幾步”,將一個大問題化為一個個小的子問題。(另在學習通 實驗六.函數 一節中,有詳細的分析。)
題目三 判斷閏年
注:(1)注意and和or使用的區別,其中“四年閏百年不閏”轉換成代碼時用and連接,即y%4==0和y%100!=0需要同時滿足;
(2)注意if和else的對齊方式;
(3)%d表示將替換到此處的變量是一個整數。