1. 程式人生 > 其它 >Python第一篇

Python第一篇

技術標籤:python學習之旅python列表

Python的學習之旅——第一篇

前言

本文作為我開始學習python的系列第一篇。以後會持續更新。

問題:

   春節來臨之際,魏瓔珞計劃宴請眾人,包括太后、皇后、純妃、小嘉嬪、舒妃及皇上。請建立一個儲存所有賓客的列表,然後打印出每一個人的名字,並且告訴大家“春節將至,請大家來延禧宮小聚”。由於爭寵失敗,小嘉嬪不想參加宴會,就讓宮女拒絕了,請打印出不參加此次宴會的人的名單。擬定名單時,魏瓔珞突然想請爾晴來參加宴會,請重新修改列表,打印出請客名單。
  皇上收到邀請後,感覺魏瓔珞的主意特別好,於是特許她在御花園宴請大家。因此魏瓔珞可以邀請更多的人了,請使用insert()方法把哥哥放在邀請名單的首位;由於傅恆與魏瓔珞的特殊關係,因此請用append()方法把傅恆放在名單最後。請重新列印所有人的名單,並且使用len()函式打印出參加宴會的賓客人數,同時複製一個新的列表備份。明玉看到邀請名單後,先列印了前三個名字,然後又列印查看了後三個人的名字,感覺順序不對。於是她顛倒了一下順序。
  宴會開始前,皇上得知傅恆和魏瓔珞的關係,於是收回了魏瓔珞可以在御花園宴請賓客的命令。魏瓔珞不得不把宴請地方重新改為延禧宮,並且為了避嫌,只能宴請兩個人:皇后和爾晴。請用pop()方法把名單上的其餘人刪除,並且告訴他們特別遺憾不能邀請大家吃飯了。然後告訴皇后和爾晴,依然在受邀之列。 宴會開始之後,請使用del語句刪除邀請名單。

問題簡化完成步驟:

  1. 建立列表
  2. 三種方法列印初始名單
  3. 新增人員後再次修改並列印
  4. 採取insert()和append()方法加入和刪改人員並使用len()方法列印人數和列表
  5. 列印前三個和後三個人員名單,並調換位置
  6. 刪除指定人員,留下部分人員
  7. 刪除表格

按步驟完成:

三種方法列印

pyhton中提供了for迴圈列印、print直接列印和根據下標逐個列印:

name_join = ["太后","皇后","純妃","小嘉嬪","舒妃","皇上"]
#建立列表

#建立輸出
print("第一種輸出:"
,name_join) print("第二種輸出:") for i in name_join : print(i) print("第三種輸出\n",name_join[0]) print(name_join[1]) print(name_join[2]) print(name_join[3]) print(name_join[4]) print(name_join[5])

列表修改

鑑於列表的修改有重複性,這裡在第三步、第四步、第五步中只選擇第四步驟進行演示操作:

#採取insert()和append()方法加入和刪改人員並使用len()方法列印人數和列表
name_join.insert(0,"哥哥") name_join.append("傅恆") print("參與人數有:",len(name_join)) print("第二次修改後參加人員為:",name_join)

列表刪除

第六步中涉及到問題是如何在刪除列表元素的時候保護不需要刪除的元素。有一種簡便的方法就是根據下標一個一個刪除:

#刪除指定人員,留下部分人員的第一種方法
name_join.pop(0)
name_join.pop(1)
name_join.pop(1)
name_join.pop(1)
name_join.pop(2)
name_join.pop(2)
print(name_join)

輸出結果:
輸出結果1
但是為了程式碼進行自動運算和減少誤差,這裡嘗試採用迴圈進行解決,第一次選擇for迴圈和continue結合進行初步嘗試:

#刪除指定人員,留下部分人員的迴圈第一次嘗試
for i in name_join:
    if i is name_join[name_join.index("爾晴")]:
        continue
    elif i is name_join[name_join.index("皇后")]:
        continue
    elif 1:
        name_join.pop(name_join.index(i))
print("剩餘參與人:",name_join)

輸出結果:
錯誤輸出結果1
顯然結果存在錯誤,最後發現問題出現在for迴圈機制內:i變數在for的整體迴圈中是持續變化,如“爾晴”,在for第一次迴圈中,“爾晴”的下標索引值為1,i變數的指向值為name_join[0];在for的第二次迴圈中,“爾晴”的下標索引值變化為0,i變數的指向卻是name_join[1],兩種迴圈產生錯位。二次更改後:

#刪除指定人員,留下部分人員的迴圈第二次嘗試
for i in name_join:
    for j in name_join:
        if j is name_join[name_join.index("爾晴")]:
            continue
        elif j is name_join[name_join.index("皇后")]:
            continue
        elif 1:
            name_join.pop(name_join.index(j))
print("剩餘參與人:",name_join)

輸出結果:
迴圈輸出結果
此時結果正確。

刪除表格

刪除表格採取del()方法:

#刪除表格
del name_join

最終輸出

結果如下:

第一種輸出: ['太后', '皇后', '純妃', '小嘉嬪', '舒妃', '皇上']
第二種輸出:
太后
皇后
純妃
小嘉嬪
舒妃
皇上
第三種輸出
 太后
皇后
純妃
小嘉嬪
舒妃
皇上

不能參加的人是: 小嘉嬪
第一次修改後的參會人員: ['太后', '皇后', '純妃', '舒妃', '皇上', '爾晴']

參與人數有: 8
第二次修改後參加人員為: ['哥哥', '太后', '皇后', '純妃', '舒妃', '皇上', '爾晴', '傅恆']

前三個人員名字為: ['哥哥', '太后', '皇后']
後三個人員名字為: ['舒妃', '皇上', '爾晴']
反轉後 ['傅恆', '爾晴', '皇上', '舒妃', '純妃', '皇后', '太后', '哥哥']

剩餘參與人: ['爾晴', '皇后']

總結

列表的新增刪改等操作難度較低,在for迴圈操作中,i變數的變化和迴圈所需的列表變化有可能產生程式表面上的合理性,但會導致迴圈結果錯誤。