淺談自學Python之路(day2)

今天的主要內容是:html

  • 標準庫
  • 數據類型知識
  • 數據運算
  • 三元運算
  • bytes類型
  • 字符串操做
  • 字典
  • 集合

標準庫

Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,先來介紹2個簡單的。python

sysgit

import sys
print(sys.path)#打印環境變量

輸出結果爲:api

 

os數組

import os
os.mkdir("dir_mk")

此代碼段含義爲,在當前目錄下新建一個文件夾,輸出結果爲:服務器

文件夾下出現了新建的dir_mk文件夾:app

 

import os
cmd_res = os.system("dir") #執行命令,但不保存結果

dir:查看當前路徑下的文件,但此時輸出結果有亂碼,能夠換爲:ide

cmd_res = os.popen("dir").read() #read方法把它取出來
print("-->",cmd_res) #把它輸出

這樣輸出結果以下:函數

簡單明瞭測試

  • 本身寫個模塊

就以以前寫的登陸程序爲例,將其複製更名爲login,而後在調用這個模塊

1 _username = 'lym'
2 _password = 'abc123'
3 username = input("username:")
4 #password = getpass.getpass("password:")
5 password = input("password:")
6 if _username == username and _password == password:
7     print("Welcome user {name} login...".format(name=username))
8 else:
9     print("Invalid username or password!")

而後調用

import login

結果以下

 

接着手動輸入用戶名密碼

 這樣一個簡單的建立模塊就建立好了,固然上面本身寫的login.py模塊只能在當前目錄下導入,若是想在系統的何何一個地方都使用怎麼辦呢? 此時你就要把這個login.py放到python全局環境變量目錄裏啦,基本通常都放在一個叫作  python/lib/site-packages  的文件夾目錄下,這個目錄在不一樣的OS裏放的位置不同,用   print(sys.path)  能夠查看python的環境變量列表

 

數據類型知識

1.數字

int(整型)

  在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即-2147483648~2147483647
  在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(長整型)
  跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
  注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
float(浮點型)
  浮點數用來處理實數,即帶有小數的數字。相似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
  複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。

注:Python中存在小數字池:-5 ~ 257

2.布爾值

  真或假

  0或1

3.字符串

"hello world"
 
字符串拼接:
  python中的字符串在C語言中體現爲是一個字符數組,每次建立字符串時候須要在內存中開闢一塊連續的空,而且一旦須要修改字符串的話,就須要再次開闢空間,+號每出現一次就會在內從中從新開闢一塊空間。
 
字符串格式化輸出
1 name = "lym"
2 print "i am %s " % name
3 #輸出: i am lym

PS: 字符串是 %s;整數 %d;浮點數%f

字符串經常使用功能:
  • 移除空白
  • 分割
  • 長度
  • 索引
  • 切片

4.列表(開發中最經常使用的其中一種)

 1 print("----------------------")
 2 names = "LiangFF Guoy LiuZY XinY"
 3 names = ["LiangFF","Guoy","LiuZY","XinY"]
 4 names.append("GouJ")#添加到最後
 5 names.insert(1,"GeD")#插入
 6 names[2] = "WuX"#替換
 7 
 8 print(names)
 9 print(names[0],names[1])
10 print(names[1:4])#切片,顧頭不顧尾,因此打印的值爲,第2,3,4個值,第5個值不打印(即names[4]),這就是顧頭不顧尾,用數學符號表示即[  )
11 print(names[-2:-1])#不能爲[-1:-2],由於順序是從左往右
12 print(names[-2:])
13 print(names[0:3])
14 print(names[:3])
15 print("----------------------")
16 #刪除
17 names.remove("WuX")
18 del names[2]#刪除第三個值
19 names.pop()#刪掉最後一個
20 print(names)
21 print("----------------------")
22 names.reverse()#反轉
23 print(names)
24 print("----------------------")
25 names.sort()#排序
26 print(names)
27 print("----------------------")
28 print(names.index("GeD"))#查詢值所在位置
29 print(names[names.index("GeD")])
30 print(names.count("GeD"))#查詢有幾個GeD值
31 print("----------------------")
32 names.clear()#清空
33 print(names)
34 print("----------------------")
35 names = ["LiangFF","Guoy","LiuZY","XinY"]
36 names2 = [1,2,3,4]
37 names.extend(names2)#names2合併到names中
38 print(names,names2)

