Python學習筆記

0214jx發表於2024-07-18

變數和資料型別

變數

  • 變數名只能包含字母、數字和下劃線。變數名可以字母或下劃線打頭,但不能以數字打頭,例如,可將變數命名為message_1,但不能將其命名為1_message。
  • 變數名不能包含空格,但可使用下劃線來分隔其中的單詞。例如,變數名greeting_message可行,但變數名greeting message會引發錯誤。
  • 不要將Python關鍵字和函式名用作變數名,即不要使用Python保留用於特殊用途的單詞,如print (請參見附錄A.4)。
  • 變數名應既簡短又具有描述性。例如,name比n好,student_name比s_n好,name_length比length_of_persons_name好。
  • 慎用小寫字母l和大寫字母O,因為它們可能被人錯看成數字1和0。

練習

簡單訊息:將一條訊息儲存到變數中,再將其列印出來

massage = "Hello Python"
print(massage)
Hello Python

多條簡單訊息:將一條訊息儲存到變數中,將其列印出來;再將變數的值修改為一條新訊息,並將其列印出來。

massage = "Hello"
print(massage)
massage = "World"
print(massage)
Hello
World

字串

字串字串 就是一系列字元。在Python中,用引號括起的都是字串,其中的引號可以是單引號,也可以是雙引號

修改字串的大小寫

name = "ada lovelace"
 print(name.title())

合併字串

Python使用加號(+ )來合併字串。這種合併字串的方法稱為拼接拼接 。透過拼接,可使用儲存在變數中的資訊來建立完整的訊息

使用製表符或換行符來新增空白

在程式設計中,空白空白 泛指任何非列印字元,如空格、製表符和換行符。你可使用空白來組織輸出,以使其更易讀。

刪除空白

Python能夠找出字串開頭和末尾多餘的空白。要確保字串末尾沒有空白,可使用方法rstrip()

你還可以剔除字串開頭的空白,或同時剔除字串兩端的空白。為此,可分別使用方法lstrip() 和strip()

練習

個性化訊息:將使用者的姓名存到一個變數中,並向該使用者顯示一條訊息。顯示的訊息應非常簡單,如“Hello Eric, would you like to learn some Python today?”。

name = "ada lovelace"
print("Hello " + name.title()  + " , would you like to learn some Python today?")  
Hello Ada Lovelace , would you like to learn some Python today?

調整名字的大小寫:將一個人名儲存到一個變數中,再以小寫、大寫和首字母大寫的方式顯示這個人名

name = "ada lovelace"
print(name.upper())
print(name.lower())
print(name.title())
ADA LOVELACE
ada lovelace
Ada Lovelace

剔除人名中的空白:剔除人名中的空白: 儲存一個人名,並在其開頭和末尾都包含一些空白字元。務必至少使用字元組合"\t" 和"\n" 各一次。
列印這個人名,以顯示其開頭和末尾的空白。然後,分別使用剔除函式lstrip() 、rstrip() 和strip() 對人名進行處理,並將結果列印出來。

name = " alsa  \tLili    Blue     \n"
print(name)
print(name.lstrip())
print(name.rstrip())
print(name.strip())
 alsa  	Lili    Blue     

alsa  	Lili    Blue     

 alsa  	Lili    Blue
alsa  	Lili    Blue

數字

在Python中,可對整數執行加(+ )減(- )乘(* )除(/ )運算

Python將帶小數點的數字都稱為浮點數浮點數 。大多數程式語言都使用了這個術語,它指出了這樣一個事實:小數點可出現在數字的任何位置。

練習

最喜歡的數字: 將你最喜歡的數字儲存在一個變數中,再使用這個變數建立一條訊息,指出你最喜歡的數字,然後將這條訊息列印出來。 、

num = 7
print("my best number is " +  str(num))
my best number is 7

列表

列表 由一系列按特定順序排列的元素組成。你可以建立包含字母表中所有字母、數字0~9或所有家庭成員姓名的列表;也可以將任何東西加入列表中,其中的元素之間可以沒有 任何關係。鑑於列表通常包含多個元素,給列表指定一個表示複數的名稱(如letters 、digits 或names )是個不錯的主意

在Python中,用方括號([] )來表示列表,並用逗號來分隔其中的元素。

修改列表元素

修改列表元素的語法與訪問列表元素的語法類似。要修改列表元素,可指定列表名和要修改的元素的索引,再指定該元素的新值。

