1. 程式人生 > >Python學習筆記(從零開始到放棄)(Python 入門)第一部分

Python學習筆記(從零開始到放棄)(Python 入門)第一部分

目錄

前言

python基礎

變數

宣告變數

變數定義的規則:

九九乘法表實現

註釋:

Pycharm設定:

程式碼開頭自動生成資訊:

pycharm多行註釋快捷鍵ctrl+?

格式化輸出

佔位符

賬號密碼登陸器(for,while,break,continue):

列表和元組:

切片:

新增:

修改:

刪除:

列表方法:

count

extend

index

reverse

sort

clear

身份確認

元組

購物車:

字典

其他操作

排序

遍歷

字串

重複列印字串

判斷是否包含該內容

字串拼接

字串內建方法

三級選單

簡單版

進階版

編碼解碼

python3:

檔案操作

新增

游標

可讀可寫

修改

字典等型別存入檔案 

with

ubuntu

Python進階基礎

深淺拷貝

淺拷貝

 

深拷貝

集合set

hash

集合的建立

集合的修改

集合的刪除

判斷

關係測試

 



 

前言

自己學習python的學習記錄,自己學習python的歷程,有些東西知道就未記錄,程式碼都是自己手敲的,不斷學習,不斷記錄。

視訊地址:https://www.bilibili.com/video/av29247220/?p=58

或:https://www.bilibili.com/video/av13690129?p=59

參考:1. http://www.cnblogs.com/yuanchenqi/articles/5782764.html

2. http://www.cnblogs.com/resn/p/5776403.html

3. http://www.cnblogs.com/alex3714/articles/5465198.html

 

python基礎

變數

宣告變數

1

2

3

#_*_coding:utf-8_*_

 

name = "Alex Li"

上述程式碼聲明瞭一個變數,變數名為: name,變數name的值為:"Alex Li" 

變數定義的規則:

    • 變數名只能是 字母、數字或下劃線的任意組合
    • 變數名的第一個字元不能是數字
    • 以下關鍵字不能宣告為變數名
      ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
    • 變數名區分大小寫

九九乘法表實現

#九九乘法表
num = 1

while num <= 9:
    first = 1
    while first <= num:
        print(str(num)+"*"+str(first)+'='+str(num*first),end="\t")
        first += 1
    num += 1
    print()

註釋:

#

“”“。。。。。”“” :多行註釋,多行賦值

‘’‘。。。。。’‘’

msg = '''hello 1
hello 2
hello 3
'''

print(msg)

Pycharm設定:

程式碼開頭自動生成資訊:

pycharm多行註釋快捷鍵ctrl+?

格式化輸出

佔位符

%s    s=string

%d    d=digit

%f     f= float

name = input('Name:')
age = int(input('Age:'))
job = input('Job:')
salary = input('Salary:')

if salary.isdigit(): #長得像不像數字,比如200d,200
    salary = int(salary)
else:
    #print('must input digit')
    #exit()
    exit('must input digit')

msg = '''
----------------info of %s----------------
Name:%s
Age:%s
Job:%s
Salary:%s
You will be retired in %s years
------------------end----------------------
'''%(name,name,age,job,salary,65-age)
print(msg)

賬號密碼登陸器(for,while,break,continue):

_user = "alex"
_passwd = 'abc123'

passed_authentication = False #假,不成立

for i in range(3):
    username = input("username:")
    password = input('password:')

    if username == _user and password == _passwd:
        print("Welcom %s login..." %_user)
        passed_authentication = True
        break #中斷
    else:
        print('Invalid username or password')

if not passed_authentication:#只有在False時執行
    print('臭流氓')
_user = "alex"
_passwd = 'abc123'


for i in range(3):
    username = input("username:")
    password = input('password:')

    if username == _user and password == _passwd:
        print("Welcom %s login..." %_user)
        break #中斷
    else:
        print('Invalid username or password')
else:   #只要for迴圈正常執行完畢,就會執行else,若break打斷則不執行1
    print('臭流氓')
_user = "alex"
_passwd = 'abc123'



counter = 0
while counter < 3:
    username = input("username:")
    password = input('password:')

    if username == _user and password == _passwd:
        print("Welcom %s login..." %_user)
        break #中斷
    else:
        print('Invalid username or password')
    counter += 1