基本操做:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 循環
  • 包含
列表中Copy的用法
 1 import copy
 2 
 3 names = ["LiangFF","Guoy","LiuZY",["jack","mike"],"XinY"]
 4 names2 = copy.deepcopy(names)   #names2 = copy.copy(names) 此爲淺copy
 5 print(names[0:-1:2])
 6 print(names[::2])#0或-1能夠省略
 7 # for i in names:
 8 #     for j in names2:
 9 #         print(i,j)
10 
11 print(names)
12 print(names2)
13 
14 names[2] = "劉澤宇"
15 print(names)
16 print(names2)
17 
18 names[3][0] = "JACK"
19 print(names)
20 print(names2)

輸出結果爲:

 

以上結果爲深度Copy的結果,即names2將names的值徹底copy下來,並且徹底不作改動,具體有什麼區別,上面的代碼段中有淺copy的代碼,你們能夠試一試看看有什麼區別,在這裏就不作演示了

但還要補充2個額外的淺copy寫法,代碼以下:

names2 = names[:]

或者是

names2 = list(names)

這兩種寫法,和淺copy   names2 = copy.copy(names)  是同樣的做用,你們有興趣能夠嘗試

 

其中

print(names[0:-1:2])

這段代碼意思是,輸出names中從的第一個值,到最後一個值,並且步數爲2(隔一個輸出一個值),也能夠寫爲

print(names[::2])#0或-1能夠省略

但第二種寫法   print(names[::2])   較好,由於若是值是五個的話,用第一種寫法   print(names[0:-1:2])  ,第五個是輸出不了的,能夠先看一下輸出的結果

第二種就能夠把第1,3,5的值都輸出,第一種則不行,若是值的個數爲6,即有6個值,那麼這兩種寫法都會輸出1,3,5這三個值,即上下輸出結果是同樣的,本質上這兩種寫法的含義是相同的,可能第二種寫法的排異性會好些,建議寫第二種

補充Copy的用法—建立聯合帳號

代碼以下:
 1 #淺Copy用處用來建立聯合帳號
 2 person = ["name",["saving",100]]
 3 
 4 p1 = person[:]
 5 p2 = person[:]
 6 
 7 p1[0] = "lym"
 8 p2[0] = "ym"
 9 
10 p1[1][1]=50
11 
12 print(p1)
13 print(p2)

輸出結果爲:

當我修改了P1中第二個數組中的第二個數爲50時,輸出時,P2當中第二個數組的第二個數也變爲了50

 

五、元組(不可變列表)
 
元組其實跟列表差很少,也是存一組數,只不是它一旦建立,便不能再修改,因此又叫只讀列表
 
建立元組:
1 names = ('lff','ged')
2 names.append('guoy')
3 print(names)

結果是報錯的:

說明上面的代碼只是演示了爲何元組只能查不能添加

 它只有2個方法,一個是count,一個是index,完畢。

 

練習:寫出購物車程序

需求:

  1. 啓動程序後,讓用戶輸入工資,而後打印商品列表
  2. 容許用戶根據商品編號購買商品
  3. 用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒 
  4. 可隨時退出,退出時,打印已購買商品和餘額

 

  

六、字典(無序)
建立字典:
1 person = {"name": "mr.wu", 'age': 18}
2 3 person = dict({"name": "mr.wu", 'age': 18})

經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度

 

數據運算

  • 首先舉個簡單的例子 4 +5 = 9 。 例子中,45 被稱爲操做數,"+" 稱爲運算符。
算數運算:

 

比較運算:

 

賦值運算:

 

邏輯運算:

 

成員運算:

 

身份運算:

 

位運算:

 

運算符優先級:

 

 三元運算

1 a = 10
2 b = 5
3 c = 4
4 d = a if a > b else c
5 print("d =",d)

輸出結果爲:

若是條件爲真:d = a
若是條件爲假:d = c

 

 bytes類型

 

1 msg = "我愛你"
2 print(msg)
3 print(msg.encode(encoding = "utf-8"))#字符串轉成byte類型
4 print(msg.encode(encoding = "utf-8").decode(encoding="utf-8"))#再轉回來

 

 輸出結果爲:

 

 字符串操做

  •  特性:不可修改