在列表中新增元素

在列表中新增新元素時,最簡單的方式是將元素附加到列表末尾。給列表附加元素時,它將新增到列表末尾。

方法append() 讓動態地建立列表易如反掌,例如,你可以先建立一個空列表,再使用一系列的append() 語句新增元素。

使用方法insert() 可在列表的任何位置新增新元素。為此,你需要指定新元素的索引和值。

在列表中刪除元素

如果知道要刪除的元素在列表中的位置,可使用del 語句。使用del 可刪除任何位置處的列表元素,條件是知道其索引。

方法pop() 可刪除列表末尾的元素,並讓你能夠接著使用它。術語彈出彈出 (pop)源自這樣的類比:列表就像一個棧,而刪除列表末尾的元素相當於彈出棧頂元素。

實際上,你可以使用pop() 來刪除列表中任何位置的元素,只需在括號中指定要刪除的元素的索引即可。

有時候,你不知道要從列表中刪除的值所處的位置。如果你只知道要刪除的元素的值,可使用方法remove() 。

練習

姓名: 將一些朋友的姓名儲存在一個列表中,並將其命名為names 。依次訪問該列表中的每個元素,從而將每個朋友的姓名都列印出來。

names = ['bababab', 'lili', 'oppop', 'whilesh', 'hahaha']
for item in names:
    print(item)
bababab
lili
oppop
whilesh
hahaha

問候語: 繼續使用練習3-1中的列表,但不列印每個朋友的姓名,而為每人列印一條訊息。每條訊息都包含相同的問候語,但抬頭為相應朋友的姓名。

names = ['bababab', 'lili', 'opop', 'jkjk']
for item in names:
    print(item + " , How are you?")
bababab , How are you?
lili , How are you?
opop , How are you?
jkjk , How are you?

自己的列表: 想想你喜歡的通勤方式,如騎摩托車或開汽車,並建立一個包含多種通勤方式的列表。根據該列表列印一系列有關這些通勤方式的宣言,如“I would like to own a Honda motorcycle”。

vehicles = ["bike", "car", "motorcycle", "bus", "on foot"]
for item in vehicles:
    print("I would like to go to school by  " + item )
I would like to go to school by  bike
I would like to go to school by  car
I would like to go to school by  motorcycle
I would like to go to school by  bus
I would like to go to school by  on foot

嘉賓名單 :如果你可以邀請任何人一起共進晚餐(無論是在世的還是故去的),你會邀請哪些人?請建立一個列表,其中包含至少3個你想邀請的人;然後,使用
這個列表列印訊息,邀請這些人來與你共進晚餐。

people = ["mom", "teacher", "frind", "lili", "zip", "mmoy"]
for item in people:
    print(item + " , Would you like to take dinna with me?")
mom , Would you like to take dinna with me?
teacher , Would you like to take dinna with me?
frind , Would you like to take dinna with me?
lili , Would you like to take dinna with me?
zip , Would you like to take dinna with me?
mmoy , Would you like to take dinna with me?

修改嘉賓名單 :你剛得知有位嘉賓無法赴約,因此需要另外邀請一位嘉賓。
以完成練習3-4時編寫的程式為基礎,在程式末尾新增一條print 語句,指出哪位嘉賓無法赴約。
修改嘉賓名單,將無法赴約的嘉賓的姓名替換為新邀請的嘉賓的姓名。
再次列印一系列訊息,向名單中的每位嘉賓發出邀請。

people = ["mom", "teacher", "frind", "lili", "zip", "mmoy"]
for item in people:
    print(item + " , Would you like to take dinna with me?")
print("lili could not take dinna with me")
people.remove("lili")
people.append("lucy")
for item in people:
    print(item + " , Would you like to take dinna with me?")
mom , Would you like to take dinna with me?
teacher , Would you like to take dinna with me?
frind , Would you like to take dinna with me?
lili , Would you like to take dinna with me?
zip , Would you like to take dinna with me?
mmoy , Would you like to take dinna with me?
lili could not take dinna with me
mom , Would you like to take dinna with me?
teacher , Would you like to take dinna with me?
frind , Would you like to take dinna with me?
zip , Would you like to take dinna with me?
mmoy , Would you like to take dinna with me?
lucy , Would you like to take dinna with me?

