主頁 > 後端開發 > 三、Python基礎(高級變數型別篇)

三、Python基礎(高級變數型別篇)

2021-02-05 14:15:47 後端開發

三、Python基礎(高級變數型別篇)

目錄:

  • 三、Python基礎(高級變數型別篇)
        • 一、串列 list
          • 1.串列的定義
          • 2.串列的常用方法和操作
    • 物件.方法名(引數)
          • 3.for in對串列迭代遍歷
          • 4.利用 for in 的輸出技巧
        • 二、元組 tuple
          • 1.元組的定義
          • 2.元組的兩個方法和一個函式:count 、 index 和 len()
          • 3.for in對串列迭代遍歷(較少使用)
          • 4.元組的應用場景
            • (1)print 的陳述句格式輸出
            • (2)作為函式的 引數值 使用
            • (3)作為函式的 回傳值 使用
          • 5.元組 和 串列 之間的轉換
    • list(元組)
    • tuple(串列)
        • 三、字典 dictionary
          • 1.字典的定義
          • 2.字典的常用方法和操作
          • 3.for in對字典迭代遍歷(較少使用)
          • 4.字典的應用場景
            • (1)將多個字典嵌套在串列中,組成“ 結構體陣列/順序表 ”
        • 四、字串 string
          • 1.字串的定義
          • 2.字串的常用方法和操作
            • (1)訪問、統計與查找
            • (2)型別判斷
            • (3)查找和替換
            • (4)文本對齊
            • (5)去除空白字符
            • (6)拆分和連接
          • 3.for in對字串迭代遍歷(較少使用)
          • 4.字串的切片
    • 字串[開始下標:結束下標]
    • 字串[開始下標:結束下標:步長]
        • 五、高級資料型別的公共方法
          • 1.Python的內置函式
          • 2.切片
          • 3.運算子
          • 4.完整的for回圈語法
        • 六、階段學習小結——綜合應用:名片管理系統
          • 1.框架搭建
          • 2.完善其余函式
            • (1)building() -> dict 函式
            • (2)listing(list) 函式
            • (3)inquire(list) 函式
          • 3.源代碼
            • (1)administration_function.py 檔案:
            • (2)administration_main.py 檔案:
        • 上一篇文章
        • 下一篇文章


一、串列 list

串列是 Python 中使用次數最頻繁的資料型別,在其他語言中其被稱為陣列

1.串列的定義
list_name = ["張三", "李四", "王二"]
  • 利用下標/索引訪問串列中的內容,如:list_name[0] = “張三”
  • 同其他語言一樣,串列的下標/索引從 0 開始
2.串列的常用方法和操作

方法的呼叫格式:

物件.方法名(引數)

  • 方法和函式類似,同樣是封裝好了的獨立功能
  • 方法需要通過物件來呼叫,表示針對這個物件要做的操作
  • 其中串列表示串列名——屬于物件
  • del()len() 屬于函式,其他屬于方法