下面總結了全部字符串用到的方法:
 1 #!/usr/bin/env.python
 2 # -*- coding: utf-8 -*-
 3 """
 4 -------------------------------------------------
 5  File Name:  string
 6  Description :
 7  Author :  lym
 8  date:   2018/2/27
 9 -------------------------------------------------
10  Change Activity:
11      2018/2/27:
12 -------------------------------------------------
13 """
14 __author__ = 'lym'
15 
16 name = "lym is a good boy"
17 print(name.capitalize())#首字母大寫
18 print(name.count("l"))#統計l出現次數
19 print(name.casefold())#大寫所有變小寫
20 print(name.center(50,"-"))#輸出輸出 '---------------------lym----------------------'
21 print(name.encode())#將字符串編碼成bytes格式
22 print(name.endswith("m"))#判斷字符串是否以m結尾
23 print( "lym\tlff".expandtabs(10))#輸出"lym       lff", 將\t轉換成多長的空格
24 print(name.find('a'))#查找m,找到返回其索引,找不到返回-1
25 print(name[name.find('a'):])#字符串切片 輸出 a good boy
26 
27 name = "my name is {name},and i am {age} years old"
28 print(name.format(name = "lym",age = 22)) #格式化輸出,可參考Day1格式化輸出內容
29 print(name.format_map({'name':'lym','age':22}))#字典
30 print('ab123'.isalnum())#包含全部的英文字符+阿拉伯數字 返回True
31 print('ab123\f'.isalnum())#如有特殊字符則返回False
32 print('abc'.isalpha())#包含全部的英文,包括大寫英文
33 print('1A'.isalpha())#十進制返回True,其餘返回False
34 print('12'.isdigit())#是否是一個整數
35 print('a123'.isidentifier())#判斷是否爲一個合法的標識符,若開頭爲數字,則返回False
36 print('A23'.islower())#判斷首字母是否爲小寫,若爲小寫則返回True
37 print('A23'.isnumeric())#是否只有數字在裏面,如果則返回True
38 print('A23'.isspace())#是不是一個空格
39 print('My Name Is Lym'.istitle())#每一個單詞開頭是否爲大寫,如果則返回True
40 print('My Name Is Lym'.isprintable())#是否是能夠打印的,好比 ttf.file,drive file是不可打印的,用途較少
41 print('My Name Is Lym'.isupper())#是否都爲大寫,如果則返回True
42 print('My Name Is Lym'.join("=="))
43 print('+'.join(['1','2','3','4']))
44 print(name.ljust(50,'*'))#內容加在‘*‘左邊
45 print(name.rjust(50,'~'))#內容加在‘~’右邊
46 print('Lym'.lower())
47 print('Lym'.upper())
48 print('\nLym\n'.lstrip())#去除左邊的空格
49 print('----------')
50 print('\nLym\n'.rstrip())#去除右邊的空格
51 print('----------')
52 print('\nLym\n'.strip())#左右空格都去掉
53 print('----------')
54 print('Lym'.strip())
55 
56 p = str.maketrans("abcdefli",'123$@456')
57 print("yiming liang".translate(p) )
58 
59 print('yiming liang'.replace('l','L',1))#替換
60 print('yiming liang'.rfind('l'))#找從左往右數最右邊的l的索引值
61 print('1+2+3+4'.split('+'))#把字符串按照+號分紅一個列表,+號能夠用其字符串中的任意值代替,就按你代替的值來分
62 print('1+2\n+3+4'.splitlines())#按換行來分
63 print('yiming LIAng'.swapcase())#大小寫反轉
64 print('yiming liang'.title())#每一個單詞開頭字幕大寫
65 print('yiming liang'.zfill(50))#在最前面加50個0
66 
67 print( '---')

 

 字典

 字典一種key - value 的數據類型,使用就像咱們上學用的字典,經過筆劃、字母來查對應頁的詳細內容。
 
 1 #key-value  鍵—值
 2 info = {
 3     '204': "ym",
 4     '205': "zq",
 5     '206': "aq",
 6 }
 7 print(info)
 8 #字典是無序的,字典不須要下標,經過key查找
 9 print(info["204"])
