6 強化訓練
阿新 • • 發佈:2018-11-12
6.1 函式應用:學生管理系統
""" {"name": '諸葛亮', "age": 40, "sex": "男"} """ import sys info_list = [{"name": '諸葛亮', "age": 40, "sex": "男"}, {"name": '劉備', "age": 45, "sex": "男"}] # 這個列表用來儲存所有的名片,它裡面每一個元素就是每一個小名片(列表) user_name = "admin" password = "123456" def welcome(): """ 列印介面 """ print("-" * 30) print("--------名片管理器v1.0--------") print("----1、新增名片") print("----2、刪除名片") print("----3、修改名片") print("----4、查詢名片") print("----5、查詢所有名片") print("----6、退出系統") print("-" * 30) def add_info(): """新增名片功能的函式""" name = input("請輸入姓名:") age = input("請輸入年齡:") sex = input("請輸入性別:") dic = {"name": name, "age": age, "sex": sex} info_list.append(dic) # 把name, age, sex整合成一個小列表,追加到大列表info_list中 print("【INFO】:新增成功!") print(info_list) # 自己測試用,看看有沒有新增成功 def del_info(): """刪除名片功能的函式""" name = input("請輸入要刪除這個名片的姓名:") for i in info_list: # i就是每一個小列表 if name in i.values(): # 判斷名字在不在小列表中 # 在,才執行這裡的程式碼,就刪除 # 在大列表中刪除小列表 info_list.remove(i) print("【INFO】:刪除成功!") print(info_list) break # 如果找到第一個成功了,後面不用再找了 else: print("【ERROR】:刪除不成功,查無此人!") def modify_info(): name = input("請輸入要修改這個名片的姓名:") for i in info_list: # i就是每一個小列表 if name in i.values(): # 判斷名字在不在小列表中 # 在,才執行這裡的程式碼,就修改 new_name = input("請輸入新的姓名:") new_age = input("請輸入新的年齡:") new_sex = input("請輸入新的性別:") # 如果在列表中修改資料?通過下標來修改:列表名[下標] = 值 info_list[info_list.index(i)] = {"name": new_name, "age": new_age, "sex": new_sex} print("【INFO】:修改成功!") print(info_list) break # 如果找到第一個成功了,後面不用再找了 else: print("【ERROR】:刪除不成功,查無此人!") def search_info(): name = input("請輸入要查詢的名片的姓名:") for i in info_list: # i就是每一個小列表 if name in i.values(): # 判斷名字在不在小列表中 print("【INFO】:這個人的資訊如下:%s" % i) break # 如果找到第一個成功了,後面不用再找了 else: print("【ERROR】:刪除不成功,查無此人!") def search_all_info(): uname = input("請輸入管理員賬號:") pwd = input("請輸入管理員密碼:") if uname == user_name and pwd == password: # 展示所有資料 # [['諸葛亮', '40', '男'], ['劉備', '45', '男']] print(info_list) # for i in info_list: # # print(i) # for j in i: # print(j, end="\t") # print() else: print("【ERROR】:使用者名稱或者密碼錯誤") def sys_exit(): sign = input("確定要退出系統嗎?(yes or no):") # if sign == "yes" or sign == "y": # if sign in ["yes", "y", "Y", "YES"]: if sign.lower() in ["yes", "y"]: print("【INFO】:成功退出系統!") sys.exit() def main(): while True: # 列印介面 welcome() # 讓使用者輸入數字,表示對應的操作 command = input("請輸入數字1~5表示對應的操作:") # 判斷使用者輸入的這個數字command,根據它來執行對應的功能(程式碼) if command == "1": # 新增名片 就是 往大列表info_list,新增某個人的名片 add_info() elif command == "2": # 刪除名片 # [{"name": '諸葛亮', "age": 40, "sex": "男"}, {"name": '劉備', "age": 45, "sex": "男"}] del_info() elif command == "3": # 修改名片 # modify_info() elif command == "4": # 查詢名片 # [['諸葛亮', '40', '男'], ['劉備', '45', '男']] search_info() elif command == "5": # 查詢所有名片 search_all_info() elif command == "6": # 退出系統 # break sys_exit() else: print("【ERROR】:請務必輸入數字1~5") main() # 入口函式
6.2 遞迴函式
- 一個函式在內部呼叫的是自己本身的話
def fn(num):
"""這個函式是來求num的階乘"""
if num == 1:
return 1
else:
ret = num * fn(num-1)
return ret
print(fn(4))
6.3 匿名函式
用lambda關鍵詞能建立小型匿名函式。這種函式得名於省略了用def宣告函式的標準步驟。
lambda函式的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression stus = [ {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17} ] 按name排序: stus.sort(key = lambda x: x['name']) print(stus) [{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}] 按age排序: stus.sort(key = lambda x: x['age']) print(stus) [{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]
6.4 給程式傳引數
6.5 列表推導式
所謂的列表推導式,就是指的輕量級迴圈建立列表
-
- 基本的方式
-
- 在迴圈的過程中使用if
-
2個for迴圈
-
3個for迴圈
“”"
列表推導式 又叫列表生成式
[返回值 for i in xxx] 返回值 決定了生成的這個列表的每一個元素的最終格式(包括資料型別)[1, 2, 3, 4..., 8, 9, 10] """ # lst = list(range(1, 11)) # print(lst) # ------------------------------------------ # lst = [] # for i in range(1, 11): # lst.append(i) # print(lst) # ------------------------------------------ # lst = list() # 也是在建立空列表 # i = 1 # while i <= 10: # lst.append(i) # i += 1 # print(lst) # ------------------------------------------ # 列表推導式 又叫列表生成式 # [返回值 for i in xxx] 返回值 決定了生成的這個列表的每一個元素的最終格式(包括資料型別) # 掌握: # lst = [i for i in range(1, 11)] # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # lst = [i+2 for i in range(1, 11)] # [3, 4, 5, 6, 7, 8, 9, 10, 11, 12] # lst = [str(i) for i in range(1, 11)] # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] # print(lst) # 瞭解: # lst = [i for i in range(1, 21) if i % 2 == 0] # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] # lst = [(i, j) for i in range(1, 3) for j in range(0, 2)] # [(1, 0), (1, 1), (2, 0), (2, 1)] # print(lst)
6.6 set tuple list
- set是集合型別
- 使用set,可以快速的完成對list中的元素去重複的功能
- set tuple list之間的轉換
"""
集合:
1、無序性, 元素沒有順序之分
2、沒有重複的資料
"""
# set1 = {10, 20, 30, True, "a", 10, 20, 30, 10, 10}
# print(set1, type(set1))
lst = [10, 202, 30, 10, 50, 60, 10] # 去重
print(list(set(lst))) # 我們用集合來去掉重複資料
# tup = (10, 202, 30, 10, 50, 60, 10)
# print(tuple(set(tup)))
6.7 素數
用函式實現求100-200裡面所有的素數
提示:素數的特徵是除了1和其本身能被整除(即餘數為0),其它數都不能被整除的數
"""
def fn():
for i in range(100, 201): # i 是從 100 到200 的數字
# 裡層的這個for迴圈,我們要拿著i去分別除以2, 3, 4, 5 ... i-1 ,所以才相當於遍歷 2到i-1
for j in range(2, i):
if i % j == 0:
# 如果餘數是0,說明不是素數
break # 找到了一個能被整除的數,就已經不用再往後面去除以了,
else:
print("%s是素數" % i)
fn()