新增嘉賓 :你剛找到了一個更大的餐桌,可容納更多的嘉賓。請想想你還想邀請哪三位嘉賓。
以完成練習3-4或練習3-5時編寫的程式為基礎,在程式末尾新增一條print 語句,指出你找到了一個更大的餐桌。
使用insert() 將一位新嘉賓新增到名單開頭。
使用insert() 將另一位新嘉賓新增到名單中間。
使用append() 將最後一位新嘉賓新增到名單末尾。
列印一系列訊息,向名單中的每位嘉賓發出邀請。

people = ["lili", "popo", "wow", "gree", "moon", "ana"]
print("We have a big table!")
people.insert(0, "lucy")
people.append("xixi")
for item in people:
    print(item + " , Would you like to take dinna with me?")
We have a big table!
lucy , Would you like to take dinna with me?
lili , Would you like to take dinna with me?
popo , Would you like to take dinna with me?
wow , Would you like to take dinna with me?
gree , Would you like to take dinna with me?
moon , Would you like to take dinna with me?
ana , Would you like to take dinna with me?
xixi , Would you like to take dinna with me?

縮減名單 :你剛得知新購買的餐桌無法及時送達,因此只能邀請兩位嘉賓。
以完成練習3-6時編寫的程式為基礎,在程式末尾新增一行程式碼,列印一條你只能邀請兩位嘉賓共進晚餐的訊息。
使用pop() 不斷地刪除名單中的嘉賓,直到只有兩位嘉賓為止。每次從名單中彈出一位嘉賓時,都列印一條訊息,讓該嘉賓知悉你很抱歉,無法邀請他來共進
晚餐。
對於餘下的兩位嘉賓中的每一位,都列印一條訊息,指出他依然在受邀人之列。
使用del 將最後兩位嘉賓從名單中刪除,讓名單變成空的。列印該名單,核實程式結束時名單確實是空的。

print("aoh,I can only invite two people")
people = ["lili", "poop", "greeen"]
people_non = people.pop()
print("sorry," + people_non  + ", I could not take dinna with you")
for i in people:
    print(i + " , You are still in list.")
del people[1]
del people[0]
print(people)
aoh,I can only invite two people
sorry,greeen, I could not take dinna with you
lili , You are still in list.
poop , You are still in list.
[]

使用sort()對列表進行永久性排序

方法sort() 永久性地修改了列表元素的排列順序。按字母順序排列的,再也無法恢復到原來的排列順序

你還可以按與字母順序相反的順序排列列表元素,為此,只需向sort() 方法傳遞引數reverse=True 。

使用sorted()對列表進行臨時排序

要保留列表元素原來的排列順序,同時以特定的順序呈現它們,可使用函式sorted() 。函式sorted() 讓你能夠按特定順序顯示列表元素,同時不影響它們在列表中的原始排 列順序

確定列表的長度

使用函式len() 可快速獲悉列表的長度。

倒著列印列表

要反轉列表元素的排列順序,可使用方法reverse() 。注意,reverse() 不是指按與字母順序相反的順序排列列表元素,而只是反轉列表元素的排列順序

練習

放眼世界 :想出至少5個你渴望去旅遊的地方。
將這些地方儲存在一個列表中,並確保其中的元素不是按字母順序排列的。
按原始排列順序列印該列表。不要考慮輸出是否整潔的問題,只管列印原始Python列表。
使用sorted() 按字母順序列印這個列表,同時不要修改它。
再次列印該列表,核實排列順序未變。
使用sorted() 按與字母順序相反的順序列印這個列表,同時不要修改它。
再次列印該列表,核實排列順序未變。
使用reverse() 修改列表元素的排列順序。列印該列表,核實排列順序確實變了。
使用reverse() 再次修改列表元素的排列順序。列印該列表,核實已恢復到原來的排列順序。
使用sort() 修改該列表,使其元素按字母順序排列。列印該列表,核實排列順序確實變了。
使用sort() 修改該列表,使其元素按與字母順序相反的順序排列。列印該列表,核實排列順序確實變了

place = ["dalian", "datong", "beijin", "chengdu", "nanjin", "wulumuqi"]
print(place)
print(sorted(place))
print(place)
place.sort()
print(place)
place.sort(reverse=True)
print(place)
['dalian', 'datong', 'beijin', 'chengdu', 'nanjin', 'wulumuqi']
['beijin', 'chengdu', 'dalian', 'datong', 'nanjin', 'wulumuqi']
['dalian', 'datong', 'beijin', 'chengdu', 'nanjin', 'wulumuqi']
['beijin', 'chengdu', 'dalian', 'datong', 'nanjin', 'wulumuqi']
['wulumuqi', 'nanjin', 'datong', 'dalian', 'chengdu', 'beijin']