else:   #只要while迴圈正常執行完畢,就會執行else,若break打斷則不執行1
    print('臭流氓')
_user = "alex"
_passwd = 'abc123'


counter = 0
while counter < 3:
    username = input("username:")
    password = input('password:')

    if username == _user and password == _passwd:
        print("Welcom %s login..." %_user)
        break #中斷
    else:
        print('Invalid username or password')
    counter += 1
    if counter == 3:
        keep_going_choice = input('還試嗎【y/n】')
        if keep_going_choice == 'y':
            counter = 0
else:   #只要while迴圈正常執行完畢,就會執行else,若break打斷則不執行
    print('臭流氓')
exit_flag = False
for i in range(10):
    if i < 5:
        continue
    print(i)
    for j in range(10):
        print('layer2',j)
        if j == 6:
            exit_flag = True
            break
            
    if exit_flag:
        break

列表和元組:

切片:

a = ['1','2','3','4','5']

#切片
print(a[1:]) #一直取到最後一個值
print(a[1:-1]) #一直取到倒數第二個值
print(a[1:-1:1]) #從左往右,以步長為1取值
print(a[1::2]) #從左往右,以步長為2取值
print(a[3::-1]) #從右往左取,負號表示反向取值
print(a[-2::-1]) #從倒數第二個值開始反向取值

新增:

#新增
a.append('6') #預設新增到list的最後
print(a)

a.insert(1,'1.5')  #新增到指定位置,1是新增的位置(索引為1的位置)
print(a)

修改:

a = ['1','2','3','4','5']

#修改
a[1] = '二'
print(a)

a[1:3] = ['二','三']
print(a)

刪除:

#刪除
a.remove('2') #刪除指定的元素
a.remove(a[0])
print(a)

b = a.pop(1) #返回刪除的元素
print(a)
print(b)

del a[0]
print(a)

del a #刪除整個列表物件

列表方法:

count

#count
t = ['to','be','or','not','to','be' ].count('to') #計算元素出現的次數
print(t)

extend

#extend
a = [1,2,3]
b = [4,5,6]
a.extend(b) #把b新增到a
print(a)
print(b)

c = a + b #連線a,b生成新列表c

index

#index
t = ['to','be','or','not','to','be' ]
print(t.index('be')) #獲取元素的位置索引

first_be = t.index('be')
first_list = t[first_be+1:]
second_be = first_list.index('be')
print(first_be + second_be + 1) #取第二個be

reverse

#reverse
t = ['to','be','or','not','to','be' ] #倒置列表
t.reverse()
print(t)

sort

#sort
x = [4,6,2,7,3,8] #按Ascll碼從小到大排序
x.sort()
print(x)
x.sort(reverse=True) #按從大到小
print(x)

clear

清空列表,成空列表

身份確認

print(type(x) is list)

元組

與列表相比不可修改元組的內容。

#接收多個元素
a,b = [2,3]
print(a)
print(b)

購物車:

#購物車
product_list = [
    ('Mac',9000),
    ('kindle',800),
    ('tesla',90000),
    ('python book',105),
    ('bike',2000),
]



saving = input('please input your saving:')
shopping_car = []
if saving.isdigit():
    saving = int(saving)
    while True:
        for i,v in enumerate(product_list,1): #列舉,新增序號,並從1開始
            print(i,'>>>>>>>>>',v)

        choice = input('input your choice number[exit:q]:')
        #驗證輸入是否合法
        if choice.isdigit():
            choice = int(choice)
            if 0 < choice <= len(product_list):
                p_item = product_list[choice - 1]
                if p_item[1] < saving: #如果本金足夠買該商品
                    saving -= p_item[1] #本金減去商品要花費的錢
                    shopping_car.append(p_item) #將商品存入購物車
                else:
                    print('not sufficient funds,residue%s'%saving)
            else:
                print('there is no this number')
        elif choice == 'q':
            print('------------------you have buy---------------------')
            for i in shopping_car:
                print(i)
            print('the money is residued %s'%saving)
            break
        else:
            print('輸入不規範')

字典

鍵值對,無序儲存,鍵唯一。

#增
dic1 = {'name':'alex'}
dic1['age'] = 18
print(dic1)