10 
11 info["204"]="lp"#若是存在,則將204裏的值ym替換爲lp
12 print(info)
13 info["207"]="zr"#若是字典中不存在207,則添加一個新的
14 print(info)
15 
16 #delete
17 del info["207"]#刪除207
18 print(info)
19 
20 info.pop("205")#刪除205
21 print(info)
22 info.popitem()#隨便刪一個
23 print(info)
24 #--------------------查-----------------------------
25 info = {
26     '204': "ym",
27     '205': "zq",
28     '206': "aq",
29 }
30 print(info.get("205"))
31 print('204' in info)#info.has_key("205") 這個在py2.x  py3裏沒有了
32 #--------------------update------------------------
33 info = {
34     '204': "ym",
35     '205': "zq",
36     '206': "aq",
37 }
38 b = {
39     '204':'haa',
40     1:3,
41     2:4
42 }
43 info.update(b)
44 print(info)
45 #合併兩個字典,有交叉就覆蓋,無交叉就建立 ;204 ym替換haa;1:3  2:4加入info
46 print(info.items())#字典轉爲列表
47 #--------------------初始化一個新的字典------------------------
48 c = dict.fromkeys([6,7,8],"asd")#儘可能別用
49 print(c)

字典的特性:

  • dict是無序的
  • key必須是惟一的
 多級字典:
 1 #!/usr/bin/env.python
 2 # -*- coding: utf-8 -*-
 3 """
 4 -------------------------------------------------
 5  File Name:  more_dictionary
 6  Description :
 7  Author :  lym
 8  date:   2018/3/2
 9 -------------------------------------------------
10  Change Activity:
11      2018/3/2:
12 -------------------------------------------------
13 """
14 __author__ = 'lym'
15 
16 #目錄
17 av_catalog = {
18     "歐美":{
19         "www.youporn.com": ["不少免費的,世界最大的","質量通常"],
20         "www.pornhub.com": ["不少免費的,也很大","質量比yourporn高點"],
21         "letmedothistoyou.com": ["可能是自拍,高質量圖片不少","資源很少,更新慢"],
22         "x-art.com":["質量很高,真的很高","所有收費,屌比請繞過"]
23     },
24     "日韓":{
25         "tokyo-hot":["質量怎樣不清楚,我的已經不喜歡日韓範了","據說是收費的"]
26     },
27     "大陸":{
28         "1024":["所有免費,真好,好人一輩子平安","服務器在國外,慢"]
29     }
30 }
31 av_catalog["大陸"]["1024"][1] = "啊哈哈哈哈哈"
32 
33 av_catalog.setdefault("臺灣",{"1025":["臺灣小姐姐美","美若天仙的臺灣小姐姐"]})#若是沒有臺灣,則添加臺灣,若是字典中有臺灣,則不變
34 
35 for k in av_catalog:
36     print(k,av_catalog[k])#打印 key ,value
37 print("--------------打印values的值-------------")
38 print(av_catalog.values())
39 print("--------------打印key的值-------------")
40 print(av_catalog.keys())

循環格式:

1 for k in av_catalog:
2     print(k,av_catalog[k])#打印 key ,value

另一種循環格式,先將字典轉成列表,在循環,不建議用:

b = {
    '204':'haa',
    1:3,
    2:4
}
for k in b:
    print(k,b[k])#建議用

for k,v in b.items():#不建議用
    print(k,v)

以上內容包含了字典中因此函數方法,包括增刪改查循環還有多級字典等,你們能夠把代碼拷貝到本身的編譯器中運行如下便可明白

 

集合

集合是一個無序的,不重複的數據組合,它的主要做用以下:

  • 去重,把一個列表變成集合,就自動去重了
  • 關係測試,測試兩組數據以前的交集、差集、並集等關係