晚餐嘉賓 :在完成練習3-4~練習3-7時編寫的程式之一中,使用len() 列印一條訊息,指出你邀請了多少位嘉賓來與你共進晚餐。

people=["lili", "opop", "ghgh", "anna"]
print("I have invited "+  str(len(people)) + "  people")
I have invited 4  people

使用range()建立數值列表

Python函式range() 讓你能夠輕鬆地生成一系列的數字。

使用一個for 迴圈列印數字1~20(含)

for num in range(1, 21):
    print(num)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

建立一個列表,其中包含數字1~1 000 000,再使用min() 和max() 核實該列表確實是從1開始,到1 000 000結束的。另外,對這個列表
呼叫函式sum() ,看看Python將一百萬個數字相加需要多長時間。

nums = list(range(1, 1000001))
print(min(nums))
print(max(nums))
print(sum(nums))
1
1000000
500000500000

奇數 :透過給函式range() 指定第三個引數來建立一個列表,其中包含1~20的奇數;再使用一個for 迴圈將這些數字都列印出來。

nums = list(range(1, 21, 2))
for num in nums:
    print(num)
1
3
5
7
9
11
13
15
17
19

3的倍數:建立一個列表,其中包含3~30內能被3整除的數字;再使用一個for 迴圈將這個列表中的數字都列印出來。

nums = list(range(3, 31, 3))
for num in nums:
    print(num)
3
6
9
12
15
18
21
24
27
30

立方 :將同一個數字乘三次稱為立方。例如,在Python中,2的立方用2**3 表示。請建立一個列表,其中包含前10個整數(即1~10)的立方,使用列表解析生成一個列表,其中包含前10個整數的立方

nums = [num**3 for num in range(1, 11)]
print(nums)
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

切片的使用

要建立切片,可指定要使用的第一個元素和最後一個元素的索引。與函式range() 一樣,Python在到達你指定的第二個索引前面的元素後停止。要輸出列表中的前三個元素,需要指定索引0~3,這將輸出分別為0 、1 和2 的元素。

複製列表

要複製列表,可建立一個包含整個列表的切片,方法是同時省略起始索引和終止索引([:] )。這讓Python建立一個始於第一個元素,終止於最後一個元素的切片,即複製整個 列表。

練習

切片 :選擇你在本章編寫的一個程式,在末尾新增幾行程式碼,以完成如下任務。
列印訊息“The first three items in the list are:”,再使用切片來列印列表的前三個元素。
列印訊息“Three items from the middle of the list are:”,再使用切片來列印列表中間的三個元素。
列印訊息“The last three items in the list are:”,再使用切片來列印列表末尾的三個元素。

list = ["lili", "coco", "song", "vivi", "fgfg", "emm"]
print("The first three items in list are:  ")
print(list[:3])
print("Three items from the middle of the are:  ")
print(list[1:4])
print("The last three items in the list are:   ")
print(list[-3:])
The first three items in list are:  
['lili', 'coco', 'song']
Three items from the middle of the are:  
['coco', 'song', 'vivi']
The last three items in the list are:   
['vivi', 'fgfg', 'emm']

你的比薩和我的比薩 :在你為完成練習4-1而編寫的程式中,建立比薩列表的副本,並將其儲存到變數friend_pizzas 中,再完成如下任務。
在原來的比薩列表中新增一種比薩。
在列表friend_pizzas 中新增另一種比薩。
核實你有兩個不同的列表。為此,列印訊息“My favorite pizzas are:”,再使用一個for 迴圈來列印第一個列表;列印訊息“My friend's favorite pizzas are:”,再使用一
個for 迴圈來列印第二個列表。核實新增的比薩被新增到了正確的列表中。

friend_pizzas = ["apple", "food", "fish", "joke", "orange"]
my_pizzas = friend_pizzas[:]
friend_pizzas.append("beef")
print("My favorite pizzas are: ")
for food in my_pizzas:
    print(food)
print("My friends favorite pizzas are;")
for food in friend_pizzas:
    print(food)


My favorite pizzas are: 
apple
food
fish
joke
orange
My friends favorite pizzas are;
apple
food
fish
joke
orange
beef

元組