dic1.setdefault('age',20) #檢查是否有age這個鍵了,若有則不修改
ret = dic1.setdefault('ae',20) #有age這個鍵了,則返回原age這個鍵對應的值,若沒有則怎加age鍵值對後,再返回age這個鍵對應的值
print(dic1)
print(ret)

#查 通過鍵去查對應的值
dic3 = {'age':18,'name':'alex','hobby':'girl'}
print(dic3['name'])
print(list(dic3.keys())) # 查所有的鍵
print(list(dic3.values())) #查所有的值
print(list(dic3.items())) #查所有鍵值對

#改
dic4 = {'age':18,'name':'alex','hobby':'girl'}
dic5 = {'1':'11','2':222,'age':20}
dic4.update(dic5) #用dic5的內容更新dic4,若dic4中不存在的就新增,若dic4中也有這個鍵,則覆蓋
print(dic4)

#刪
dic4 = {'age':18,'name':'alex','hobby':'girl'}
del dic4['name']
print(dic4)

dic4.clear() #清空整個字典,空字典
print(dic4)

print(dic4.pop('age')) #返回值
print(dic4)

a = dic4.popitem() #刪除最後一個鍵值對,字典是無序的所以也叫隨機刪除,以元組的形式返回刪除的鍵值對
print(a,dic4)

其他操作

dict6 = dict.fromkeys(['host1','host2','host3'],['test2','test2']) #將第二項引數同意賦值給第一項,第一項為鍵
print(dict6) #{'host1': ['test2', 'test2'], 'host2': ['test2', 'test2'], 'host3': ['test2', 'test2']}
dict6['host2'][1] = 'test3' #想修改host2對應的值的第二項
print(dict6) #{'host1': ['test2', 'test3'], 'host2': ['test2', 'test3'], 'host3': ['test2', 'test3']}全修改了

排序

#排序
dic7 = {'1':'111','2':'110','0':'000'}
print(sorted(dic7))#['0', '1', '2']給鍵排序
print(sorted(dic7.values()))#['000', '110', '111'] 給值排序
print(sorted(dic7.items())) #[('0', '000'), ('1', '111'), ('2', '110')]按鍵給鍵值對排序

遍歷

#遍歷
dic4 = {'age':18,'name':'alex','hobby':'girl'}
for i in dic4:
    print(i,dic4[i])  #age 18...

for i in dic4.items():
    print(i) #返回元組的形式('age', 18)...

for i,v in dic4.items():
    print(i,v) #age 18...

字串

也可以索引切片

重複列印字串

print('hello'*2)#重複列印 hellohello

判斷是否包含該內容

print('el' in 'hello') #判斷內容是否在字串中True,列表等也可以用in判斷

字串拼接

#字串拼接
a = '123'
b = 'abc'
c = a + b
print(c)#123abc

#join
c1 = ''.join([a,b])#拼接a和b字串
c2 = '*****'.join([a,b]) #用*****來拼接a和b字串
print(c1) #123abc
print(c2) #123*****abc

字串內建方法

#字串內建方法
st = 'hello kitty'
st1 = 'h\tello kitty'
st2 = 'hello kitty {name} is {age}'

print(st.count('1')) #統計元素個數
print(st.capitalize()) #首字母大寫
print(st.center(50,'-')) #列印50個字元,原字元居中,用-補足
print(st.endswith('y')) #判斷是否以y結尾
print(st.startswith('he')) #判斷是否以he開始
print(st1.expandtabs(tabsize=10)) #設定tab表示幾個空格
print(st.find('t')) #查詢到該元素第一個元素的位置,找不到返回-1
print(st2.format(name = 'alex',age = '37')) #hello kitty alex is 37
print(st2.format_map({'name':'alex','age':37}))#hello kitty alex is 37
print(st.index('t')) #查詢到該元素第一個元素的位置,找不到會直接報錯
print(st.isalnum()) #是否只包含數字和字母,漢字,有特殊字元(空格)返回False
print(st.isdigit()) #判斷是否是整形數字
print(st.isnumeric())#判斷是否是整形數字
print(st.isidentifier()) #判斷變數名是否非法
print(st.islower()) #判斷是否全小寫
print(st.isupper()) #判斷是否全大寫
print(st.isspace()) #判斷是否為空格
print('My Title'.istitle()) #判斷是否符合標題格式
print('My Title'.lower()) #大寫變小寫
print('My Title'.upper()) #小寫變大寫
print('My Title'.swapcase()) #大小寫反轉
print('My Title'.ljust(50,'*'))#My Title******************************************
print('My Title'.rjust(50,'*'))#******************************************My Title
print('    My Title'.strip())#去除開頭和末尾的空格與換行符,製表符
print('    My Title'.lstrip())#去左
print('    My Title'.rstrip())#去右
print('My Title'.replace('itle','lesson'))#替換
print('My Title Title'.replace('itle','lesson',1))#替換第一個
print('My Title Title'.rfind('t'))#找到右邊開始的第一個t的索引,11
print('My Title Title'.split(' '))#以空格分割字串,['My', 'Title', 'Title']
print('My Title Title'.rsplit('t',1)) #以右邊開始分割,分割1次['My Title Ti', 'le']
print('My title title'.title()) #轉換成標題格式,My Title Title

