1. 程式人生 > >python中的列表、元組、字典、字串、切片(設計一個名片管理系統)

python中的列表、元組、字典、字串、切片(設計一個名片管理系統)

列表(List)

序列是Python中最基本的資料結構。序列中的每個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。
Python有6個序列的內建型別,但最常見的是列表和元組。
序列都可以進行的操作包括索引,切片,加,乘,檢查成員。
此外,Python已經內建確定序列的長度以及確定最大和最小的元素的方法。
列表是最常用的Python資料型別,它可以作為一個方括號內的逗號分隔值出現。
列表的資料項不需要具有相同的型別
建立一個列表,只要把逗號分隔的不同的資料項使用方括號括起來即可。如下所示:
這裡寫圖片描述
對列表中的元素進行排序
這裡寫圖片描述
這裡寫圖片描述
倒著列印列表元素
這裡寫圖片描述

元組

Python的元組與列表類似,不同之處在於元組的元素不能修改。
元組使用小括號,列表使用方括號。
元組是不可變資料型別,不能修改元素,列表是可變資料型別,可以修改元素
元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。
這裡寫圖片描述

這裡寫圖片描述

字典

字典是另一種可變容器模型,且可儲存任意型別物件。

字典的每個鍵值key=>value 對用冒號:分割,每個鍵值對之間用逗號,分割,整個字典包括在花括號{}
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

字串

字串是 Python 中最常用的資料型別。我們可以使用引號(‘或”)來建立字串。
建立字串很簡單,只要為變數分配一個值即可。例如:
這裡寫圖片描述


這裡寫圖片描述
這裡寫圖片描述

切片

切片

應用

設計一個名片管理系統
其功能及介面如下圖所示
這裡寫圖片描述
程式碼如下:
主程式:

import cards_tools
#無限迴圈,由使用者主動決定什麼時候退出
while True:
#TODO註釋,用於標記需要去做的工作

cards_tools.show_menu()

action_str = raw_input("請選擇希望執行的操作: ")
print("你選擇的操作是 %s" % action_str)
#1,2,3針對名片的操作
if action_str in ["1","2","3"]:
    if action_str == "1":
        cards_tools.new_card()
    elif action_str == "2":
        cards_tools.show_all()
    elif action_str == "3":
        cards_tools.search_card()

#0退出系統
elif action_str == "0":
    print("歡迎再次使用【名片管理系統】:")

    break
    #如果在開發程式時,不希望立刻編寫分支內部的程式碼
    #可以使用pass關鍵字,表示一個佔位符,能夠保證程式的程式碼結構正確
    #執行程式時,pass關鍵字不會執行任何操作
else:
    print("輸入錯誤,請重新輸入:")

功能程式:

card_list = []
def show_menu():
"""顯示選單"""
print '*' * 50
print '歡迎使用【名片管理系統】'
print ''
print '1.新增名片'
print '2.顯示全部'
print '3.搜尋名片'
print '0.退出系統'
print '*' * 50


def new_card():
"""新增名片"""
print '-' * 50
print '新增名片'
# 1.提示使用者輸入名片的詳細資訊
name_str = raw_input('請輸入姓名:')
phone_str = raw_input('請輸入電話:')
qq_str = raw_input('請輸入QQ:')
email_str = raw_input('請輸入郵箱:')

# 2.使用使用者輸入的資訊建立一個名片字典
card_dict = {'name_str': name_str,
             'phone_str': phone_str,
             'qq_str': qq_str,
             'email_str': email_str}

# 3.將名片字典新增到列表中
card_list.append(card_dict)  # 把一個字典追加到一個列表中
print card_list
# 4.提示使用者新增成功
print '新增%s 的名片成功' % name_str


def show_all():
"""顯示所有名片"""
print '-' * 50
print '顯示所有名片'

# 判斷是否存在名片記錄,如果沒有,提示使用者並且返回
if len(card_list) == 0:
    print '當前沒有任何的名片記錄,請使用新增功能新增名片'
    # return 可以返回一個函式的執行結果
    # 下方的程式碼不會被執行
    # 如果return後面沒有任何的內容,表示會返回到呼叫函式的位置
    # 並且不返回任何結果
    return
# 打印表頭
for name in ["姓名", "電話", "QQ", "郵箱"]:
    print name,
print ''
# 列印分隔線
print '=' * 50

# 遍歷名片列表依次輸出字典資訊
for card_dict in card_list:
    # print card_dict
    print '%s\t\t%s\t\t%s\t\t%s' % (card_dict['name_str'],
                                    card_dict['phone_str'],
                                    card_dict['qq_str'],
                                    card_dict['email_str'])


def search_card():
"""搜尋名片"""
print '-' * 50
print '搜尋名片'

# 1.提示使用者輸入要搜尋的姓名
find_name = raw_input('請輸入要搜尋的姓名:')
# 2.遍歷名片列表,查詢要搜尋的姓名,如果沒有找到,需要提示使用者
for card_dict in card_list:
    if card_dict['name_str'] == find_name:
        print '姓名 電話 QQ 郵箱'
        print '=' * 50
        print '%s %s %s %s' % (card_dict['name_str'],
                               card_dict['phone_str'],
                               card_dict['qq_str'],
                               card_dict['email_str'])

        # TODO 針對找到的名片記錄執行修改和刪除的操作
        # 在我們的日常編寫程式中,如果一個函式的程式碼太多,閱讀和編寫都是一件困難的事情,而在開發中,可以針對一個具體獨立的功能來封裝一個函式,由這個函式來處理具體的操作,這樣就能保證每個函式中的程式碼清晰明瞭,功能明確
        deal_card(card_dict)
        break

    else:
        print '抱歉,沒有找到%s' % find_name


def deal_card(find_dict):
print find_dict
action_str = raw_input('請選擇要執行的操作 '
                       '[1] 修改 [2] 刪除 :')
# 替換已經存在的鍵值對
if action_str == '1':
    find_dict['name_str'] = input_card_info(find_dict['name_str'], '姓名:')
    find_dict['phone_str'] = input_card_info(find_dict['phone_str'], '電話:')
    find_dict['qq_str'] = input_card_info(find_dict['qq_str'], 'QQ:')
    find_dict['email_str'] = input_card_info(find_dict['email_str'], '郵箱:')

    print '修改名片成功!!!'
elif action_str == '2':

    card_list.remove(find_dict)

    print '刪除名片成功!!!'

def input_card_info(dict_value, tip_message):


"""

:param dict_value:字典中原有的值
:param tip_message:輸入的提示文字
:return:如果使用者輸入了內容,就返回內容,負責返回字典中原有的值
"""
# 1.提示使用者輸入內容

result_str = raw_input(tip_message)
# 2.針對使用者的輸入進行判斷,如果使用者輸入了內容,直接返回結果
if len(result_str) > 0:
    return result_str
# 3.如果使用者沒有輸入內容,返回‘字典中原有的值’
else:
    return dict_value