列表非常適合用於儲存在程式執行期間可能變化的資料集。列表是可以修改的,這對處理網站的使用者列表或遊戲中的角色列表至關重要。

然而,有時候你需要建立一系列不可修 改的元素,元組可以滿足這種需求。Python將不能修改的值稱為不可變的不可變的 ,而不可變的列表被稱為元組 。

定義元組

元組看起來猶如列表,但使用圓括號而不是方括號來標識。定義元組後,就可以使用索引來訪問其元素,就像訪問列表元素一樣。

練習

自助餐 :有一家自助式餐館,只提供五種簡單的食品。請想出五種簡單的食品,並將其儲存在一個元組中。
使用一個for 迴圈將該餐館提供的五種食品都列印出來。
嘗試修改其中的一個元素,核實Python確實會拒絕你這樣做。
餐館調整了選單,替換了它提供的其中兩種食品。請編寫一個這樣的程式碼塊:給元組變數賦值,並使用一個for 迴圈將新元組的每個元素都列印出來。

menu = ("pizza", "fish", "ice-cream", "hamburger", "apple")
# menu[0] = orange
menu = ("pizza", "fish", "ice-cream", "beef", "corn")
print("I have changed the menu")
for food in menu:
    print(food)
I have changed the menu
pizza
fish
ice-cream
beef
corn

if 語句

每條if 語句的核心都是一個值為True 或False 的表示式,這種表示式被稱為條件測試 條件測試 。

Python根據條件測試的值為True 還是False 來決定是否執行if 語句中的程式碼。如果 條件測試的值為True ,Python就執行緊跟在if 語句後面的程式碼;如果為False ,Python就忽略這些程式碼

if-elif-else結構

經常需要檢查超過兩個的情形,為此可使用Python提供的if-elif-else 結構。Python只執行if-elif-else 結構中的一個程式碼塊,它依次檢查每個條件測試,直到遇到透過 了的條件測試。測試透過後,Python將執行緊跟在它後面的程式碼,並跳過餘下的測試。

使用多個elif程式碼塊

忽略else程式碼塊

Python並不要求if-elif 結構後面必須有else 程式碼塊。在有些情況下,else 程式碼塊很有用;而在其他一些情況下,使用一條elif 語句來處理特定的情形更清晰

else 是一條包羅永珍的語句,只要不滿足任何if 或elif 中的條件測試,其中的程式碼就會執行,這可能會引入無效甚至惡意的資料。如果知道最終要測試的條件,應考慮使用 一個elif 程式碼塊來代替else 程式碼塊。這樣,你就可以肯定,僅當滿足相應的條件時,你的程式碼才會執行。

練習

編寫一系列條件測試;將每個測試以及你對其結果的預測和實際結果都列印出來。
詳細研究實際結果,直到你明白了它為何為True 或False 。
建立至少10個測試,且其中結果分別為True 和False 的測試都至少有5個。

car = "subaru"
print("Is car == 'subaru'? I predict True.")
print(car == 'subaru')
print("\nIs car == 'audi'? I predict False.")
print(car == 'audi')
Is car == 'subaru'? I predict True.
True

Is car == 'audi'? I predict False.
False

外星人顏色外星人顏色#1 :假設在遊戲中剛射殺了一個外星人,請建立一個名為alien_color 的變數,並將其設定為'green' 、'yellow' 或'red' 。
編寫一條if 語句,檢查外星人是否是綠色的;如果是,就列印一條訊息,指出玩家獲得了5個點。
編寫這個程式的兩個版本,在一個版本中上述測試透過了,而在另一個版本中未透過(未透過測試時沒有輸出)。

alien_color = "green"
if alien_color == "green":
    print("You have 5 poins")
You have 5 poins
alien_color = "red"
if alien_color =="green":
    print("You have 5 poins")

外星人顏色外星人顏色#2 :像練習5-3那樣設定外星人的顏色,並編寫一個if-else 結構。
如果外星人是綠色的,就列印一條訊息,指出玩家因射殺該外星人獲得了5個點。
如果外星人不是綠色的,就列印一條訊息,指出玩家獲得了10個點。
編寫這個程式的兩個版本,在一個版本中執行if 程式碼塊,而在另一個版本中執行else 程式碼塊。

alien_color  = "green"
if alien_color == "green":
    print("You have killed the alien_color,attained 5 points ")
else:
    print("You attain 10 points ")
    