三級選單

簡單版

menu = {
    '北京':{
        '朝陽':{
            '國貿':{
                'CICC':{}
            },
            '望京':{
                '陌陌':{},
                '賓士':{}
            }
        }

    },
    '上海':{

    }
}

back_flag = False
exit_flag = False

while not back_flag and not exit_flag:
    for key in menu:
        print(key)
    choice = input('>>:').strip()
    if choice in menu:
        while not back_flag and not exit_flag:
            for key2 in menu[choice]:
                print(key2)
            choice2 = input('>>:').strip()
            if choice2 == 'b':
                back_flag = True
            if choice2 in menu[choice]:
                while not back_flag and not exit_flag:
                    for key3 in menu[choice][choice2]:
                        print(key3)
                    choice3 = input('>>:').strip()
                    if choice3 == 'b':
                        back_flag = True
                    if choice3 in menu[choice][choice2]:
                        while not back_flag and not exit_flag:
                            for key4 in menu[choice][choice2][choice3]:
                                print(key4)
                            choice4 = input('>>:').strip()
                            print('last level')
                            if choice4 == 'b':
                                back_flag = True
                            if choice4 =='q':
                                exit_flag = True
                        else:
                            back_flag = False
                else:
                    back_flag = False
        else:
            back_flag = False

進階版

#__author:"Shao Dongheng"
#date:2018/11/1

menu = {
    '北京':{
        '朝陽':{
            '國貿':{
                'CICC':{}
            },
            '望京':{
                '陌陌':{},
                '賓士':{}
            }
        }

    },
    '上海':{

    }
}

current_layer = menu #記錄前層,用於迴圈
#parent_layer = menu
parent_layers = [] #儲存父層

while True:
    for key in current_layer:
        print(key)
    choice = input('>>:').strip()
    if len(choice) == 0:continue
    if choice in current_layer:
        #parent_layer = current_layer #將改之前的current_layer賦給parent_layer
        parent_layers.append(current_layer)
        current_layer = current_layer[choice] #修改成子層

    elif choice == 'b':
        #current_layer = parent_layer #子層得到父層的值
        if parent_layers: #如果列表不為空
            current_layer = parent_layers.pop()
    else:
        print('無此項')

編碼解碼

python3:

預設是unicode。

encode 在編碼的同時,會把資料轉換成bytes型別;

decode 在解碼的同時,會把bytes型別轉換成字元。

檔案操作

小重山

昨夜寒蛩不住鳴。
驚回千里夢,已三更。
起來獨自繞階行。
人悄悄,簾外月朧明。
白首為功名,舊山松竹老,阻歸程。
欲將心事付瑤琴。
知音少,絃斷有誰聽。

data =  open('小重山','r',encoding='utf8').read()
f = open('小重山','r',encoding='utf8') #讀模式只能讀,寫模式只能寫
#data = f.read()
data = f.read(5)#取前5個字元
print(data)
f.close()
f = open('小重山','r',encoding='utf8') #讀模式只能讀,寫模式只能寫
print(f.readline())
print(f.readline())#會接著讀下一行
f.close()

f = open('小重山','r',encoding='utf8') #讀模式只能讀,寫模式只能寫
print(f.readlines())#讀整個檔案,返回列表['昨夜寒蛩不住鳴。\n', '驚回千里夢,已三更。\n', '起來獨自繞階行。\n',
            # '人悄悄,簾外月朧明。\n', '白首為功名,舊山松竹老,阻歸程。\n', '欲將心事付瑤琴。\n', '知音少,絃斷有誰聽。']
