Python學習筆記Day3

1.dict字典

1.1定義

字典是另一種可變容器模型,且可以存儲任意類型對象。

1.2創建

字典的每一個鍵值(key=>value)對用冒號(:)分割,每個鍵值對之間用逗號(,)分割,整個字典包括在花括號({})中,格式如下所示:

dict ={key1:value1,key2:value2}

注意:鍵必須是唯一的,但是值不一定。也就是說,值可以取任意類型,但是鍵必須是不可變類型,例如字符串,數字或元組。

給出三種創建元組的例子:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict1 = { 'abc': 456 };
dict2 = { 'abc': 123, 98.6: 37 };

1.3字典方法

1.3.1訪問字典裏的值

假設字典定義如下:

#!/usr/bin/python3
 
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}

訪問方法如下:

print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])

程序結果如下:

dict['Name']:  Runoob
dict['Age']:  7

1.3.2修改字典裏的值

向字典添加新內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對如下實例:

#!/usr/bin/python3
 
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
dict['Age'] = 8;               # 更新 Age
dict['School'] = 學習"  # 添加信息
 
 
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

程序輸出結果:

dict['Age']:  8
dict['School']:  學習

1.3.3刪除字典裏的元素

能刪單一的元素也能清空字典,清空只需一項操作。

顯示刪除一個字典用del命令,如下實例:

#!/usr/bin/python3
 
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
del dict['Name'] # 刪除鍵 'Name'
dict.clear()     # 清空字典
del dict         # 刪除字典
 
print ("dict['Age']: ", dict['Age'])
print ("dict['School']: ", dict['School'])

但這會引發一個異常,因爲用執行 del 操作後字典不再存在:

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    print ("dict['Age']: ", dict['Age'])
TypeError: 'type' object is not subscriptable

1.3.4字典鍵的特性

字典值可以是任何的 python 對象,既可以是標準的對象,也可以是用戶定義的,但鍵不行。

兩個重要的點需要記住:

(1)不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,後一個值會被記住,如下實例:

#!/usr/bin/python3
 
dict = {'Name': 'Runoob', 'Age': 7, 'Name': '紅色'}
 
print ("dict['Name']: ", dict['Name'])

程序輸出如下:

dict['Name']:  紅色

(2)鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行,如下實例:

#!/usr/bin/python3
 
dict = {['Name']: 'Runoob', 'Age': 7}
 
print ("dict['Name']: ", dict['Name'])

程序輸出如下:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    dict = {['Name']: 'Runoob', 'Age': 7}
TypeError: unhashable type: 'list'

1.3.5字典內置函數&方法

(1)Python字典包含了以下內置函數:

(2)Python字典包含了以下內置方法:

2集合

2.1定義

集合(set)是一個無序的不重複元素序列。

2.2創建方法

可以使用大括號 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因爲 { } 是用來創建一個空字典。

創建格式:

parame = {value01,value02,...}
或者
set(value)
>>>basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # 這裏演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket                 # 快速判斷元素是否在集合內
True
>>> 'crabgrass' in basket
False
 
>>> # 下面展示兩個集合間的運算.
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b                              # 不同時包含於a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

類似列表推導式,同樣集合支持集合推導式(Set comprehension):

>>>a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

2.3 集合的基本操作

2.3.1 添加元素

s.add( x )

將元素 x 添加到集合 s 中,如果元素已存在,則不進行任何操作。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.add("Facebook")
>>> print(thisset)
{'Taobao', 'Facebook', 'Google', 'Runoob'}

還有一個方法,也可以添加元素,且參數可以是列表,元組,字典等,語法格式如下:

s.update( x )

x 可以有多個,用逗號分開。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.update({1,3})
>>> print(thisset)
{1, 3, 'Google', 'Taobao', 'Runoob'}
>>> thisset.update([1,4],[5,6])  
>>> print(thisset)
{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}
>>>

2.3.2 移除元素

s.remove( x )

將元素 x 從集合 s 中移除,如果元素不存在,則會發生錯誤

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.remove("Taobao")
>>> print(thisset)
{'Google', 'Runoob'}
>>> thisset.remove("Facebook")   # 不存在會發生錯誤
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Facebook'
>>>

此外還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:

s.discard(x)
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.discard("Facebook")  # 不存在不會發生錯誤
>>> print(thisset)
{'Taobao', 'Google', 'Runoob'}

我們也可以設置隨機刪除集合中的一個元素,語法格式如下:

s.pop()
thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
x = thisset.pop()
 
print(x)

輸出如下(隨機刪除,所以可能咱們的結果不一樣):

Runoob

多次執行測試結果都不一樣。

然而在交互模式,pop 是刪除集合的第一個元素(排序後的集合的第一個元素)。

>>>thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
>>> thisset.pop()
'Facebook'
>>> print(thisset)
{'Google', 'Taobao', 'Runoob'}
>>>

2.3.3 計算集合元素個數

len(s)

計算集合 s 元素個數。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> len(thisset)
3

2.3.4 清空集合

s.clear()
>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> thisset.clear()
>>> print(thisset)
set()

2.3.5 判斷元素是否在集合中出現

x in s

判斷元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。

>>>thisset = set(("Google", "Runoob", "Taobao"))
>>> "Runoob" in thisset
True
>>> "Facebook" in thisset
False
>>>

2.3.6 集合內置方法完整列表

3 判斷語句

Python條件語句是通過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。

3.1 if語句

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3
  • 如果 "condition_1" 爲 True 將執行 "statement_block_1" 塊語句
  • 如果 "condition_1" 爲False,將判斷 "condition_2"
  • 如果"condition_2" 爲 True 將執行 "statement_block_2" 塊語句
  • 如果 "condition_2" 爲False,將執行"statement_block_3"塊語句

Python 中用 elif 代替了 else if,所以if語句的關鍵字爲:if – elif – else

注意:

  • 1、每個條件後面要使用冒號 :,表示接下來是滿足條件後要執行的語句塊。
  • 2、使用縮進來劃分語句塊,相同縮進數的語句在一起組成一個語句塊。
  • 3、在Python中沒有switch – case語句。
#!/usr/bin/python3
 
var1 = 100
if var1:
    print ("1 - if 表達式條件爲 true")
    print (var1)
 
var2 = 0
if var2:
    print ("2 - if 表達式條件爲 true")
    print (var2)
print ("Good bye!")

程序輸出爲:

1 - if 表達式條件爲 true
100
Good bye!

從結果可以看到由於變量 var2 爲 0(False),所以對應的 if 內的語句沒有執行。

補充:以下爲if中常用的操作運算符:

#!/usr/bin/python3
 
# 程序演示了 == 操作符
# 使用數字
print(5 == 6)
# 使用變量
x = 5
y = 8
print(x == y)

程序輸出爲:

False
False

3.2 if 嵌套

在嵌套 if 語句中,可以把 if...elif...else 結構放在另外一個 if...elif...else 結構中。

if 表達式1:
    語句
    if 表達式2:
        語句
    elif 表達式3:
        語句
    else:
        語句
elif 表達式4:
    語句
else:
    語句
# !/usr/bin/python3
 
num=int(input("輸入一個數字:"))
if num%2==0:
    if num%3==0:
        print ("你輸入的數字可以整除 2 和 3")
    else:
        print ("你輸入的數字可以整除 2,但不能整除 3")
else:
    if num%3==0:
        print ("你輸入的數字可以整除 3,但不能整除 2")
    else:
        print  ("你輸入的數字不能整除 2 和 3")

將以上程序保存到 test_if.py 文件中,執行後輸出結果爲:

$ python3 test.py 
輸入一個數字:6
你輸入的數字可以整除 2 和 3

4 三目表達式

Python 中沒有像 C 語言中一樣直接使用 x?a:b 這樣的三元表達式,但是它有兩種替代方法:

(1)方法一:

a if x else b

該程序含義爲:如果 x 爲 True,返回 a;否則返回 b

>>> 'True' if 2 > 1 else 'False'
'True'
>>> 'True' if 2 < 1 else 'False'
'False'
>>>

(2)方法二:

利用 and or 短路運算的特點

and 運算時,例如 a and b,如果 a 爲 False 就不再判斷b的值。

or運算時,例如 a or b,如果 a 爲 True 就不再判斷 b 的值。

假設表達式爲:x and a or b。如果 x 爲 True,會接着判斷 a,如果 a 等同True,就返回 a 的值。