You have killed the alien_color,attained 5 points 
alien_color = "red"
if alien_color == "green":
    print("abaaba")
else:
    print("You attain 10 points ")
You attain 10 points 

外星人顏色外星人顏色#3 :將練習5-4中的if-else 結構改為if-elif-else 結構。
如果外星人是綠色的,就列印一條訊息,指出玩家獲得了5個點。
如果外星人是黃色的,就列印一條訊息,指出玩家獲得了10個點。
如果外星人是紅色的,就列印一條訊息,指出玩家獲得了15個點。
編寫這個程式的三個版本,它們分別在外星人為綠色、黃色和紅色時列印一條訊息。

if alien_color == "green":
    print("You have attained 5 points")
elif alien_color  == "yellow":
    print("You have attained 10 points")
elif alien_color == "red":
    print("You have attained 15 points")

使用if語句處理列表(確定列表不是空的)

requested_toppings = []
if requested_toppings:
    for requested_topping in requested_toppings:
        print("Adding " + requested_topping + ".")
        print("\nFinished making your pizza!")
else:
    print("Are you sure you want a plain pizza?")

練習

以特殊方式跟管理員打招呼 :建立一個至少包含5個使用者名稱的列表,且其中一個使用者名稱為'admin' 。想象你要編寫程式碼,在每位使用者登入網站後都列印一條問
候訊息。遍歷使用者名稱列表,並向每位使用者列印一條問候訊息。
如果使用者名稱為'admin' ,就列印一條特殊的問候訊息,如“Helo admin, would you like to see a status report?”。
否則,列印一條普通的問候訊息,如“Helo Eric, thank you for logging in again”

users = ["admin", "admax", "ada", "aba", "bbc", "mmm"]
for user in users:
    if user == "admin":
        print("Hello admin, would you like to see a atatus report?")
    else:
        print("hello, " + user + "thank you for logging in again")
Hello admin, would you like to see a atatus report?
hello, admaxthank you for logging in again
hello, adathank you for logging in again
hello, abathank you for logging in again
hello, bbcthank you for logging in again
hello, mmmthank you for logging in again

處理沒有使用者的情形 :在為完成練習5-8編寫的程式中,新增一條if 語句,檢查使用者名稱列表是否為空。
如果為空,就列印訊息“We need to find some users!”。
刪除列表中的所有使用者名稱,確定將列印正確的訊息。

users = []
if users:
    for user in users:
        if user == "admin":
            print("Hello admin, would you like to see a atatus report?")
        else:
            print("hello, " + user + "thank you for logging in again")
else:
    print("We need to find some users!")

We need to find some users!

字典

在Python中,字典 是一系列鍵—值對 值對 。每個鍵 都與一個值相關聯,你可以使用鍵來訪問與之相關聯的值。

與鍵相關聯的值可以是數字、字串、列表乃至字典。事實上,可將 任何Python物件用作字典中的值。

在Python中,字典用放在花括號{} 中的一系列鍵—值對錶示

鍵—值 對是兩個相關聯的值。指定鍵時,Python將返回與之相關聯的值。鍵和值之間用冒號分隔,而鍵—值對之間用逗號分隔。

新增鍵--值對

字典是一種動態結構,可隨時在其中新增鍵—值對。要新增鍵—值對,可依次指定字典名、用方括號括起的鍵和相關聯的值

修改字典中的值

要修改字典中的值,可依次指定字典名、用方括號括起的鍵以及與該鍵相關聯的新值。

刪除鍵--值對

對於字典中不再需要的資訊,可使用del 語句將相應的鍵—值對徹底刪除。使用del 語句時,必須指定字典名和要刪除的鍵

練習

使用一個字典來儲存一個熟人的資訊,包括名、姓、年齡和居住的城市。該字典應包含鍵first_name 、last_name 、age 和city 。將儲存在該字典中
的每項資訊都列印出來。

man = {'first_name':'Green', 'last_name':'lili', 'age':18, 'city':'chongqing'}
print(man['first_name'])
print(man['last_name'])
print(man['age'])
print(man['city'])
Green
lili
18
chongqing

詞彙表 :Python字典可用於模擬現實生活中的字典,但為避免混淆,我們將後者稱為詞彙表。
想出你在前面學過的5個程式設計詞彙,將它們用作詞彙表中的鍵,並將它們的含義作為值儲存在詞彙表中。
以整潔的方式列印每個詞彙及其含義。為此,你可以先列印詞彙,在它後面加上一個冒號,再列印詞彙的含義;也可在一行列印詞彙,再使用換行符(\n )插入一個空行,然後在下一行以縮排的方式列印詞彙的含義

