函數應用:學生管理系統
import time
import os
# 定一個列表,用來存儲所有的學生信息(每個學生是一個字典)
info_list = []
def print_menu():
print("---------------------------")
print(" 學生管理系統 V1.0")
print(" 1:添加學生")
print(" 2:刪除學生")
print(" 3:修改學生")
print(" 4:查詢學生")
print(" 5:顯示所有學生")
print(" 6:退出系統")
print("---------------------------")
def add_new_info():
"""添加學生信息"""
global info_list
new_name = input("請輸入姓名:")
new_tel = input("請輸入手機號:")
new_qq = input("請輸入QQ:")
for temp_info in info_list:
if temp_info['name'] == new_name:
print("此用戶名已經被佔用,請重新輸入")
return # 如果一個函數只有return就相當於讓函數結束,沒有返回值
# 定義一個字典,用來存儲用戶的學生信息(這是一個字典)
info = {}
# 向字典中添加數據
info["name"] = new_name
info["tel"] = new_tel
info["qq"] = new_qq
# 向列表中添加這個字典
info_list.append(info)
def del_info():
"""刪除學生信息"""
global info_list
del_num = int(input("請輸入要刪除的序號:"))
if 0 <= del_num < len(info_list):
del_flag = input("你確定要刪除麼?yes or no")
if del_flag == "yes":
del info_list[del_num]
else:
print("輸入序號有誤,請重新輸入")
def modify_info():
"""修改學生信息"""
global info_list
modify_num = int(input("請輸入要修改的序號:"))
if 0 <= modify_num < len(info_list):
print("你要修改的信息是:")
print("name:%s, tel:%s, QQ:%s" % (info_list[modify_num]['name'],
info_list[modify_num]['tel'],info_list[modify_num]['qq']))
info_list[modify_num]['name'] = input("請輸入新的姓名:")
info_list[modify_num]['tel'] = input("請輸入新的手機號:")
info_list[modify_num]['qq'] = input("請輸入新QQ:")
else:
print("輸入序號有誤,請重新輸入")
def search_info():
"""查詢學生信息"""
search_name = input("請輸入要查詢的學生姓名:")
for temp_info in info_list:
if temp_info['name'] == search_name:
print("查詢到的信息如下:")
print("name:%s, tel:%s, QQ:%s" % (temp_info['name'],
temp_info['tel'], temp_info['qq']))
break
else:
print("沒有您要找的信息....")
def print_all_info():
"""遍歷學生信息"""
print("序號\t姓名\t\t手機號\t\tQQ")
i = 0
for temp in info_list:
# temp是一個字典
print("%d\t%s\t\t%s\t\t%s" % (i, temp['name'], temp['tel'], temp['qq']))
i += 1
def main():
"""用來控制整個流程"""
while True:
# 1. 打印功能
print_menu()
# 2. 獲取用戶的選擇
num = input("請輸入要進行的操作(數字)")
# 3. 根據用戶選擇,做相應的事情
if num == "1":
# 添加學生
add_new_info()
elif num == "2":
# 刪除學生
del_info()
elif num == "3":
# 修改學生
modify_info()
elif num == "4":
# 查詢學生
search_info()
elif num == "5":
# 遍歷所有的信息
print_all_info()
elif num == "6":
# 退出系統
exit_flag = input("親,你確定要退出麼?~~~~(>_<)~~~~(yes or no) ")
if exit_flag == "yes":
break
else:
print("輸入有誤,請重新輸入......")
input("\n\n\n按回車鍵繼續....")
os.system("clear") # 調用Linux命令clear完成清屏
# 程序的開始
main()
遞歸函數
<1>什麼是遞歸函數
通過前面的學習知道一個函數可以調用其他函數。
如果一個函數在內部不調用其它的函數,而是自己本身的話,這個函數就是遞歸函數。
<2>遞歸函數的作用
舉個例子,我們來計算階乘 n! = 1 * 2 * 3 * ... * n
解決辦法1:
看階乘的規律
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!
解決辦法2:
原理
匿名函數
用lambda關鍵詞能創建小型匿名函數。這種函數得名於省略了用def聲明函數的標準步驟。
lambda函數的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
如下實例:
sum = lambda arg1, arg2: arg1 + arg2
# 調用sum函數
print("Value of total : " % sum( 10, 20 ))
print("Value of total : "% sum( 20, 20 ))
以上實例輸出結果:
Value of total : 30
Value of total : 40
Lambda函數能接收任何數量的參數但只能返回一個表達式的值
匿名函數不能直接調用print,因爲lambda需要一個表達式
應用場合
函數作爲參數傳遞
- 自己定義函數
>>> def fun(a, b, opt): ... print("a = " % a) ... print("b = " % b) ... print("result =" % opt(a, b)) ... >>> fun(1, 2, lambda x,y:x+y) a = 1 b = 2 result = 3
- 作爲內置函數的參數
想一想,下面的數據如何指定按age或name排序?
stus = [
{"name": "zhangsan", "age": 18},
{"name": "lisi", "age": 19},
{"name": "wangwu", "age": 17}
]
按name排序:
>>> stus.sort(key = lambda x: x['name'])
>>> stus
[{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]
按age排序:
>>> stus.sort(key = lambda x: x['age'])
>>> stus
[{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]
給程序傳參數
import sys
print(sys.argv)
運行結果:
列表推導式
所謂的列表推導式,就是指的輕量級循環創建列表
1. 基本的方式
2. 在循環的過程中使用if
3. 2個for循環
4. 3個for循環
練習
請寫出一段 Python 代碼實現分組一個 list 裏面的元素,比如 [1,2,3,...100]變成 [[1,2,3],[4,5,6]....]
參考答案:
a = [x for x in range(1,101)]
b = [a[x:x+3] for x in range(0,len(a),3)]