如果 a 等同 False,就計算 b,返回 b 的值。如果你覺得有點繞,直接看下面的例子:

>>> 2 > 1 and 'True' or 'False'
'True'
>>> 2 < 1 and 'True' or 'False'
'False'

注意:但這種方法有個坑,如果 a 爲 "",即空串,對它作真假值判斷時會返回 False,與我們的假設不符。

>>> 2 > 1 and '' or 'False'
'False'

這裏本應該返‘’,但是返回False,與假設不符,這是坑的地方。

 

當然,機智的網友找到了修補的方法,那就是把 a 和 b 用列表包起來。因爲即使包含空串元素的列表,其表達式依然等同 True

上面的例子包裹後變成下面這樣:

>>> (2 > 1 and [''] or ['False'])[0]
''
>>> 2 > 1 and [''] or ['False']
['']

 

可以看到,這種方法很多餘,也很麻煩,構造了兩個列表不說,最後還得依賴下標運算把想要的值取出來。

所以推薦使用第一種方法。比較好理解,也沒有坑。

5 循環語句

Python中的循環語句有 for 和 while

5.1 While循環

5.1.1 一般形式

Python中while語句的一般形式:

while 判斷條件:
    語句

同樣需要注意冒號和縮進。另外,在Python中沒有do..while循環。

以下實例使用了 while 來計算 1 到 100 的總和:

#!/usr/bin/env python3
 
n = 100
 
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
 
print("1 到 %d 之和爲: %d" % (n,sum))

程序輸出如下:

1 到 100 之和爲: 5050

5.1.2 無限循環

我們可以通過設置條件表達式永遠不爲 false 來實現無限循環,實例如下:

#!/usr/bin/python3
 
var = 1
while var == 1 :  # 表達式永遠爲 true
   num = int(input("輸入一個數字  :"))
   print ("你輸入的數字是: ", num)
 
print ("Good bye!")

執行以上程序,輸出結果如下:

輸入一個數字  :5
你輸入的數字是:  5
輸入一個數字  :

你可以使用 CTRL+C 來退出當前的無限循環。

無限循環在服務器上客戶端的實時請求非常有用。

5.1.3 While循環使用else語句

在 while … else 在條件語句爲 false 時執行 else 的語句塊:

#!/usr/bin/python3
 
count = 0
while count < 5:
   print (count, " 小於 5")
   count = count + 1
else:
   print (count, " 大於或等於 5")

程序輸出爲:

0  小於 5
1  小於 5
2  小於 5
3  小於 5
4  小於 5
5  大於或等於 5

5.1.4 簡單語句組

類似 if 語句的語法,如果你的while循環體中只有一條語句,你可以將該語句與while寫在同一行中, 如下所示:

#!/usr/bin/python
 
flag = 1
 
while (flag): print ('歡迎訪問菜鳥教程!')
 
print ("Good bye!")

程序輸出如下:(可以使用Ctrl+c來結束循環)

歡迎訪問菜鳥教程!
歡迎訪問菜鳥教程!
歡迎訪問菜鳥教程!
歡迎訪問菜鳥教程!
歡迎訪問菜鳥教程!
……

5.2 for 循環

Python for循環可以遍歷任何序列的項目,如一個列表或者一個字符串。

5.2.1 一般形式

for <variable> in <sequence>:
    <statements>
else:
    <statements>

Python loop循環實例:

>>>languages = ["C", "C++", "Perl", "Python"] 
>>> for x in languages:
...     print (x)
... 
C
C++
Perl
Python
>>>

以下 for 實例中使用了 break 語句,break 語句用於跳出當前循環體:

#!/usr/bin/python3
 
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
    if site == "Runoob":
        print("菜鳥教程!")
        break
    print("循環數據 " + site)
else:
    print("沒有循環數據!")
print("完成循環!")

程序輸出如下:(在循環到 "Runoob"時會跳出循環體:)

循環數據 Baidu
循環數據 Google
菜鳥教程!
完成循環!

5.2.2 range()函數

如果你需要遍歷數字序列,可以使用內置range()函數。它會生成數列,例如:

>>>for i in range(5):
...     print(i)
...
0
1
2
3
4

你也可以使用range指定區間的值:

>>>for i in range(5,9) :
    print(i)
 
    
