Python學習手冊之控制結構(二)

清潔工老闆發表於2018-11-19

在上一篇文章中,我們介紹了Python的一些控制結構,現在我們繼續介紹剩下的 Python 控制結構。檢視上一篇文章請點選:https://www.cnblogs.com/dustman/p/9972078.html

列表(List)
列表是一種用於儲存一系列有序的集合,你可以想象你有一張購物清單,上面列出了需要購買的商品,在購物清單上你可能為每件物品都單獨列一行。
你需要把它放在方括號裡並讓每一項都用逗號隔開,使用列表中的索引來訪問列表中的特定項。

List = ["Hello","world","!"]
print(List[0])
print(List[1])
print(List[2])

執行結果:

>>>
Hello world !
>>>
索引的第一項為 0 不是 1,這和我們生活中實際情況有點不一樣。

下面程式碼輸出是什麼?

nums = [1,2,3,4,5]
print(nums[1])

執行結果:

>>>
2
>>>

一個空列表是用一個空的方括號建立的。

empty_list = []
print(empty_list)

執行結果:

>>>
[]
>>>
大多數情況下,逗號不會出現在列表中的最後一項的後面。當然在那裡防止一個逗號也是完全有效的語法。

通常列表符包括單種資料型別,但也可以包含幾種不同的資料型別,列表裡也能巢狀列表。

num = 3
things = ["string",0,[1,2,num],3.14]
print(things[1])
print(things[2])
print(things[2][1])

執行結果:

>>>
0
[1, 2, 3]
2
>>>
內嵌列表通常用於表示一個二位陣列,因為 Python 缺少在其它語言中用於這種作用的多維陣列。

下面程式碼是建立一個列表,並輸出其第三項。

List = [20,21,22]
print(List[2])

運算結果:

>>>
22
>>>

如果你試圖讀取或者寫入一個不存在的列表元素,你會得到一個 indexError 錯誤。
一些型別比如字串能夠被索引訪問,用索引方式字串的行為就像字串裡包含一個字元的列表。
對於其他不能索引的型別,例如整數,對其索引訪問對導致 TypeError。

str = "Hello world!"
print(str[3])、

執行結果:

>>>
l
>>>

判斷下面程式碼中哪一行會導致錯誤?

num = [1,2,3,[4],5]
print(num[0])
print(num[3][0])
print(num[5])

第四行程式碼出錯,導致報 IndexError 錯誤。
列表運算子
列表裡的列表元素可修改

num = [1,1,1,1]
num[2] = 14
print(num)

執行結果:

>>>
[1, 1, 14, 1]
>>>

加號 + 運算子可以把列表拼接在一起,星號 * 運算子可以將列表重複指定的次數。

num = [1,2,3]
print(num * 2)
print(num + [4,5,6])

執行結果:

>>>
[1, 2, 3, 1, 2, 3]
[1, 2, 3, 4, 5, 6]
>>>
列表和字串在很多方面的行為都是相似的,字串可以看作是不能更改的字元列表。

建立一個列表給其第二個元素重新賦值並列印整個列表。

num = [14,25,45]
num[1] = 22
print(num)

執行結果:

>>>
[14, 22, 45]
>>>

要檢查一個元素是不是在列表裡,可以使用 in 運算子。返回 True 表示該元素存在,否則返回 False

words = ["I","Like","Python","!"]
print("I" in words)
print("Python" in words)
print("Java" in words)

執行結果:

>>>
True
True
False
>>>
in 運算子還可以用於確定字串是否是另一個字串的子字串。

要檢查一個元素不在列表裡使用 not 運算子。

nums = [1,2,3]
print(not 4 in nums)
print(4 not in nums)
print(not 1 in nums)
print(1 not in nums)

執行結果:

>>>
True
True
False
False
>>>

檢查`z`是否在列表中。

nums = [`a`,`b`,`z`]
if `z` in nums:
 print(`Yes`)

執行結果:

>>>
Yes
>>>

列表方法
要在列表尾部新增一個元素可以使用列表的 append 方法。

nums = [1,2,3]
nums.append(4)
print(nums)

執行結果:

>>>
[1, 2, 3, 4]
>>>
列表後面加點再加 append 是因為它是列表類的一種方法,類方法將在後面的文章中詳細講解。

要獲取列表的長度,使用 len 函式。

nums = [1,2,3]
print(len(nums))

執行結果:

>>>
3
>>>
與 append 不同,len 是一個正常函式,而不是列表類的一個方法。

要想將物件插入列表還可以使用 insert 方法。不想 append 方法,它可以分配這個物件插入到哪個索引。

words = ["Python","fun"]
index = 1
words.insert(index, "is")
print(words)

執行結果:

>>>
[`Python`, `is`, `fun`]
>>>

index 方法被用在發現物件在哪個索引編號,返回從左到右首次發現的索引編號。如果列表裡沒有此物件做出 ValueError 錯誤。

words = [`a`,`b`,`c`,`d`,`e`]
print(words.index(`c`))
print(words.index(`a`))
print(words.index(`z`))