f.close()


f = open('小重山','r',encoding='utf8') #讀模式只能讀,寫模式只能寫
for i in f.readlines():
    print(i.strip()) #因為檔案中的每一句有一個預設換行,print也有一個自動換行,所以去掉預設換行
f.close()

f = open('小重山','r',encoding='utf8') #讀模式只能讀,寫模式只能寫
for i in f: #內部將f作為迭代器,用一個用一個,用一行取一行,但如果要用enumerate()只能是f.readlines
    print(i.strip()) #因為檔案中的每一句有一個預設換行,print也有一個自動換行,所以去掉預設換行
f.close()

f = open('小重山','w',encoding='utf8') #會清空檔案中的內容
f.write('hello world')
f.close()

f = open('小重山2','w',encoding='utf8') #建立了一個空檔案
print(f.fileno()) #返回一個整數,檔案描述符,每個檔案唯一
f.write('hello world')
f.write('alex\n')#hello worldalex直接跟在上一句後面
f.write('alex') #新增換行符才能換行
f.close()

新增

f = open('小重山2','a',encoding='utf8')#向檔案新增內容,不可讀
f.write('hello world')#直接跟在上一句後面
f.close()

游標

f = open('小重山','r',encoding='utf8')
print(f.tell())
print(f.read(4))
print(f.tell()) #游標的位置,字母是返回4,中文返回12

f.seek(3)#移動游標位置到3處,由於是中文,移動一個字元要移動3位元組的游標
print(f.tell())
print(f.read())#從游標位置3處開始讀,即第二個中文開始

f.close()

可讀可寫

#r+,w+,a+
f = open('小重山','r+',encoding='utf8') #可讀可寫,從頭開始讀
print(f.readline())
f.write('岳飛') #緊跟在檔案末尾新增內容
f.close()

f = open('小重山2','w+',encoding='utf8') #先清空,可讀可寫
print(f.readline())
f.write('岳飛')
print(f.tell()) #6,寫的時候,游標也移動了
print(f.readline())#游標在文字後面,所以讀不到東西
f.close()

f = open('小重山2','a+',encoding='utf8') #a是從檔案最後開始向檔案追加內容的,游標在最後,可讀可寫
f.write('岳飛')
print(f.readline())#也讀不到東西
f.close()

修改

修改檔案內容:
得先取出所有內容,在修改後存回去,因為write只會在檔案末尾新增內容
f_read = open('小重山2','r',encoding='utf8')
f_write = open('小重山3','w',encoding='utf8')

num = 0
for line in f_read:
    num += 1
    if num == 5:#修改第五行內容
        line = ''.join([line.strip(),'alex\n'])#在句尾新增alex
    f_write.write(line)

字典等型別存入檔案 

#字典等型別存入檔案

a = str({'beijing':{'1':111}}) #轉換成字串
print(type(a))
print(a)#輸出的是字串 '{'beijing':{'1':111}}'
a = eval(a)
print(type(a))
print(a) #輸出{'beijing':{'1':111}}

with

#with 不需要close
with open('log','r') as f:
    f.readline()

#同時管理多個檔案物件
with open('log1','r') as f_read,open('log2','w') as  f_write:
    for line in f_read:
        f_write.write(line)

ubuntu

以後補吧。先用什麼查什麼。

。。。

Python進階基礎

深淺拷貝

淺拷貝

s = [1,'alex','alvin']
print(s)

s1 = s #讓s1也指向該列表,並不是拷貝了資料
s1[0] = 2
print(s1) #[2, 'alex', 'alvin']
print(s) #s1的修改影響s,[2, 'alex', 'alvin']

s2 = s.copy() #淺拷貝
s2[0] = 3
print(s2)  #[3, 'alex', 'alvin']
print(s)  #s2的修改不影響S,[2, 'alex', 'alvin']

 

#淺拷貝
ss = [[1,2],'alex','alvin']
ss1 = ss.copy()
print(ss1)

ss1[0] = 'linux' #修改拷貝資料的第一層
print(ss1) #['linux', 'alex', 'alvin']
print(ss) #[[1, 2], 'alex', 'alvin'],淺拷貝沒改變原資料第一層的資料