集合常識:

 1 #!/usr/bin/env.python
 2 # -*- coding: utf-8 -*-
 3 """
 4 -------------------------------------------------
 5  File Name:  集合
 6  Description :
 7  Author :  lym
 8  date:   2018/3/5
 9 -------------------------------------------------
10  Change Activity:
11      2018/3/5:
12 -------------------------------------------------
13 """
14 __author__ = 'lym'
15 #集合也是無序的
16 list_1 = [1,4,6,8,6,9,2,3,4]
17 #變成集合  set  數據類型是集合<class 'set'>
18 list_1 = set(list_1)
19 
20 print(list_1,type(list_1))
21 
22 list_2 = set([2,6,88,0,6,7,3])
23 print(list_1,list_2)
24 
25 #list_1.intersection(list_2)--交集
26 print(list_1.intersection(list_2))
27 
28 #list_1.union(list_2)--並集
29 print(list_1.union(list_2))
30 
31 #list_1.difference(list_2)--差集 = 1裏有的2裏沒有的
32 print(list_1.difference(list_2))
33 #list_2.difference(list_1)--差集 = 2裏有的1裏沒有的
34 print(list_2.difference(list_1))
35 
36 #
37 list_3 = set([2,3,6])
38 print(list_3.issubset(list_2))
39 print(list_1.issuperset(list_3))
40 
41 #對稱差集,將兩個集合中互相沒有的取出=把交集去掉
42 print(list_1.symmetric_difference(list_2))
43 
44 print("這是一條分割線".center(50,'-'))
45 
46 list_4 = set([1,5,7])
47 print(list_3.isdisjoint(list_4))#3與4是否有交集,如有爲True,若無爲False

 

其餘知識:

s = set([3,5,9,10])      #建立一個數值集合  
  
t = set("Hello")         #建立一個惟一字符的集合  


a = t | s          # t 和 s的並集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(項在t中,但不在s中)  
  
d = t ^ s          # 對稱差集(項在t或s中,但不會同時出如今兩者中)  
  
   
  
基本操做:  
  
t.add('x')            # 添加一項  
  
s.update([10,37,42])  # 在s中添加多項  
  
   
  
使用remove()能夠刪除一項:  
  
t.remove('H')  
  
  
len(s)  
set 的長度  
  
x in s  
測試 x 是不是 s 的成員  
  
x not in s  
測試 x 是否不是 s 的成員  
  
s.issubset(t)  
s <= t  
測試是否 s 中的每個元素都在 t 中  
  
s.issuperset(t)  
s >= t  
測試是否 t 中的每個元素都在 s 中  
  
s.union(t)  
s | t  
返回一個新的 set 包含 s 和 t 中的每個元素  
  
s.intersection(t)  
s & t  
返回一個新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一個新的 set 包含 s 中有可是 t 中沒有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一個新的 set 包含 s 和 t 中不重複的元素  
  
s.copy()  
返回 set 「s」的一個淺複製

 

運用上方的知識,利用運算符將集合常識中代碼簡化:

 1 #!/usr/bin/env.python
 2 # -*- coding: utf-8 -*-
 3 """
 4 -------------------------------------------------
 5  File Name:  集合簡化
 6  Description :
 7  Author :  lym
 8  date:   2018/3/5
 9 -------------------------------------------------
10  Change Activity:
11      2018/3/5:
12 -------------------------------------------------
13 """
14 __author__ = 'lym'
15 
16 list_1 = set([1,4,6,8,6,9,2,3,46])
17 list_2 = set([2,6,88,0,6,7,3])
18 print(list_1)
19 print(list_2)
20 
21 #交集
22 print(list_1 & list_2)
23 #並集
24 print(list_1 | list_2)
25 #差集
26 print(list_1 - list_2)#在1不在2
27 print(list_2 - list_1)#在2不在1
28 #對稱差集
29 print(list_1 ^ list_2)
30 
31 print("這是一條分割線".center(50,'-'))
32 
33 #添加一項
34 list_1.add(666)
35 print(list_1)
36 #添加多項
37 list_1.update([68,89,99])
38 print(list_1)
39 #刪除
40 print(list_1.pop())
41 list_1.remove(46)#刪除一項
42 print(list_1)

 

以上就是本講的所有內容

 

歡迎你們多多交流

  • QQ:616581760
  • weibo:https://weibo.com/3010316791/profile?rightmod=1&wvr=6&mod=personinfo
  • zcool:http://www.zcool.com.cn/u/16265217
  • huke:https://huke88.com/teacher/17655.html
相關文章
相關標籤/搜索