5
6
7
8
>>>

也可以使range以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做'步長'):

>>>for i in range(0, 10, 3) :
    print(i)
 
    
0
3
6
9
>>>

負數:

>>>for i in range(-10, -100, -30) :
    print(i)
 
    
-10
-40
-70
>>>

您可以結合range()和len()函數以遍歷一個序列的索引,如下所示:

>>>a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
>>> for i in range(len(a)):
...     print(i, a[i])
... 
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ
>>>

還可以使用range()函數來創建一個列表:

>>>list(range(5))
[0, 1, 2, 3, 4]
>>>

5.3 break和continue語句及循環中的else子句

5.3.1 break語句

break 語句可以跳出 for 和 while 的循環體。如果你從 for 或 while 循環中終止,任何對應的循環 else 塊將不執行。 實例如下:

#!/usr/bin/python3
 
for letter in 'Runoob':     # 第一個實例
   if letter == 'b':
      break
   print ('當前字母爲 :', letter)
  
var = 10                    # 第二個實例
while var > 0:              
   print ('當期變量值爲 :', var)
   var = var -1
   if var == 5:
      break
 
print ("Good bye!")

程序輸出如下:

當前字母爲 : R
當前字母爲 : u
當前字母爲 : n
當前字母爲 : o
當前字母爲 : o
當期變量值爲 : 10
當期變量值爲 : 9
當期變量值爲 : 8
當期變量值爲 : 7
當期變量值爲 : 6
Good bye!

注意:可以看到執行到 break 的那裏的if的條件並不輸入,也就是不輸出「5」和「b」。

5.3.2 continue 語句

continue語句被用來告訴Python跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環。

#!/usr/bin/python3
 
for letter in 'Runoob':     # 第一個實例
   if letter == 'o':        # 字母爲 o 時跳過輸出
      continue
   print ('當前字母 :', letter)
 
var = 10                    # 第二個實例
while var > 0:              
   var = var -1
   if var == 5:             # 變量爲 5 時跳過輸出
      continue
   print ('當前變量值 :', var)
print ("Good bye!")

程序輸出如下:

當前字母 : R
當前字母 : u
當前字母 : n
當前字母 : b
當前變量值 : 9
當前變量值 : 8
當前變量值 : 7
當前變量值 : 6
當前變量值 : 4
當前變量值 : 3
當前變量值 : 2
當前變量值 : 1
當前變量值 : 0
Good bye!

注意:continue的時候是,把條件中的那一個跳過,繼續循環其它,也就是把「b」和「5」跳過,繼續循環其它,break是遇到條件就跳出循環,這個是兩個不一樣的地方。

5.3.3 循環中的 else 語句

循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變爲 false (以while循環)導致循環終止時被執行,但循環被break終止時不執行。

如下實例用於查詢質數的循環例子:

#!/usr/bin/python3
 
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, '等於', x, '*', n//x)
            break
    else:
        # 循環中沒有找到元素
        print(n, ' 是質數')

程序輸出爲:

2  是質數
3  是質數
4 等於 2 * 2
5  是質數
6 等於 2 * 3
7  是質數
8 等於 2 * 4
9 等於 3 * 3

5.4 pass 語句

Python pass是空語句,是爲了保持程序結構的完整性。

pass 不做任何事情,一般用做佔位語句,如下實例

>>>while True:
...     pass  # 等待鍵盤中斷 (Ctrl+C)

最小的類:

>>>class MyEmptyClass:
...     pass

以下實例在字母爲 o 時 執行 pass 語句塊:

#!/usr/bin/python3
 
for letter in 'Runoob': 
   if letter == 'o':
      pass
      print ('執行 pass 塊')
   print ('當前字母 :', letter)
 
print ("Good bye!")

執行以上腳本輸出結果爲:

當前字母 : R
當前字母 : u
當前字母 : n
執行 pass 塊
當前字母 : o
執行 pass 塊
當前字母 : o
當前字母 : b
Good bye!

寫在最後:注意點比較多,用法也很多,還是多練習多看,好記性不如爛筆頭,慢慢來,什麼時候開始都不晚。

參考鏈接:

(1)http://www.runoob.com/python3/python3-loop.html

(2)https://blog.csdn.net/yilovexing/article/details/80571871