執行結果:

>>>
2
0
ValueError: `z` is not in list
>>>
列表還有一些更有用的函式的方法:
max(list):返回列表裡的最大值
min(list):返回列表裡的最小值
list.count(obj):統計某個元素在列表中出現的次數
list.remove(obj):移除列表中某個值的第一個匹配項
list.reverse():反向列表中元素
list.pop():移除列表中的最後一個元素,並且返回該元素的值
list.sort([func]):對列表進行排序

新增 `z` 到列表的尾部並列印列表的長度。

List = []
List.append(`z`)
print(len(List))

執行結果:

>>>
1
>>>

range函式
range 函式建立一個包含順序數字的物件,下面程式碼建立一個從 0 到小於 10 的列表。

nums = list(range(10))
print(nums)

執行結果:

>>>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>

上面程式碼呼叫了 list 方法強調型別轉換。因為 range 函式本身會建立 Range 物件,如果要將其作為一個列表使用,則必須將其轉換為列表。
range 函式接收一個引數時,它建立一個從 0 到小於引數的一個有序序列。
如果它接收兩個引數,它建立一個從第一個引數開始到小於第二個引數的一個序列。

nums = list(range(1,4))
print(nums)

print(range(10) == range(0,10))

執行結果:

>>>
[1, 2, 3]
True
>>>

range 函式預設每次產生有序序列演算法是對序列尾數加 1 操作,但是如果其有第三個引數,那麼產生序列但加的數就是以第三個引數為準。

nums = list(range(1,24,2))
print(nums)

執行結果:

>>>
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
>>>

for 迴圈
遍歷一個列表中所有元素可以通過一個 while 迴圈和一個計數器變數來完成。

words = ["hello","world","Python","Java"]
count = 0
max_index = len(words) - 1
while count <= max_index:
word = words[count]
print(word + "!")
count = count + 1

執行結果:

>>>
hello!
world!
Python!
Java!
>>>
上面的例項遍歷列表中的所有項,使用索引編號訪問它們,並新增感嘆句列印每一個索引項。

上面的用 while 的迴圈來遍歷列表有點太費筆墨了。
Python 提供了一個更簡單的方法,也是最常用的辦法就是 for 迴圈。

words = ["hello","world","Python","Java"]
for word in words:
print(word + "!")

執行結果:

>>>
hello!
world!
Python!
Java!
>>>
Python 裡的 for 迴圈像其他語言的 foreach 迴圈。

for 迴圈通常用於重複某些程式碼一定次數,下面是通過將 for 迴圈與 range 物件結合起來用。

for i in range(4):
print("hello!")

執行結果:

>>>
hello!
hello!
hello!
hello!
>>>
for 迴圈中使用 range 物件時,不需要呼叫 list 函式。因為不需要索引,所以不需要將它轉換成列表。

小專案:建立一個計算器
學習玩 Python 控制結構,我們用 Python 來建立一個簡單的程式:計算器,下面是程式的大概結構,我們需要完善它。
程式執行時,先列印程式接受的輸入,然後接受使用者輸入。

輸入 add 計算兩個數字相加
輸入 subtract 計算兩個數字相減
輸入 multiply 計算兩個數字相乘
輸入 divide 計算兩個數字相除
輸入 quit 退出程式
while True:
print("Make a choice")
print("Enter `add` to add two nums")
print("Enter `substact` to substact two nums")
print("Enter `multiply` to multiply two nums")
print("Enter `quit` to quit two nums")
user_input = input(":")
if user_input == "add":
 ...
elif user_input == `subtract`:
 ...
elif user_input == `multiply`:
 ...
elif user_input == `divide`:
 ...
elif user_input == `quit`:
 break
else:
 print("input error!")
程式用 if/elif 語句比較使用者輸入,無法匹配到選項時輸出 "input error",使用者輸入 "quit" 時用 break 語句跳出迴圈。

程式的下部分是獲取使用者希望使用的數字。下面的程式碼為計算器的加法部分,其他部分也須編寫類似的程式碼。

elif:
num1 = float(input("Enter a num:"))
num2 = float(input("Enter another num:"))

現在,當使用者輸入 “add” 程式提示使用者輸入兩個數字並儲存這兩個輸入到相應的變數裡。

 

實際上如果使用者在輸入時輸入非數字,此程式就會崩潰。我們將在後面的模組中討論這個問題。

最後,程式計算使用者輸入的值並顯示它。下面程式碼顯示最終的完成部分。

 

elif user_input == "add":
 num1 = float(input("Enter a num:"))
 num2 = float(input("Enter another num:"))
 result = str(num1 + num2)
 print("The answer is" + result)

現在我們有一個程式,提示使用者輸入,然後計算並列印使用者輸入的兩個數之和。

必須為其他分支編寫類似的程式碼(用於減法、乘法和除法)。輸出行 print 語句可以放在 if 語句之外,避免程式碼的重複。

 

 

 

“為著後來的回憶,小心著急地描繪你現在的圖畫!”

相關文章