序號分類關鍵字/函式/方法含義
1增加串列.insert(下標, 資料)在指定位置插入資料
串列.append(資料)在末尾追加資料
串列.extend(串列2)將串列2的資料追加到串列
2修改串列[下標] = 資料修改指定下標的資料
3查找串列.index(資料)查找第一次出現資料的位置,回傳下標
4洗掉del 串列[下標]洗掉指定下標的資料
串列.remove(資料)洗掉第一次出現的指定資料
串列.pop洗掉末尾資料
串列.pop(下標)洗掉指定下標的資料
串列.clear清空串列
5統計len(串列)統計串列長度
串列.count(資料)統計資料在串列中出現的次數
6排序串列.sort()升序排序
串列.sort(reverse=True)降序排序
串列.reverse()逆序、反轉
  • :由于串列是連續的,因此每次洗掉資料后,后面的資料會整體向前移動,來填補洗掉后的空缺,以此來保持串列的連續性重要 )
    同理,每次插入資料后,該位置和后面的資料會整體向后移動,來
    空出指定的位置用來插入資料
    ,以此來保持串列的連續性重要)
  • 查找中的 index(self, value, start, stop) 實際上是有四個引數的,以后會講到,若僅需查找資料則指定 串列.index(資料) 即可
  • del 串列[下標]串列.pop(下標) 的區別:del 本質上是用于清除記憶體的;而 pop 的定義是用與串列的,因此 del 還可以用于其他資料型別,例如:
    在這里插入圖片描述
  • del 串列串列.clear 的區別:串列.clear 后,雖然串列被清空,但串列仍然存在(是個空串列),仍然可以用 print(串列) 來訪問;而 del 串列 后,串列的記憶體直接被清除,串列都不存在了,自然不能用 print(串列) 來訪問
  • 指定資料中,若指定的資料不存在,則PyCharm會直接報錯,如:若指定的資料不存在,則index會報錯(重要
  • 串列.append(資料) 中,若所追加的資料也是一個串列,那么Python就會把新的串列當成一個物件追加到串列中,如:[0, 1, 2, 3].append([4, 5]) = [0, 1, 2, 3, [4, 5]]

例:下面展示增刪改查以及各種操作的使用

list_name = ["張三", "李四", "王二", "李四"]

# 可以使用下標進行取值
print(list_name)

# 查找
print(list_name.index("李四"))

# 插入
list_name.insert(0, "老王")
print(list_name)
list_name.append("老樊")
print(list_name)

other_list = ["莫德凱撒"]
list_name.extend(other_list)
print(list_name)

# 修改
list_name[2] = "王五"
print(list_name)

# 洗掉
del list_name[0]
print(list_name)
list_name.remove("老樊")
print(list_name)
list_name.clear()
print(list_name)

在這里插入圖片描述
例:查看 Python 中自帶的關鍵字個數

import keyword
print(len(keyword.kwlist))
3.for in對串列迭代遍歷

在 Python 中,為了提高串列的遍歷效率,專門提供的迭代 iteration 遍歷

使用 for 就能實作迭代遍歷,即按串列順序地把串列里的元素依次訪問獲取,放在指代詞中

"""for 回圈內部使用的變數 in 串列"""
for name in list_name:

    """回圈內部針對串列元素進行操作"""
    print(name)
  • 注:此處的 name 是隨意起的,其作用是用來分別在每一層遍歷中指代 list_name 里面的元素

迭代遍歷邏輯與格式如圖所示:
在這里插入圖片描述
提示:Python 的串列是可以存放不同資料型別的元素的,但一般是存放相同資料型別的資料,更加便于迭代遍歷

4.利用 for in 的輸出技巧

例:

for data in ["姓名", "性別", "年齡", "學號"]:
    print(data, end="\t\t\t")

在這里插入圖片描述


二、元組 tuple

在SQL資料庫中,我們知道元組由若干個資料型別不盡相同的屬性組成,于是在 Python 中,或者說與串列不同地方在于,元組用于存盤資料型別不同的元素,并且元組內的元素不能更改

1.元組的定義
"""創建一個元組的兩種方式"""
info_tuple0 = ("張三", "男", 18, 20201111)
info_tuple1 = "張三", "男", 18, 20201111

"""創建一個空元組,極少使用"""
empty_tuple = ()

"""這不是一個元組"""
info_tuple2 = (5)

"""如果元組只有一個元素,可以這樣定義"""
info_tuple2 = (5, )
  • 串列的定義是用 [ ] ,而元組的定義可以用 ( ) ,但 ( ) 并不唯一標識元組,而是逗號 " , "
  • 但是,元組里的元素不能修改,它側重于儲存一組固定的資料,如:個人資訊
  • 元組的下標 [ ] 同樣從 0 開始計數
  • 元組內部可以嵌套串列,此時可以改變串列的值,這并不算改變元組
  • 串列內部可以嵌套元組,此時可以組成一張關系表,而串列一般標記的可以是主碼
2.元組的兩個方法和一個函式:count 、 index 和 len()
序號分類函式/方法含義
1統計元組.count(資料)統計資料在元組中出現的次數
len(元組)統計元組中的元素個數
2查找元組.index(資料)查找資料第一次出現在元組的位置,回傳下標

例:

info_tuple = "張三", "男", 18, 2020111

print(info_tuple.count("張三"), end=" ")
print(info_tuple.index(18), end=" ")
print(len(info_tuple), end="")

在這里插入圖片描述

3.for in對串列迭代遍歷(較少使用)

例:

"""定義一個元組"""
info_tuple = ("張三", "男", 18, 2020111)

"""迭代遍歷"""
for information in info_tuple:

    print(information)
4.元組的應用場景
(1)print 的陳述句格式輸出
info_tuple = ("張三", "男", 18, 2020111)

print("學生名字叫 %s,性別 %s,今年 %d 歲,學號是 %d" % info_tuple)

"""欄位還可以被視為字串"""
info_str = "學生名字叫 %s,性別 %s,今年 %d 歲,學號是 %d" % info_tuple
print(info_str)

在這里插入圖片描述

(2)作為函式的 引數值 使用
def info_function(temporary_tuple):
    """元組作為函式的引數值使用"""
    print(temporary_tuple)


new_tuple = ("李紅", "女", 18, 20001111)
info_function(new_tuple)

在這里插入圖片描述

(3)作為函式的 回傳值 使用
def info_function():
	"""元組作為函式的回傳值使用"""
    temporary_tuple = ("老王", "男", 36, 19991111)

    return temporary_tuple


new_tuple = info_function()
print(info_function())

在這里插入圖片描述

5.元組 和 串列 之間的轉換

list(元組)

把元組轉換成串列

tuple(串列)

把串列轉換成元組


三、字典 dictionary

字典是無序的物件集合,我們不關心其內容的順序,它類似于關系資料庫中的一張關系表,或者說是C語言中的一個結構體

1.字典的定義
student = {"name": "張三", 
           "sex": "男", 
           "height": 1.75, 
           "weight": 135}
  • 字典通過來訪問,如:student[“name”] = “張三”
  • 字典的定義使用 { } ,其中 鍵 key 是索引/下標, 值 value 是資料,必須是唯一的
  • 鍵值對之間用逗號 " , " 分開,而 之間用冒號 " : " 分開
  • 上述字典所定義的關系表為:
鍵 key值 value
name張三
sex
height1.75
weight135
2.字典的常用方法和操作
序號分類關鍵字/函式/方法含義
1訪問字典[鍵]訪問字典中對應鍵的值
字典.get(鍵)訪問字典中對應鍵的值
2增加字典[鍵] = 值其中鍵為原字典不存在的鍵,即可新增鍵值
字典.setdefault(鍵, 值)如果鍵存在,不會修改值;如果鍵不存在,則新建鍵值對
3修改字典[鍵] = 修改值其中鍵為原字典存在的鍵,即可修改值,相當于重新賦值
4洗掉字典.pop(鍵)洗掉指定的鍵值對
del 字典[鍵]洗掉字典中指定的鍵值對
字典.clear()清空字典
del 字典洗掉字典
字典.popitem()洗掉字典中的最后一個鍵值對
5串列字典.keys()依次列出所有的key
字典.values()依次列出所有的value
字典.items()依次列出所有的鍵值對,比 print(字典) 更好
6合并字典.update(字典2)將字典2合并到字典中
7統計len(字典)統計鍵值對的數量

例:

student = {"name": "張三",
           "sex": "男",
           "height": 1.75,
           "weight": 135,
           "score": 95}

print(student.keys())
print(student.values())
print(student.items())
print(student)

在這里插入圖片描述
提示:由于各函式和方法簡單易懂、易使用,因此這里不再作詳細的示例

3.for in對字典迭代遍歷(較少使用)

迭代遍歷邏輯與格式如圖所示:
在這里插入圖片描述
:指代詞指代的是鍵,可用每層迭代的不同鍵來訪問不同值

例:

student = {"name": "張三",
           "sex": "男",
           "height": 1.75,
           "weight": 135,
           "score": 95}

for key in student:

    print("%s %s" % (key, student[key]))

在這里插入圖片描述

4.字典的應用場景
(1)將多個字典嵌套在串列中,組成“ 結構體陣列/順序表 ”

例:

student_list = [{"name": "張三",
                 "sex": "男"},
                {"name": "李紅",
                 "sex": "女"},
                {"name": "老王",
                 "sex": "男"}]

"""列印方式1"""
for table in student_list:
    print(table)

"""列印方式2"""
for table in student_list:

    for key in table:
        print("%s %s" % (key, table[key]))

在這里插入圖片描述


四、字串 string

實際上,我們在 二、Python基礎(基礎篇)已經大量使用過字串了

1.字串的定義
str1 = "歡迎來到 ~憲憲 的博客"
str2 = '歡迎來到"~憲憲"的博客'
  • 一般來說,我們定義字串時使用的是雙引號 " "
  • 但是如果我們想讓字串里面有 " " 的字符,那我們就使用單引號 ’ ’ 來定義
  • 字串可以通過下標/索引來訪問字串中的字符,如:str1[0] = ”歡“,str1[1] = “迎”
2.字串的常用方法和操作
(1)訪問、統計與查找
序號分類關鍵字/函式/方法含義
1訪問字串[下標]訪問字串中的字符
2查找字串.index(小字串)查找子字串第一次出現在大字串的位置,回傳下標
3統計len(字串)統計字串的長度
字串.count(小字串)統計子字串在大字串中出現的次數
(2)型別判斷

這里的方法名很好理解,都是由 isXXX 構成,isXXX 就是“是XXX”的意思

序號方法含義
1string.isspace()如果string中只包含空白字符(空格、\t、\n、\r),則回傳True
2string.isalnum()如果string至少有一個字符并且所有字符都是字母或數字則回傳True
3string.isalpha如果string至少有一個字符并且所有字符都是字符則回傳True
4string.isdecimal()如果string只包含數字則回傳True,全角數字
5string.isdigit()如果string只包含數字則回傳True,全角數字、⑴、\u00b2
6string.isnumeric()如果string只包含數字則回傳True,全角數字、漢字數字
7string.istitle()如果string是標題化的(每個單詞的首字母大寫)則回傳True
8string.islower()如果string中包含至少一個區分大小寫的字符(如:字母),并且所有這些區分大小寫的字符(如:字母)都是小寫,則回傳True
9string.isupper()如果string中包含至少一個區分大小寫的字符(如:字母),并且所有這些區分大小寫的字符(如:字母)都是大寫,則回傳True
  • 是則回傳True,否則回傳False
  • 方法4、5、6都不能判斷小數,如:3.14(注意
  • 方法4:阿拉伯數字
  • 方法5:阿拉伯數字、⑴⑵——unicode字串,無法直接通過鍵盤直接輸入,但可以通過輸入法輸入、\u00b2即:2——上標數字,無法直接通過鍵盤直接輸入,在Python中用 \u00bX 表示
  • 方法6:阿拉伯數字、漢字數字

例:我們展示較為常用的幾個方法

str1 = " \n \t \r"
print(str1.isspace())
print()

str2 = "abc123"
print(str2.isalnum())
print()

str3 = "12345"
str4 = "4⑴23\u00b2"
str5 = "一千零一6六萬三千"
print(str3.isdecimal())
print(str4.isdigit())
print(str5.isnumeric())

在這里插入圖片描述

(3)查找和替換
序號方法含義
1string.startswith(str)檢查字串是否以str開頭,是則回傳True
2string.endswith(str)檢查字串是否以str結束,是則回傳True
3string.find(str, start, end)檢測str是否包含在string內,如果start和end指定范圍,則檢查是否包含在指定范圍內,如果是則回傳str第一次出現時字符開始的下標,否則回傳-1
4string.rfind(str, start, end)類似于find()函式,不過是查找str在右邊第一次出現的位置(str可能出現多次)
5string.index(str, start, end)跟find()方法類似,只不過如果str不再string會報錯
6string.rindex(str, start, end)類似于index(),不過是查找str在右邊第一次出現的位置(str可能出現多次)
7string.replace(old_str, new_str, num把string中的old_str替換成new_str,如果num指定,則替換不超過num次
  • str指的是string中的一段小字串
  • 指定范圍 [start,end):start指的是開始的下標,end表示結束的下標,檢索start,但不檢索end
  • 方法7:在執行完之后會回傳一個新的的字串,但不會把修改結果覆寫到string中(重要)
  • 方法7:num 為可執行替換的最高次數,若num>len(string),則全部替換;若num<len(string),則替換前num個指定字串
  • 如果要查找的資料不存在于string中,index 會報錯,而 find 會回傳-1不會報錯

例:我們展示較為常用的幾個方法

str1 = "Hello Python"

print(str1.startswith("He"))
print(str1.endswith("on"))
print(str1.find("Py", 6, 7))
print(str1.find("Py", 6, 8))

print(str1.replace("o", "6", 1))
print(str1.replace("o", "6"))
print(str1)

在這里插入圖片描述

(4)文本對齊
序號方法含義
1string.ljust(width)回傳一個 原字串左對齊,并使用空格填充至長度width的 新字串
2string.rjust(width)回傳一個 原字串右對齊,并使用空格填充至長度width的 新字串
3string.center(width)回傳一個 原字串居中,并使用空格填充至長度width的 新字串
  • :這些方法只是回傳一個新的字串,而不會覆寫原字串string
  • ljust(width, str)rjust(width, str) 和 **center(width, str)**都有原型,當 str 預設時,會使用半角空格(一個英文長度的空格)來進行填充;當 str 指定后,會使用 str 指定的字符來進行填充
  • 如果 width 的長度比 string 短,那么對齊可能無效

例:由于是中文的對齊,因此我們指定 str 為全角空格(一個中文長度的空格)來進行對齊

  • 其中 " " 中的 | | 用于觀察 width 的長度,顯然長度都一致
"""假設以下文本是從網路上爬取的,要進行文本對齊"""
poem = ["歲月極美",
        "在于它必然的流逝",
        "我們將掌心攏起",
        "也抓不住飄渺的云煙",
        "攥不住流動的細沙",
        "更留不住逝去的年華"]

for sentence in poem:
    print("|%s|" % sentence.rjust(20, " "))

for sentence in poem:
    print("|%s|" % sentence.ljust(20, " "))

for sentence in poem:
    print("|%s|" % sentence.center(20, " "))

在這里插入圖片描述

(5)去除空白字符
序號方法含義
1string.lstrip()截掉string左邊的(開始)的空白字符
2string.rstrip()截掉string右邊的(末尾)的空白字符
3string.strip()截掉string左右兩邊的空白字符
  • :這些方法只是回傳一個新的字串,而不會覆寫原字串string

例:還是以poem為例,我們隨意地向詩句上面增加一些空白字符

"""假設以下文本是從網路上爬取的"""
poem = ["\n\t歲月極美",
        "在于它必然的流逝",
        "我們將掌心攏起\t\n",
        "\t也抓不住飄渺的云煙",
        "攥不住流動的細沙",
        "更留不住逝去的年華"]

for sentence in poem:
    """我們去除空白字符,再進行文本對齊"""
    print("|%s|" % sentence.strip().center(20, " "))

在這里插入圖片描述

  • 補充:在這個代碼中,我們首次展示了方法的連用:
    print("|%s|" % sentence.strip().center(20, " "))
    即首先通過 strip() 得到一個新的字串,再通過 center() 來對這個新字串再進行操作,從而形成了方法的連用,本質上,原字串和第一個新字串都是一個物件,它們均能夠使用方法
(6)拆分和連接
序號方法含義
1string.partition(str)把字串string分成一個3元素的元組(str前面,str,str后面)
2string.rpartition(str)類似于partition()方法,不過是查找str在右邊第一次出現的位置(str可能有多個)
3string.split(str, num)以str為分隔符拆分string,如果num有指定值,則僅分隔num+1個子字串(str預設時,str為空白字符\r、\t、\n和空格)
4string.splitlines()按照行(\r、\n、\r\n)分隔,回傳一個包含各行作為元素的串列
5string.join(seq)以string作為分隔符,將seq(字串或元組)中所有的元素(的字串表示)合并為一個新的字串
  • :這些方法只是回傳一個新的字串或元組,而不會覆寫原字串string
  • 方法1、2、3、4的回傳值是一個元組

例:

str1 = "Hello World"
print(str1.partition("l"))
print(str1.rpartition("l"))

str2 = "\n\t歲月極美\t在于它必然的流逝\n我們將掌心攏起 也抓不住飄渺的云煙\n攥不住流動的細沙\t更留不住逝去的年華"
new_str = str2.split()

for information in new_str:
    print(information)

print(" ".join(new_str))

在這里插入圖片描述

3.for in對字串迭代遍歷(較少使用)
str = "歡迎來到 ~憲憲 的博客"

for char in str:
    print(char, end='')

在這里插入圖片描述

4.字串的切片

字串[開始下標:結束下標]

截取范圍 [開始下標,結束下標) 的字串

字串[開始下標:結束下標:步長]

可以從 開始下標~結束下標 的范圍對字串進行切片,其中步長指的是下一次切片時相對于這一次切片時的位置按步長的方向向后位移的元素個數(下標數),因此步長不能為0,否則切片的位置不動是顯然不正確的

  • 步長>0 時:表示從左到右進行切片,此時范圍應滿足:開始下標<結束下標
  • 步長<0 時:表示從右到左進行切片,此時范圍應滿足:開始下標>結束下標
  • 步長預設時,則默認:步長=1
  • 范圍:[開始下標,結束下標) 中,結束下標的字符不包含在范圍內
    (1)若開始下標預設,則開始下標默認為字串的最左端或最右端,這個開始位置由切片的方向決定,若步長>0,則開始下標為字串最左端;若步長<0,則開始下標為字串最右端
    (2)若結束下標預設,則按步長方向切片到字串的另一端盡頭
  • 當不知道字串的長度時,開始下標或結束下標可用負數來指定,表示倒數第幾個元素,如-1就是倒數第1個字符(由于沒有-0之說,所以負下標是從-1開始)
  • 步長,如:對"歡迎來到~憲憲的博客"進行步長為2的切片,從 [0,10) 的范圍進行切片,第一次切下的是"",由于步長為2,第二次切片的位置相對這一次切片時的位置向后位移2個下標(間隔1個字符),故第二次切下的是"",第三次切下的是"~",接著"",“
    ——于是,上述截取的結果為:“歡來~憲博
  • 當步長預設時,則默認為1,即每次切片向后位移一個下標的單位

例:str1[::]表示截取完整的字串

例:str1[::2]表示每次切片后下次切片時下標位移2個單位(間隔1個字符),截取范圍為整個字串

例:str1[-1]倒數第1個字符,即下標訪問

例:

str1 = "歲月極美 在于它必然的流逝 我們將掌心攏起 也抓不住飄渺的云煙 攥不住流動的細沙 更留不住逝去的年華"
print(str1)
print(new_str2[0:4])
"""從開始到結束,步長為2"""
print(new_str2[0::2])
print(new_str2[0:-2:2])

在這里插入圖片描述
例:字串逆序輸出

str2 = "0123456789"
print(str2[-1::-1])

在這里插入圖片描述


五、高級資料型別的公共方法

針對高級變數型別串列、元組、字典和字串都可以使用的方法稱為公共方法

1.Python的內置函式
函式描述備注
len(item)計算容器中元素個數
del(item)洗掉變數del有兩種方式
max(item)回傳容器中元素最大值如果是字典,只針對key比較
min(item)回傳容器中元素最小值如果是字典,只針對key比較
cmp(item1, item2)比較兩個值(-1小于/0相等/1大于)Python3.X取消了cmp函式
  • del的兩種方式分別是關鍵字函式前面我們使用的是關鍵字,它們效果是完全相同的
  • 比較字符的大小會按照ASCII碼和字典排序的方式來進行比較(不懂字典排序可自行百度)
  • Python3.X中,可以通過比較運算子來代替cmp函式,比較運算子回傳值為True或False
  • 兩個字典之間不能比較大小
  • 串列和元組的比較大小,對串列或元組內的元素依次進行比較,當相同下標的元素第一次出現不同時,則回傳這個比較結果(按ASCII或字典排序比較),如果所有相同下標的元素都相等,則回傳相等結果(重要
2.切片

除字串外,串列和元組的元素也可以通過下標來進行訪問,因此它們也可以進行切片操作

描述Python運算式結果支持的資料型別
切片“0123456789”[::-2]“97531”字串、串列、元組

例:

"""其他型別的切片"""
list_name = [1, 2, 3, 4, 5, 6]
print(list_name[::-2])

info_tuple = ("張三", "男", 18, 1.75)
print(info_tuple[::-3])

在這里插入圖片描述

3.運算子
運算子Python運算式結果描述支持的資料型別
+[1, 2] + [3, 4][1, 2, 3, 4]合并字串、串列、元組
*[“Hi!”] * 4[“Hi!”, “Hi!”, “Hi!”, “Hi!”]重復字串、串列、元組
in3 in (1, 2, 3)True元素是否存在字串、串列、元組、字典
not in4 not in (1, 2, 3)True元素是否不存在字串、串列、元組、字典
>、>=、==、<、<=(1, 2, 3) < (2, 2, 3)True元素比較字串、串列、元組
  • 串列.extend(串列2) 會把串列2追加到串列上,而串列1 + 串列2會生成新的串列
4.完整的for回圈語法

完整的迭代遍歷邏輯與格式如圖所示:
在這里插入圖片描述

  • continue 不會影響else的執行

例:

for num in [0, 1, 2, 3]:
    if num == 3:
    break
    
else:
    print("這段代碼不會被執行")

完整的for else陳述句對求范圍內的素數時非常好用

常用應用場景

例:在指定的字典串列中尋找資訊,如:查找李紅和李華的性別,如果沒找到則告訴用戶

student_list = [{"name": "張三",
                 "sex": "男"},
                {"name": "李紅",
                 "sex": "女"},
                {"name": "老王",
                 "sex": "男"}]

"""在字典中查找李紅的性別"""
for info_tuple in student_list:
    if info_tuple["name"] == "李紅":
        print("找到了李紅,性別:%s" % info_tuple["sex"])
        break

else:
    print("沒有找到李紅")

"""在字典中查找李華的性別"""
for info_tuple in student_list:
    if info_tuple["name"] == "李華":
        print("找到了李紅,性別:%s" % info_tuple["sex"])
        break

else:
    print("沒有找到李華")

在這里插入圖片描述


六、階段學習小結——綜合應用:名片管理系統

名片資訊包含:姓名、電話、QQ、郵箱

需求

  • 新增名片
  • 顯示所有名片
  • 名片查詢——修改名片、洗掉名片
  • 要有一個選擇的界面
1.框架搭建

我們約定用 administration_main.py 檔案作為名片管理系統的主函式
其次,用 administration_function.py 檔案作為名片管理系統封裝函式的檔案

于是, administration_main.py 檔案中搭建的功能代碼框架如下:

import administration_function

"""創建一個空串列,用于放置用戶的名片字典"""
list_card = []

"""保證用戶回圈輸入"""
while 1:
    administration_function.welcome()
    choice = input("請輸入您的選擇:")

    if choice == "0":
        exit(0)
    elif choice == "1":
        list_card.append(administration_function.building())
    elif choice == "2":
        administration_function.listing(list_card)
    elif choice == "3":
        administration_function.inquire(list_card)

    else:
        print("請輸入有效的選項!")
        continue

下面介紹上述代碼中所出現的 administration_function.py 檔案中的函式:

  • welcome():歡迎界面,用于指參考戶進行選擇
  • building():新建名片,回傳一個字典
    list_card.append(administration_function.building()) 表示把新建的字典追加到串列后
  • listing(list):顯示所有名片( list_card
  • inquire(list):在 list_card 中查詢名片

administration_function.py 檔案中的 welcome() 歡迎界面函式代碼如下:

提示:print("******************************************************") 可以用 print(" * " * 50) 來表示

def welcome():
    """歡迎界面"""
    print("******************************************************")
    print("歡迎使用【名片管理系統】 V1.0")
    print()
    print("1.新建名片")
    print("2.查看所有名片")
    print("3.查詢名片")
    print()
    print("0.退出系統")
    print("******************************************************")

在這里插入圖片描述
輸入錯誤判斷:
在這里插入圖片描述
于是,名片管理系統的總體框架我們已經搭建起來了

2.完善其余函式
(1)building() -> dict 函式

building() -> dict 函式用于新建名片,并且回傳一個字典,因此我們要求用戶輸入并獲取新建名片時輸入的資訊:姓名、電話、QQ和郵箱;新建一個字典,把獲得的資訊置于字典中,并回傳字典

def building():
    """新建名片"""
    print("------------------------------------------------------")
    temp_name = input("請輸入姓名:")
    temp_phone = input("請輸入電話:")
    temp_qq = input("請輸入QQ號碼:")
    temp_email = input("請輸入郵箱:")
    print("名片添加成功!")
    print("------------------------------------------------------")

    temp_dict = {"name": temp_name,
                 "phone": temp_phone,
                 "qq": temp_qq,
                 "email": temp_email}

    return temp_dict

在這里插入圖片描述

在這里插入圖片描述

(2)listing(list) 函式

listing(list) 函式用于顯示所有名片,因此需要把由 名片字典 組成的 串列 list_card 作為引數傳入函式,當程式中沒有名片時我們要告訴用戶名片集為空,否則按照一定的文本格式來輸出程式中的名片

def listing(temp_list):
    """列出所有名片"""
    
    """用len()函式來判斷串列是否為空"""
    if len(temp_list) == 0:
        print("------------------------------------------------------")
        print("名片為空!")
        print("------------------------------------------------------")
        return

    """控制輸出格式"""
    print("******************************************************")
    print("姓名".center(6, " "), 
          "電話".center(12, " "), 
          "QQ".center(12, " "), 
          "郵箱".center(12, " "))
    for card in temp_list:
        print(card["name"].ljust(6, " "), 
              card["phone"].ljust(12, " "),
              card["qq"].ljust(12, " "), 
              card["email"].ljust(12, " "))

    print("******************************************************")

當程式中名片為空時:
在這里插入圖片描述
當程式中名片不為空時:
在這里插入圖片描述

(3)inquire(list) 函式

inquire(list) 函式用于查詢名片,因此需要判斷所查詢的名片是否存在,在查詢名片后,提供用戶兩個選擇:修改名片、洗掉名片,還有回傳到主選單,因此在 inquire(list) 函式中,又另外添加了一個函式:change(dict) 函式,主要用于修改名片中的值,因此需要傳入需要更改的名片字典作為引數

inquire(list) 函式代碼如下:

def inquire(temp_list):
    """查詢名片"""
    print("------------------------------------------------------")
    temp_name = input("請輸入您要查詢的名片的姓名:")
    print("------------------------------------------------------")

    """根據用戶輸入的姓名查找名片,并列出名片資訊"""
    for card in temp_list:
        if card["name"] == temp_name:
            print("******************************************************")
            print("姓名".center(6, " "), 
                  "電話".center(12, " "), 
                  "QQ".center(12, " "), 
                  "郵箱".center(12, " "))
            print(card["name"].ljust(6, " "), 
                  card["phone"].ljust(12, " "),
                  card["qq"].ljust(12, " "), 
                  card["email"].ljust(12, " "))
            print("******************************************************")
            print("1.修改名片")
            print("2.洗掉名片")
            print()
            print("0.回傳")
            print("******************************************************")

            while 1:
                temp_choice = input("請輸入您的選擇:")
                if temp_choice == "0":
                    return
                elif temp_choice == "1":
                    change(card)
                    break
                elif temp_choice == "2":
                    # 洗掉名片
                    del temp_list[temp_list.index(card)]
                    print("洗掉成功!")
                    break

                else:
                    print("請輸入有效的選項")
                    continue

            break
    else:
        print("沒有找到該姓名的名片")
        print("------------------------------------------------------")
  • 注意指代詞card,由于無法直接通過指代詞card來洗掉串列中的元素,因此我們需要通過
    串列.index(資料) 函式先找到需要洗掉的名片字典所在的下標,再用 del temp_list[下標] 才能正確洗掉串列中的名片字典

在這里插入圖片描述
在這里插入圖片描述

change(dict) 函式代碼如下:
直接傳入需要修改的字典即可修改名片字典

def change(temp_dict):
    """修改名片"""
    print("------------------------------------------------------")
    temp_name = input("新姓名【若不修改則直接回車】:")
    if temp_name != "":
        temp_dict["name"] = temp_name
    temp_phone = input("新電話【若不修改則直接回車】:")
    if temp_phone != "":
        temp_dict["phone"] = temp_phone
    temp_qq = input("新QQ號碼【若不修改則直接回車】:")
    if temp_qq != "":
        temp_dict["qq"] = temp_qq
    temp_email = input("新郵箱【若不修改則直接回車】:")
    if temp_email != "":
        temp_dict["email"] = temp_email
    print("修改成功!")
    print("------------------------------------------------------")
  • 當用戶直接按下回車時,表示輸入的內容為 “” 空,我們以此來表示用戶不想作修改時的選擇
    在這里插入圖片描述
    最后,名片管理系統順利完成!
3.源代碼
(1)administration_function.py 檔案:
def welcome():
    """歡迎界面"""
    print("******************************************************")
    print("歡迎使用【名片管理系統】 V1.0")
    print()
    print("1.新建名片")
    print("2.查看所有名片")
    print("3.查詢名片")
    print()
    print("0.退出系統")
    print("******************************************************")


def building():
    """新建名片"""
    print("------------------------------------------------------")
    temp_name = input("請輸入姓名:")
    temp_phone = input("請輸入電話:")
    temp_qq = input("請輸入QQ號碼:")
    temp_email = input("請輸入郵箱:")
    print("名片添加成功!")
    print("------------------------------------------------------")

    temp_dict = {"name": temp_name,
                 "phone": temp_phone,
                 "qq": temp_qq,
                 "email": temp_email}

    return temp_dict


def listing(temp_list):
    """列出所有名片"""
    if len(temp_list) == 0:
        print("------------------------------------------------------")
        print("名片為空!")
        print("------------------------------------------------------")
        return

    print("******************************************************")
    print("姓名".center(6, " "), 
          "電話".center(12, " "), 
          "QQ".center(12, " "), 
          "郵箱".center(12, " "))
    for card in temp_list:
        print(card["name"].ljust(6, " "), 
              card["phone"].ljust(12, " "),
              card["qq"].ljust(12, " "), 
              card["email"].ljust(12, " "))

    print("******************************************************")


def change(temp_dict):
    """修改名片"""
    print("------------------------------------------------------")
    temp_name = input("新姓名【若不修改則直接回車】:")
    if temp_name != "":
        temp_dict["name"] = temp_name
    temp_phone = input("新電話【若不修改則直接回車】:")
    if temp_phone != "":
        temp_dict["phone"] = temp_phone
    temp_qq = input("新QQ號碼【若不修改則直接回車】:")
    if temp_qq != "":
        temp_dict["qq"] = temp_qq
    temp_email = input("新郵箱【若不修改則直接回車】:")
    if temp_email != "":
        temp_dict["email"] = temp_email
    print("修改成功!")
    print("------------------------------------------------------")


def inquire(temp_list):
    """查詢名片"""
    print("------------------------------------------------------")
    temp_name = input("請輸入您要查詢的名片的姓名:")
    print("------------------------------------------------------")

    for card in temp_list:
        if card["name"] == temp_name:
            print("******************************************************")
            print("姓名".center(6, " "), 
                  "電話".center(12, " "), 
                  "QQ".center(12, " "), 
                  "郵箱".center(12, " "))
            print(card["name"].ljust(6, " "), 
                  card["phone"].ljust(12, " "),
                  card["qq"].ljust(12, " "), 
                  card["email"].ljust(12, " "))
            print("******************************************************")
            print("1.修改名片")
            print("2.洗掉名片")
            print()
            print("0.回傳")
            print("******************************************************")

            while 1:
                temp_choice = input("請輸入您的選擇:")
                if temp_choice == "0":
                    return
                elif temp_choice == "1":
                    change(card)
                    break
                elif temp_choice == "2":
                    # 洗掉名片
                    del temp_list[temp_list.index(card)]
                    print("洗掉成功!")
                    break

                else:
                    print("請輸入有效的選項")
                    continue

            break
    else:
        print("沒有找到該姓名的名片")
        print("------------------------------------------------------")

(2)administration_main.py 檔案:
import administration_function

list_card = []

while 1:
    administration_function.welcome()
    choice = input("請輸入您的選擇:")

    if choice == "0":
        exit(0)
    elif choice == "1":
        list_card.append(administration_function.building())
    elif choice == "2":
        administration_function.listing(list_card)
    elif choice == "3":
        administration_function.inquire(list_card)

    else:
        print("請輸入有效的選項!")
        continue


上一篇文章

  • 二、Python基礎(基礎篇)

下一篇文章

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/256797.html

標籤:python

上一篇:Web全堆疊~31.并發

下一篇:Python基礎與拾遺3:Python中的串列

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more