python基礎,字典,集合,控制語句

一,字典
1,定義:字典爲鍵值對的無序可變序列,分爲鍵對象與值對象。其中,鍵對象爲不可變數據(整數,浮點數,字符串,元組),鍵不可重複。
提醒:在列表中,我們根據下標數字來找對應的對象,在字典中我們通過鍵尋找值

2,字典的創建
(1),{}或者dict()創建。如下:

a={'name':'lhy','age':18}
>>> a
{'name': 'lhy', 'age': 18}
>>> b=dict(name='lhy',age=18)
>>> b
{'name': 'lhy', 'age': 18}
>>> c=dict([('name','lhy'),('age',18)])
>>> c
{'name': 'lhy', 'age': 18}

注意:第二種方法中,鍵不需要交雙引號。
(2)zip()函數建立
如下:

 d=[1,2,3]
>>> e=[4,5,6]
>>> f=dict(zip(d,e))
>>> f
{1: 4, 2: 5, 3: 6}
>>> 

注:zip方法用來生成元組,這裏是將元組轉化爲字典,類似於上面的第三種方法
(3)通過fromkeys()創建值爲空的字典

q=dict.fromkeys([1,2,3])
>>> q
{1: None, 2: None, 3: None}

3,字典的訪問
(1)直接訪問:a[鍵]
(2)get()
(3)列出所有的鍵值對:a.items()
列出所有的鍵:a.keys()
列出所有的值:a.values()
(4)len()鍵值對個數
(5) 檢測一個鍵是否存在。in
代碼 如下:

 a
{'name': 'lhy', 'age': 18}
>>> a['name']
'lhy'
>>> a.get('name')
'lhy'
>>> a.get('1')
>>> print(a.get('1'))
None
>>> a.items()
dict_items([('name', 'lhy'), ('age', 18)])
>>> a.keys()
dict_keys(['name', 'age'])
>>> a.values()
dict_values(['lhy', 18])
>>> len(a)
2
>>> 'name'in a
True
>>> '1'in a
False
>>> 

4,字典元素的增加修改和刪除
(1)直接添加,若鍵已存在則覆蓋舊的鍵
(2)用update()將兩個字典合併爲一個
(3)del()刪除指定鍵值對
(4)clear()刪除所有鍵值對
(5)pop()刪除指定鍵值對,並返回對應值對象
(6)popitem()隨機刪除鍵值對並返回(因爲字典無序,所以隨機刪除)
代碼如下:

> a
{'name': 'lhy', 'age': 18}
>>> b
{'name': 'lll', 'x': '2'}
>>> a.update(b)
>>> a
{'name': 'lll', 'age': 18, 'x': '2'}
>>> a['c']='3'
>>> a
{'name': 'lll', 'age': 18, 'x': '2', 'c': '3'}
>>> del(a['c'])
>>> a
{'name': 'lll', 'age': 18, 'x': '2'}
>>> a.pop('x')
'2'
>>> a.popitem()
('age', 18)
>>> a
{'name': 'lll'}

5,序列解包
代碼如下:

c
{'name': 'lhy', 'age': 18}
>>> a,b=c
>>> a
'name'
>>> b
'age'
>>> a,b=c.items()
>>> a
('name', 'lhy')
>>> b
('age', 18)
>>> a,b=c.values()
>>> a
'lhy'
>>> b
18
>>> 

6,字典的核心底層原理
注意:鍵必須可散列(數字,字符串,元組)
自定義對象需要支持(1)hash()函數
(2)通過__eq__()檢測相等性
(3)若a==b爲真,則hash(a)==hash(b)爲真
不要邊遍歷字典邊修改字典,因爲往字典中添加新鍵可能導致擴容,從而改變鍵值對次序。

二 ,集合
1,集合爲無序可變序列,元素不可重複。集合底層是字典實現的,集合中的元素即爲鍵對象。
2 ,創建與刪除
(1)用{}創建
(2)用add()添加
(3)用set()將其他可迭代對象轉化爲集合
(4)remove()刪除指定元素
(5)clear()清空整個集合
代碼如下:

 a={1,2,3}
>>> a.add(4)
>>> a
{1, 2, 3, 4}
>>> a.remove(4)
>>> a
{1, 2, 3}
>>> a.clear()
>>> a
set()
>>> 

3,集合相關操作
(1)並集:a|b 或a.union(b)
(2)交集:a&b 或a.intersection(b)
(3)差集:a-b 或a.difference(b)

三,選擇結構
1,單分支結構:if 條件表達式:
語句/語句塊
注意:input()輸出爲字符串。可加以int()轉化爲整數
條件表達式中視爲False的情況:0,0.0,none,False,空序列對象,空range對象,空迭代對象。其他情況均視爲True。並且其中不能有賦值=。

2,雙分支結構: if 條件表達式:
語句/語句塊
else:
語句塊2
三元條件運算符:條件爲真返回值 if 條件表達式 else 條件爲假返回值
注意,都用空格隔開。不加:

3,多分支選擇結構: if 條件表達式:
語句/語句塊
elif:
語句塊2

4,while循環要注意:內部語句中要可以改變條件表達式的 條件 ,不然構成死循環。

四,練習
1,輸入點的座標(x,y),判斷點在第幾象限。

x=int(input('請輸入x:'))
y=int(input('請輸入y:'))
if x==0 and y==0 :
    print('這個點爲原點')
else :
    if x==0 or y==0:
        print('這個點在座標軸')
    elif x>0 and y>0:
        print('這個點在第一象限')
    elif x>0 and y<0 :
        print('這個點在第四象限')
    elif x<0 and y>0 :
        print('這個點在第二象限')
    else:
        print('這個點在第三象限')

2,計算0到10數字的和

i=0
sum=0
while i<=10 :
    sum+=i
    i+=1
print(sum)

3,輸入一個成績,要求當小於60分爲E,60到70爲D,70到80爲C
80到90爲B,90到100爲A

score=int(input('請輸入一個0到100的成績:'))
while score<0 or score >100 :
    score = int(input(',輸入錯誤,請重新輸入一個0到100的成績:'))
degree=['A','B','C','D','E']
i=0
if (score//10)<6 :
    i=5
else :
    i=score//10
print('成績爲{0},等級爲{1}'.format(score,degree[9-i]))

該方法比較簡便,第二種用if選擇來實現

score=int(input('請輸入一個0到100的成績:'))
while score<0 or score >100 :
    score = int(input(',輸入錯誤,請重新輸入一個0到100的成績:'))
grade=''
if score>89 :
    grade='A'
elif score>79 :
    grade='B'
elif score>69:
    grade='C'
elif score>59 :
    grade='D'
else :
    grade='E'
print('成績爲{0},等級爲{1}'.format(score,grade))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章