第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Python 函數(shù)實(shí)戰(zhàn)

模塊化程序設(shè)計(jì)是指在進(jìn)行程序設(shè)計(jì)時(shí)將一個(gè)大程序按照功能劃分為若干小程序模塊,每個(gè)小程序模塊完成一個(gè)確定的功能,并在這些模塊之間建立必要的聯(lián)系,通過模塊的互相協(xié)作完成整個(gè)功能的程序設(shè)計(jì)方法。

在設(shè)計(jì)較復(fù)雜的程序時(shí),一般采用自頂向下的方法,將問題劃分為幾個(gè)部分,各個(gè)部分再進(jìn)行細(xì)化,直到分解為較好解決問題為止。

采用模塊化設(shè)計(jì)編寫程序時(shí),不是一開始就逐條編寫程序代碼,而是首先用主程序、子程序等框架把軟件的主要結(jié)構(gòu)和流程描述出來。以功能塊為單位進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)其求解算法的方法稱為模塊化。

利用函數(shù),不僅可以實(shí)現(xiàn)程序的模塊化,使得程序設(shè)計(jì)更加簡(jiǎn)單和直觀,從而提高了程序的易讀性和可維護(hù)性,而且還可以把程序中經(jīng)常用到的一些計(jì)算或操作編寫成通用函數(shù),以供隨時(shí)調(diào)用。

本小節(jié)實(shí)現(xiàn)一個(gè)通訊錄管理程序。在前面章節(jié)中,程序的各項(xiàng)功能代碼全部集中在一個(gè)代碼段中,程序的結(jié)構(gòu)不清晰。本小節(jié)使用函數(shù)來實(shí)現(xiàn)程序,采用模塊化的程序設(shè)計(jì)方法

  • 劃分通訊錄程序的功能模塊,使用函數(shù)實(shí)現(xiàn)相應(yīng)的功能
  • 首先實(shí)現(xiàn)整體框架,然后再細(xì)化每個(gè)功能細(xì)節(jié)
  • 最終的程序由多個(gè)函數(shù)構(gòu)成,每個(gè)函數(shù)實(shí)現(xiàn)一個(gè)單一的功能,整個(gè)程序的結(jié)構(gòu)清晰

1. 通訊錄功能簡(jiǎn)介

編寫程序 addr-manage.py 實(shí)現(xiàn)通訊錄管理系統(tǒng),通訊錄包含若干聯(lián)系人,每個(gè)聯(lián)系人包括:姓名、地址、電話 3 項(xiàng)內(nèi)容。程序提供 4 項(xiàng)基本功能:

  • 增加聯(lián)系人: 用戶輸入姓名、地址、電話等信息,將信息保存在一個(gè)列表中
  • 列出聯(lián)系人: 打印輸出所有聯(lián)系人的信息
  • 查詢聯(lián)系人: 用戶輸入聯(lián)系人姓名,打印輸出該聯(lián)系人的信息
  • 刪除聯(lián)系人: 用戶輸入聯(lián)系人姓名,從通訊錄中刪除該聯(lián)系人

通過命令行界面實(shí)現(xiàn)以上功能,程序 addr-manage.py 運(yùn)行時(shí)首先打印一個(gè)菜單,如下所示:

C:\> python addr-manage.py
1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 

總共有 5 個(gè)選項(xiàng),用戶輸入對(duì)應(yīng)的數(shù)字選擇相應(yīng)的功能,如下表所示:

數(shù)字選項(xiàng) 功能描述
1. create person 增加聯(lián)系人
2. list all persons 列出聯(lián)系人
3. query person 查詢聯(lián)系人
4. delete person 刪除聯(lián)系人
5. quit 退出通訊錄程序

2. 程序框架

2.1 數(shù)據(jù)結(jié)構(gòu)

程序使用字典描述一個(gè)聯(lián)系人,假設(shè)某個(gè)聯(lián)系人的信息如下:

姓名 地址 電話
張三 南京 12306

使用字典描述該聯(lián)系人如下:

>>> person = {'name': '張三', 'address': '南京', 'phone': '12306'}
  • 字典有三個(gè)鍵:name、address、phone
  • 對(duì)應(yīng)的值分別為:張三、南京、12306

程序?qū)⑺新?lián)系人信息存儲(chǔ)在列表中,即通訊錄是一個(gè)列表、列表的元素是字典。假設(shè)通訊錄中有兩個(gè)人,它們的信息如下所示:

姓名 地址 電話
張三 南京 12306
李四 王五 10086

使用列表描述通訊錄如下:

