1. 程式人生 > >6 強化訓練

6 強化訓練

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 列表推導式

所謂的列表推導式,就是指的輕量級迴圈建立列表

    1. 基本的方式
    1. 在迴圈的過程中使用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()