langevage = {"python":"len", "java":"str", "C":"printf", "go":"for"}
print("python :  " + langevage["python"])
print("java:  " + langevage["java"])
print("C:  " + langevage["C"])
print("go:  " + langevage["go"])
python :  len
java:  str
C:  printf
go:  for

遍歷字典中所有的鍵或值

在不需要使用字典中的值時,方法keys() 很有用。實際上,它返回一個列表,其中包含字典中的所有鍵

如果你感興趣的主要是字典包含的值,可使用方法values() ,它返回一個值列表,而不包含任何鍵。

為剔除重複項,可使用集 合(set)。集合類似於列表,但每個元素都必須是獨一無二的

在字典中儲存列表

在字典中儲存字典

練習

詞彙表2 :既然你知道了如何遍歷字典,現在請整理你為完成練習6-3而編寫的程式碼,將其中的一系列print 語句替換為一個遍歷字典中的鍵和值的迴圈。確定該迴圈正確無誤後,再在詞彙表中新增術語。當你再次執行這個程式時,這些新術語及其含義將自動包含在輸出中。

langevage = {"python":"len", "java":"str", "C":"printf", "go":"for"}
langevage.update({"temo":"help"})
for key, value in langevage.items():
    print(key)
    print(value)
python
len
java
str
C
printf
go
for
temo
help

使用者輸入與while迴圈

函式input()的工作原理

函式input() 讓程式暫停執行,等待使用者輸入一些文字。獲取使用者輸入後,Python將其儲存在一個變數中,以方便你使用。

函式input() 接受一個引數:即要向使用者顯示的提示提示 或說明,讓使用者知道該如何做。

練習

汽車租賃 :編寫一個程式,詢問使用者要租賃什麼樣的汽車,並列印一條訊息,如“Let me see if I can find you a Subaru”。


使用標誌

在要求很多條件都滿足才繼續執行的程式中,可定義一個變數,用於判斷整個程式是否處於活動狀態。這個變數被稱為標誌標誌 ,充當了程式的交通訊號燈。你可讓程式在標誌 為True 時繼續執行,並在任何事件導致標誌的值為False 時讓程式停止執行。這樣,在while 語句中就只需檢查一個條件——標誌的當前值是否為True ,並將所有測試(是 否發生了應將標誌設定為False 的事件)都放在其他地方,從而讓程式變得更為整潔。

使用break退出迴圈

在任何Python迴圈中都可使用break 語句。

在迴圈中使用continue

要返回到迴圈開頭,並根據條件測試結果決定是否繼續執行迴圈,可使用continue 語句

刪除包含特定值的所有列表元素

我們使用函式remove() 來刪除列表中的特定值,這之所以可行,是因為要刪除的值在列表中只出現了一次。

pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
 print(pets)
 while 'cat' in pets:
    pets.remove('cat')
 print(pets)