>>> zhangSan = {'name': '張三', 'address': '南京', 'phone': '12306'}
>>> liSi = {'name': '李四', 'address': '北京', 'phone': '10086'}
>>> persons = [zhangSan, liSi]
  • 在第 1 行,變量 zhangSan 的類型是一個(gè)字典,描述了張三的信息
  • 在第 2 行,變量 liSi 的類型是一個(gè)字典,描述了李四的信息
  • 在第 3 行,persons 是一個(gè)列表,存儲(chǔ)了 zhangSan 和 liSi 兩個(gè)聯(lián)系人

上面的代碼為了易于理解,使用了 3 行代碼描述了通訊錄。也可以使用 1 行代碼描述該通訊錄,代碼如下:

>>> persons = [{'name': '張三', 'address': '南京', 'phone': '12306'}, {'name': '李四', 'address': '北京', 'phone': '10086'}]

2.2 劃分功能模塊

分析通訊錄的功能需求,初步將程序劃分為 5 個(gè)功能模塊,如下表所示:

功能模塊 對(duì)應(yīng)的函數(shù)
增加聯(lián)系人 create_person
列出聯(lián)系人 list_person
查詢聯(lián)系人 query_person
刪除聯(lián)系人 delete_person
主控模塊 main

編寫對(duì)應(yīng)的函數(shù),這里先寫出函數(shù)的定義,暫時(shí)忽略實(shí)現(xiàn),代碼如下:

persons = []

def create_person():
    pass

def list_person():
    pass

def query_person():
    pass

def delete_person():
    pass

def main():
    pass

main()    
  • 在第 1 行,定義全局變量 persons,persons 是一個(gè)列表,保存了所有聯(lián)系人的信息
  • 在第 3 行,定義函數(shù) create_person,該函數(shù)實(shí)現(xiàn) “增加聯(lián)系人” 的功能
  • 在第 6 行,定義函數(shù) list_person,該函數(shù)實(shí)現(xiàn) “列出聯(lián)系人” 的功能
  • 在第 9 行,定義函數(shù) query_person,該函數(shù)實(shí)現(xiàn) “查詢聯(lián)系人” 的功能
  • 在第 12 行,定義函數(shù) delete_person,該函數(shù)實(shí)現(xiàn) “刪除聯(lián)系人” 的功能
  • 在第 15 行,定義函數(shù) main,該函數(shù)控制程序的流程,被稱為主控函數(shù),他讀取用戶的選擇,調(diào)用相應(yīng)的功能,實(shí)現(xiàn)對(duì)通訊錄的增、刪、查的操作
  • 在第 18 行,程序啟動(dòng)后,首先執(zhí)行主函數(shù) main

2.3 主功能模塊

本節(jié)完成程序的主功能模塊 main,函數(shù) main 的功能邏輯如下:

  1. 獲取用戶輸入的選擇
  2. 根據(jù)用戶的選擇執(zhí)行對(duì)應(yīng)的功能
  3. 重復(fù)執(zhí)行第 1 步的操作

函數(shù) main 的實(shí)現(xiàn)代碼如下:

persons = []

def get_choice():
    pass

def main():
    while True:
        choice = get_choice()

        if choice == '1':
            create_person()
        elif choice == '2':
            list_person()
        elif choice == '3':
            query_person()
        elif choice == '4':
            delete_person()
        elif choice == '5':
            break
        else:
            print('Invalid choice')  

main()                  
  • 在第 1 行,創(chuàng)建一個(gè)空列表 persons,persons 記錄所有聯(lián)系人的信息
  • 在第 3 行,定義了函數(shù) get_choice,該函數(shù)打印功能菜單并讀取用戶的選擇
  • 在第 6 行,定義了函數(shù) main,該函數(shù)讀取用戶選擇,并執(zhí)行相應(yīng)功能
  • 在第 7 行,創(chuàng)建一個(gè) while 死循環(huán)
    • 在第 8 行,使用 get_choice() 函數(shù)獲取用戶輸入的選擇
    • 在第 10 行至第 21 行,根據(jù) choice 選擇執(zhí)行相應(yīng)的功能
    • 在第 19 行,如果 choice == ‘5’,則執(zhí)行 break 退出程序

2.4 獲取用戶輸入

編寫函數(shù) get_choice 獲取用戶的選擇,代碼如下:

def get_choice():
    print('1. create person')
    print('2. list all persons')
    print('3. query person')
    print('4. delete person')
    print('5. quit')
    choice = input('Enter a number(1-5):')  
    return choice
  • 在第 2 行到第 6 行,打印功能菜單
  • 在第 7 行,使用 input() 函數(shù)獲取用戶輸入的選擇
  • 在第 8 行,返回用戶的選擇 choice

3. 增加聯(lián)系人

本小節(jié)實(shí)現(xiàn)增加聯(lián)系人的功能,如下所示:

def create_person():
    name = input('name: ')
    address = input('address: ')
    phone = input('phone: ')
    person = {'name': name,  'address': address, 'phone': phone}
    persons.append(person)
  • 在第 1 行,定義函數(shù) create_person,該函數(shù)實(shí)現(xiàn)增加聯(lián)系人的功能
  • 在第 2 行,獲取用戶輸入的 name
  • 在第 3 行,獲取用戶輸入的 address
  • 在第 4 行,獲取用戶輸入的 phone
  • 在第 5 行,根據(jù)用戶輸入的 name、address、phone 創(chuàng)建一個(gè)字典,用于描述該聯(lián)系人
  • 在第 6 行,將聯(lián)系人加入到 persons 中

4. 列出聯(lián)系人

本小節(jié)實(shí)現(xiàn)列出所有聯(lián)系人的功能,如下所示:

def list_person():
    for person in persons:
        print('%s,%s,%s' % (person['name'], person['address'], person['phone']))
  • 在第 1 行,定義函數(shù) list_person,實(shí)現(xiàn)列出所有聯(lián)系人的功能
  • 在第 2 行,遍歷列表 persons,循環(huán)變量 person 是一個(gè)字典
  • 在第 3 行,打印變量 person 的內(nèi)容

對(duì)每個(gè)聯(lián)系人打印輸出一行,假設(shè)通訊錄中已經(jīng)存儲(chǔ)了張三和李四兩個(gè)聯(lián)系人,輸出如下:

C:\> python addr-manage.py
1. create person
2. list all persons
3. query person
4. delete person
5. quit
Enter a number(1-5): 2
張三,南京,12306
李四,北京,10086
  • 在第 7 行,用戶選擇執(zhí)行功能 2
  • 在第 8 行,打印聯(lián)系人張三的信息
  • 在第 9 行,打印聯(lián)系人李四的信息

5. 查詢聯(lián)系人

本小節(jié)實(shí)現(xiàn)查詢聯(lián)系人的功能,如下所示:

def query_person():
    name = input('name: ')
    for person in persons:
        if person['name'] == name:
            print('%s,%s,%s' % (person['name'], person['address'], person['phone']))
  • 在第 1 行,定義函數(shù) query_person,實(shí)現(xiàn)查詢聯(lián)系人的功能
  • 在第 2 行,獲取用戶輸入的 name
  • 在第 3 行,遍歷列表 persons,循環(huán)變量 person 是一個(gè)字典
  • 在第 4 行,如果用戶輸入的 name 和循環(huán)訪問 person 的 name 相同,則表示找到指定的 person
  • 在第 5 行,打印變量 person 的內(nèi)容

6. 刪除聯(lián)系人

本小節(jié)實(shí)現(xiàn)刪除聯(lián)系人的功能,如下所示:

def delete_person():
    name = input('name: ')
    for person in persons:
        if person['name'] == name:
            persons.remove(person)
            break
  • 在第 1 行,定義函數(shù) delete_person,實(shí)現(xiàn)刪除聯(lián)系人的功能
  • 在第 2 行,獲取用戶輸入的 name
  • 在第 3 行,遍歷列表 persons,循環(huán)變量 person 是一個(gè)字典
  • 在第 4 行,如果用戶輸入的 name 和循環(huán)訪問 person 的 name 相同,則表示找到指定的 person
  • 在第 5 行,使用方法 persons.remove(person), 從 persons 中刪除元素 person
  • 在第 6 行,退出 for 循環(huán)

7. 完整的程序

persons = []

def create_person():
    name = input('name: ')
    address = input('address: ')
    phone = input('phone: ')
    person = {'name': name,  'address': address, 'phone': phone}
    persons.append(person)

def list_person():
    for person in persons:
        print('%s,%s,%s' % (person['name'], person['address'], person['phone']))

def query_person():
    name = input('name: ')
    for person in persons:
        if person['name'] == name:
            print('%s,%s,%s' % (person['name'], person['address'], person['phone']))

def delete_person():
    name = input('name: ')
    for person in persons:
        if person['name'] == name:
            persons.remove(person)
            break                    

def get_choice():
    print('1. create person')
    print('2. list all persons')
    print('3. query person')
    print('4. delete person')
    print('5. quit')
    choice = input('Enter a number(1-5):')  
    return choice

def main():
    while True:
        choice = get_choice()

        if choice == '1':
            create_person()
        elif choice == '2':
            list_person()
        elif choice == '3':
            query_person()
        elif choice == '4':
            delete_person()
        elif choice == '5':
            break
        else:
            print('Invalid choice')  

main()       

8. 小結(jié)

這節(jié)課我們通過使用函數(shù)的方式來改寫了我們之前所設(shè)計(jì)的通訊錄功能,可以把這一小節(jié)的代碼和之的代碼做一下比對(duì),看一下函數(shù)式編程與普通編程范式有何不同。