ss = [[1,2],'alex','alvin']
ss1[0][1] = 3
print(ss1)#[[1, 3], 'alex', 'alvin']
print(ss) #[[1, 3], 'alex', 'alvin'],淺拷貝修改拷貝資料第二層,會使源資料第二層也被改變

深拷貝

import copy

a = [[1,2],'alex','alvin']
a1 = copy.copy(a) #淺拷貝,修改第二層的拷貝資料會改變原資料,(修改第一層不會)
a1[0][1] = 4
print(a) #[[1, 4], 'alex', 'alvin']
print(a1) #[[1, 4], 'alex', 'alvin']

a2 = copy.deepcopy(a) #深拷貝,修改拷貝資料不會改變原資料
a2[0][1] = 5
print(a) #[[1, 4], 'alex', 'alvin']
print(a2) #[[1, 5], 'alex', 'alvin']

集合set

hash

一個物件能被稱為 hashable , 它必須有個 hash 值,這個值在整個生命週期都不會變化,而且必須可以進行相等比較,所以一個物件可雜湊,它必須實現__hash__() 與 __eq__() 方法。

Python 的某些連結庫在內部需要使用hash值,例如往集合中新增物件時會用__hash__() 方法來獲取hash值,看它是否與集合中現有物件的hash值相同,如果相同則會捨去不加入,如果不同,則使用__eq__() 方法比較是否相等,以確定是否需要加入其中。

對於 Python 的內建型別來說,只要是建立之後無法修改的(immutable)型別都是 hashable 如字串,可變動的都是 unhashable的比如:列表、字典、集合,他們在改變值的同時卻沒有改變id,無法由地址定位值的唯一性,因而無法雜湊。我們自定義的類的例項物件預設也是可雜湊的(hashable),而hash值也就是它們的id()。

作者:三十六_
連結:https://www.jianshu.com/p/bc5195c8c9cb

集合的建立

#集合的建立
#無序,不重複
a = {'alex li','a'}
print(a) #{'a', 'alex li'}
print(type(a)) #<class 'set'>

s = set('alex li')
print(s) #{'x', ' ', 'e', 'a', 'l', 'i'} 去除了重複的l

s1 = ['alex','1']
ss = set(s1) #列表轉集合
print(ss) #{'1', 'alex'}

s2 = list(s1) #轉換成列表
print(s2) #['alex', '1']

li = [[1,2],2,'alex']
s3 = set(li) #TypeError: unhashable type: 'list',不可hash的元素不能轉集合
print(s3)

集合的修改

#修改集合
s1 = ['alex','1']
ss = set(s1) #列表轉集合
ss.add('uu') #新增一個元素
print(ss) #{'uu', 'alex', '1'}

ss.update('ops')
print(ss) #{'s', 'alex', 'p', 'uu', 'o', '1'} #將字串的每個元素當單獨元素新增

ss.update([12,'eee']) #新增多個
print(ss) #{'s', '1', 'p', 'uu', 'eee', 12, 'o', 'alex'}

集合的刪除

#刪除
s1 = ['alex','1','2']
ss = set(s1) #列表轉集合
ss.remove('2')
print(ss)#{'1', 'alex'}

s1 = ['alex','1','2']
ss = set(s1) #列表轉集合
ss.pop() #隨機的
print(ss)#{'1', 'alex'}

ss.clear()#空集合
print(ss)

del ss #刪除集合
print(ss)

判斷

#判斷子集
print(set('alex') == set('alexlexlex')) #True,相等價的
print(set('alex') < set('alexwwwww'))#True,是否包含
print(set('alex') < set('alex'))#False,要後者比前者元素多

關係測試

#關係測試
a = set([1,2,3,4,5])
b = set([4,5,6,7,8])

#交集
print(a.intersection(b)) #{4, 5}
print(a & b) #{4, 5}
#並集
print(a.union(b)) #{1, 2, 3, 4, 5, 6, 7, 8}
print(a | b) #{1, 2, 3, 4, 5, 6, 7, 8}
#差集
print(a.difference(b)) #{1, 2, 3}
print(a - b)
#對稱差集
print(a.symmetric_difference(b)) #{1, 2, 3, 6, 7, 8}除去交集元素
print(a ^ b)

#超集
print(a.issuperset(b)) #False,a是否是b的超集,是否包含b
#子集
print(a.issubset(b))#False,a是否是b的子集