['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
 ['dog', 'dog', 'goldfish', 'rabbit']

使用使用者輸入來填充字典

函式

使用關鍵字def 來告訴Python你要定義一個函式。這是函式定義。最後,定義以冒號結尾

實參和形參

實參是 呼叫函式時傳遞給函式的資訊。我們呼叫函式時,將要讓函式使用的資訊放在括號內。

位置實參

呼叫函式時,Python必須將函式呼叫中的每個實參都關聯到函式定義中的一個形參。為此,最簡單的關聯方式是基於實參的順序。這種關聯方式被稱為位置實參位置實參

關鍵字實參

關鍵字實參關鍵字實參 是傳遞給函式的名稱—值對。你直接在實參中將名稱和值關聯起來了,因此向函式傳遞實參時不會混淆

返回值

函式並非總是直接顯示輸出,相反,它可以處理一些資料,並返回一個或一組值。函式返回的值被稱為返回值

在函式中修改列表

將列表傳遞給函式後,函式就可對其進行修改。在函式中對這個列表所做的任何修改都是永久性的,這讓你能夠高效地處理大量的資料。

將函式儲存在模組中

將函式儲存在被稱為模組模組 的獨立檔案中, 再將模組匯入匯入 到主程式中。import 語句允許在當前執行的程式檔案中使用模組中的程式碼。

匯入整個模組

要讓函式是可匯入的,得先建立模組。模組模組 是副檔名為.py的檔案,包含要匯入到程式中的程式碼。

匯入特定的函式

from module_name import function_name
from module_name import function_0, function_1, function_2

使用as給函式指定別名

import module_name as mn

匯入模組中的所有函式

使用星號(* )運算子可讓Python匯入模組中的所有函式

定義類

使用關鍵字 class 定義類,類名通常採用首字母大寫的命名規範。

class MyClass:
    # 類的屬性和方法定義

例項化物件

透過類建立物件的過程稱為例項化。

obj = MyClass()  # 建立 MyClass 類的一個物件

類的屬性

類的屬性是物件的資料或狀態,可以透過物件的例項訪問。

obj.attribute = value

建構函式 __init__

__init__ 是一個特殊的方法,用於初始化物件的屬性。

class MyClass:
    def __init__(self, attribute):
        self.attribute = attribute

類的方法

類的方法是與類相關聯的函式,可以操作物件的屬性。

class MyClass:
    def my_method(self):
        # 方法實現

繼承

透過繼承可以建立一個新類,新類繼承了現有類的屬性和方法,可以重寫或擴充套件基類的功能。

class ChildClass(ParentClass):
    # 子類的屬性和方法定義

多型

多型指的是不同類的物件可以使用相同的方法名,但具體執行的操作可以不同。

類的特殊方法: Python 中有一些特殊方法,以雙下劃線 __ 開頭和結尾,如 __init____str____repr__ 等,用於實現特定功能,如物件的初始化、字串表示等。

類的屬性和方法訪問控制: 可以使用訪問控制符號(publicprotectedprivate)來控制類的屬性和方法的訪問許可權,但 Python 中沒有明確的關鍵字或符號定義這些許可權,一般透過命名約定來實現。

類的封裝、繼承和多型是物件導向程式設計三大特性的體現,能夠幫助我們更好地組織程式碼和實現程式碼的複用。

檔案

讀取整個檔案

with open('pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents)

函式open() 返回一個表示檔案的物件。在這裡,open('pi_digits.txt') 返回一個表示檔案pi_digits.txt 的物件;Python將這個物件儲存在我們將 在後面使用的變數中。

關鍵字with 在不再需要訪問檔案後將其關閉。你只管開啟檔案,並在需要時使用它,Python自會在合適的時候自動將其關閉。

要讓Python開啟不與程式檔案位於同一個目錄中的檔案,需要提供檔案路徑檔案路徑 ,它讓Python到系統的特定位置 去查詢。

逐行讀取

要以每次一行的方式檢查檔案,可對檔案物件使用for 迴圈

建立一個包含檔案隔行內容的列表

使用關鍵字with 時,open() 返回的檔案物件只在with 程式碼塊內可用。如果要在with 程式碼塊外訪問檔案的內容,可在with 程式碼塊內將檔案的各行儲存在一個列表中,並在with 程式碼塊外使用該列表

方法readlines() 從檔案中讀取每一行,並將其儲存在一個列表中;

使用檔案的內容

讀取文字檔案時,Python將其中的所有文字都解讀為字串。如果你讀取的是數字,並要將其作為數值使用,就必須使用函式int() 將其轉換為整數,或使用 函式float() 將其轉換為浮點數。

寫入檔案

要將文字寫入檔案,你在呼叫open() 時需要提供另一個實參,告訴Python你要寫入開啟的檔案。

開啟檔案 時,可指定讀取模式讀取模式 ('r' )、寫入模式寫入模式 ('w' )、附加模式附加模式 ('a' )或讓你能夠讀取和寫入檔案的模式('r+' )。如果你省略了模式實參,Python將以預設的只讀模式打 開檔案。

如果你要寫入的檔案不存在,函式open() 將自動建立它。然而,以寫入('w' )模式開啟檔案時千萬要小心,因為如果指定的檔案已經存在,Python將在返回檔案物件前清空 該檔案。

寫入多行

函式write() 不會在你寫入的文字末尾新增換行符,因此如果你寫入多行時需要指定換行符

附加到檔案

如果你要給檔案新增內容,而不是覆蓋原有的內容,可以附加模式附加模式 開啟檔案。你以附加模式開啟檔案時,Python不會在返回檔案物件前清空檔案,而你寫入到檔案的行都將新增 到檔案末尾。如果指定的檔案不存在,Python將為你建立一個空檔案。

相關文章