一、實驗目的與要求
1、理解函數的概念,掌握Python語言中聲明和調用函數的方法。
2、理解局部變量和全局變量的作用域,學習在調試窗口查看變量的值。
3、學習使用函數的參數和返回值。
4、學習如何使用Python的內置函數。
函數是組織好的,可重復使用的,用來實現單一或相關聯功能的代碼段,它能夠提高應用的模塊性和代碼的重復利用率。Python定義函數使用def關鍵字,格式如下:
def 函數名(參數列表):
函數體
定義了函數之后,想要讓函數中的代碼能夠執行,需要調用函數。通過“函數名()” 即可完成調用。
在定義函數的時候,讓函數接收數據,這就是函數的參數。調用函數時,如果沒有傳遞參數,則會使用默認參數。有時可能需要一個函數能處理比當初聲明時更多的參數,這些參數叫做不定長參數,聲明時不會命名。函數的返回值是使用return語句來完成的。根據函數的參數和返回值,函數可以分為:無參數,無返回值的函數、無參數,有返回值的函數、有參數,無返回值的函數以及有參數,有返回值的函數四種類型。在一個函數中調用了另外一個函數,這就是所謂的函數嵌套調用。
為了避免變量的名稱發生沖突,所以Python引入了命名空間的概念。命名空間指的是名稱到對象的映射,類似於字典,鍵名是變量的名字,值是變量的值。命名空間是相互獨立存在的,而且它們被安排在某個特定的層次,把這些層次結構組合起來就是作用域。所謂局部變量,就是在函數內部定義的變量,局部變量的作用域是函數內部,意味着它只在定義它的函數中有效,一旦函數結束就會消失;定義在函數外的擁有全局作用域。全局變量可以在整個程序范圍內訪問。如果出現全局變量和局部變量名字相同的情況,則在函數中訪問的是局部變量。
一個函數的內部可以調用其他函數。但是,如果一個函數在內部不調用其它的函數,而是自己本身的話,這個函數就是遞歸函數。匿名函數就是沒有名稱的函數,也就是不再使用def語句定義的函數。如果要聲明匿名函數,則需要使用lambda關鍵字,匿名函數的聲明格式如下所示:
lambda [arg1 [,arg2,.....argn]]:expression
有一點需要注意的是:使用Lambda聲明的匿名函數能接收任何數量的參數,但只能返回一個表達式的值。匿名函數不能直接調用print,因為lambda需要一個表達式。
在Python中,通常有如下幾種方式表示時間:
(1)時間戳;
(2)格式化的時間字符串;
(3)時間元組(struct_time)。通常來講,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們可以使用time模塊的strftime方法來格式化日期。返回struct_time的函數主要有gmtime()、localtime()和strptime(),struct_time元組。Calendar模塊有廣泛的方法用來處理年歷和月歷,例如:
calendar.calendar(year,w=2,l=1,c=6);#返回一個多行字符串格式的year年年歷,3個月一行,間隔距離為c。每日寬度間隔為w字符。每行長度為21* W+18+2* C。l是每星期行數。
Python中的random模塊用於生成隨機數,它提供了很多函數。主要有:
(1)random.random():用於生成一個0到1的隨機符點數: 0 <= n < 1.0;
(2)random.uniform(a,b):返回a,b之間的隨機浮點數,范圍[a,b]或[a,b]取決於四舍五入,a不一定要比b小;
(3)random.randint(a,b):返回a,b之間的整數,范圍[a,b],注意:傳入參數必須是整數,a一定要比b小;
(4)random.randrang([start], stop[, step]):返回有個區間內的整數,可以設置step。只能傳入整數,random.randrange(10, 100, 2),結果相當於從[10, 12, 14, 16, … 96, 98]序列中獲取一個隨機數;
(5)random.choice(sequence):從sequence(序列,是有序類型的)中隨機獲取一個元素,列表、元組、字符串都屬於sequence;
(6)random.shuffle(x[,random]):用於將列表中的元素打亂順序,俗稱為洗牌;
(7)random.sample(sequence,k):從指定序列中隨機獲取k個元素作為一個片段返回,sample函數不會修改原有序列。
1、提前預習Python函數的語法知識,實驗之前編寫好程序代碼。
2、練習使用Python函數的常見操作。
四、實驗過程記載
(對實驗的主要過程與步驟進行記載;若有較多的截圖或代碼,可以單獨用附件的形式列出)
實驗題1分析程序運行結果:閱讀下面的程序,分析代碼是否能夠編譯通過。如果能編譯通過,請列出運行的結果,否則請說明編譯失敗的原因。
(1)def func(): x = 200 x = 100 func() print(x)
能編譯通過
實驗題2
定義一個getMax函數,返回三個數(從鍵盤輸入的整數)中的最大值。例如:輸出的內容如下所示:
請輸入第1個整數:10
請輸入第2個整數:15
請輸入第3個整數:20
其中最大值為:20
源碼:
def getMax(): a1 = eval(input("請輸入第1個整數:")) a2 = eval(input("請輸入第2個整數:")) a3 = eval(input("請輸入第3個整數:")) print(max(a1,a2,a3)) getMax()
實驗題3
使用Python語言開發一個簡單的名片管理器程序。請使用Python函數完成各種功能,並且根據鍵盤的輸入來選擇對應的函數完成這些功能。名片管理器的主菜單系統如下圖所示:
名片管理系統 v8.8
1.添加名片
2.刪除名片
3.修改名片
4.查詢名片
5.獲取所有名片信息
6.退出系統
請輸入選擇的序號:
def display_menu(): print("-" * 30) print(" 名片管理系統 v8.8") print("1. 添加名片") print("2. 刪除名片") print("3. 修改名片") print("4. 查詢名片") print("5. 獲取所有名片信息") print("6. 退出系統") print("-" * 30) # 獲取用戶輸入的信息 def get_choice(): selected_key = input("請輸入選擇的序號: ") return int(selected_key) # 添加名片 def add_info(): new_name = input("請輸入姓名:") name_list.append(new_name) # 查看所有名片的信息 def print_all_info(temp_list): print("=" * 30) for info in temp_list: print(info) print("=" * 30) # 刪除名片 def delete(): delete_name = input("請輸入你要刪除的姓名:") if delete_name in name_list: name_list.remove(delete_name) print("刪除成功!") else: print("輸入錯誤,刪除的姓名不存在!") # 修改名片 def update(): update_name = input("請輸入你要修改的姓名:") if update_name in name_list: new_name = input("請輸入修改后的名字:") name_list[name_list.index(update_name)] = new_name else: print("輸入錯誤,修改的姓名不存在!") # 查詢名片 def find(): find_name = input("請輸入你查詢的姓名:") if find_name in name_list: print("查詢的姓名存在!") else: print("查詢的姓名不存在!") i = 0 name_list = [] while i < 1: # 打印菜單 display_menu() # 等待用戶選擇 key = get_choice() if key == 1: add_info() elif key == 2: delete() elif key == 3: update() elif key == 4: find() elif key == 5: print_all_info(name_list) elif key == 6: break else: print("輸入有誤,請重新輸入...")
實驗題4
使用Python語言開發一個簡單的學生管理系統。運用該學生管理系統編輯學生的信息,適時更新學生的資料。例如,新生入校,要在學生管理系統中錄入剛入校的學生信息。請實現一個學生管理系統,要求如下。
(1)使用自定義函數,完成對程序的模塊化;
(2)學生信息至少包含:姓名、性別及手機號;
(3)該系統具有的功能:添加、刪除、修改、顯示、退出系統。
(詳細要求參見教材P130至P134的§6.12中的說明)
(選做)
源碼:
studentInfos = [] #打印菜單 def printMenu(): print("=" * 30) print(" 學生管理系統") print("1.添加學生信息") print("2.刪除學生信息") print("3.修改學生信息") print("4.顯示所有學生信息") print("0.退出系統") print("=" * 30) #添加學生信息 def addStudent(): newName = input("請輸入新的學生名字:") newSex = input("請輸入新的學生性別(男/女):") newPhone = input("請輸入新的學生電話:") newInfo = {} newInfo["name"] = newName newInfo["sex"] = newSex newInfo["phone"] = newPhone studentInfos.append(newInfo) #刪除學生信息 def delStudent(info): delNum = int(input("請輸入要刪除的序號:")) - 1 del info[delNum] #修改學生信息 def modifyStudent(): studentId = int(input("請輸入要修改的序號:")) - 1 newName = input("請輸入新的學生名字:") newSex = input("請輸入新的學生性別(男/女):") newPhone = input("請輸入新的學生電話:") newInfo = {} newInfo["name"] = newName newInfo["sex"] = newSex newInfo[ "phone"] = newPhone studentInfos[studentId] = newInfo #查看所有學生信息 def showStudent(): print("=" * 30) print("學生信息如下") print("=" * 30) print("序號 姓名 性別 手機號") num = 1 for tempInfo in studentInfos: print(" %d %s %s %s"%(num,tempInfo["name"],tempInfo["sex"],tempInfo["phone"])) num += 1 #main函數 def main(): while 1 == 1: printMenu() key = int(input("請輸入操作的序號:")) if key == 1: addStudent() elif key == 2: delStudent(studentInfos) elif key == 3: modifyStudent() elif key == 4: showStudent() elif key == 0: exit = input("真的要退出系統嗎?(Yes or No):") if exit == "Yes": break elif exit == "No": pass else: print("輸入有誤,請重新輸入") else: print("輸入有誤,請重新輸入") main()