第2章節python
一、python3中的input 等於python2中的rawinputgit
二、模塊初識api
模塊分爲標準庫和第三方庫app
標準庫:自帶的iphone
第三方庫:須要下載安裝編輯器
Sys模塊ide
文件的名字不能和導入的庫名字相同函數
Sys.path 打印路徑優化
Sys.argv 打印的是相對路徑編碼
Os模塊
與操做系統進行交互的,
Os.system(「dir」)調用後直接輸出上屏幕上,指令執行後返回0,非0表示不成功,不保存結果
Os.popen(「dir」).read()
爲何加read(),由於上指令表示臨時存放一個地址裏面,而後經過read()函數讀出來。
Os.mkdir(「 」)這是建立文件的指令。
三、解釋型語言和編譯型語言
由於編譯型語言在程序運行以前就已經對程序作出了「翻譯」,因此運行時就少掉了「翻譯」的過程,因此效率比較高。可是咱們也不能一律而論,一些解釋型語言也能夠經過解釋器的優化來對程序作出翻譯時對整個程序作出優化,從而在效率上接近編譯型語言。
此外,隨着Java等基於虛擬機的語言的興起,咱們又不能把語言純粹地分爲解釋型和編譯型兩種。
用Java來舉例,Java首先是經過編譯器編譯成字節碼文件,而後運行時經過解釋器給解釋成機器文件,因此咱們說Java是一種先編譯後解釋的語言。
四、python的運行過程
首先說兩個概念:PyCodeObject和pyc文件
咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編輯器真正編譯成的結果。
當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當python程序運行結束時,python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。
因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說的pyc文件實際上是PyCodeObject的一種持久化保存方式。
五、數據類型
1)數字 在python3中全是整型,沒有長整型的概念
2)float (浮點型)
浮點數用來處理實數,即帶有小數的數字。
3)複數
4)布爾型
真或假 1或0
5)字符串
六、三元運算
Result = 值1 if 條件 else 值2:
七、進制
每四個二進制表示一個十六進制
八、bytes類型
Python3中最重要的新特性大概是對文本和二進制數據做了更爲清晰的區分,文本老是Unicode,由str類型表示,二進制數據則由bytes類型表示。Python3不會以任意隱式的方式混用str和bytes,正是這使得二者的區分特別清晰,你不能拼接字符串和字節包,也沒法在字節包裏搜索字符串(反之亦然),也不能將字符串傳入參數爲字節包的函數(反之亦然)。
String 轉爲bytes 用encode(encoding='utf-8’) 在python3中不寫的話默認是utf-8
Bytes 轉爲string 用decode (encoding=‘utf-8’) 在python3中不寫的話默認是utf-8
九、列表操做
enumerate是將列表中的下標和列表中的元素對應起來,
a = ["es","s","we"] for i in enumerate(a): print(i)
輸出:
(0, 'es') (1, 's') (2, 'we')
a = ["es","s","we"] for index,item in enumerate(a): print(index,item)
輸出
0 es 1 s 2 we
1);列表的多位取
[a:b] a是起始位置,b是結束位置,可是a能取到,b不能取到,顧頭不顧尾。
[-1]表示最後一個
[a:]表示從a位置到最後結束
[:a]表示從開始到a位置結束
2)列表的添加
[ ].append(「 「)表示添加在後面
[ ].insert(a,」 」)表示把元素插入到a的位置
3)列表的更改
[ a]=」 「
4)列表的刪除
[ ].remove(a)直接刪除a
Del [a] 直接刪除位置a上的元素
[ ].pop(a)刪除位置a的元素,默認是最後一個
5)位置的查找
. [ ].index(「a」)找到a的位置
6)統計列表中重複的次數
[ ].count(「a」) 統計列表中a的個數
7) 列表的反轉
[ ].reverse( )
8) 列表的排序
[ ].sort( )
此時當列表複製給其它時,則兩者均會排序,如果經過分片複製 [ ] = [ : ] 則不會改變
9) 列表的擴展
[ ].extend( a)
把a合併,而後a還存在
10)列表的複製copy
在列表裏面中還有一個小列表時,存儲的是這個小列表的地址,因此,小列表改變,全部的都改變,可是大列表裏面的不會更改。
在列表中,如果a=b 是則兩者同步改變的,可是針對數字和字符串不會這樣
可是有個模塊copy,能夠深度拷貝,b=copy.deepcopy(a),即a改變b不會改變
[a:b:c]從a開始,結束爲b,步長爲c
淺拷貝 能夠根據淺copy建立聯合帳戶
import copy person = ["name",["saving"," "]] p1=copy.copy(person) p2=copy.copy(person) print(p1) print(p2) p1[0]="num1" p2[0]="num2" p1[1][1]="500" print(p1) print(p2)
結果:
['name', ['saving', ' ']] ['name', ['saving', ' ']] ['num1', ['saving', '500']] ['num2', ['saving', '500']]
11)len是取列表的長度
十、元組操做
元組其實跟列表差很少,也是存一組數,只不過它是一旦建立,便不能再修改,因此又叫只讀列表。
Name = (「dfg」,」sdf」,」dfgr」)
只有兩種方法:count和index
程序練習:
需求:
一、啓動程序後,讓用戶輸入工資,而後打印商品列表
二、容許用戶根據商品編號購買商品
三、用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒
四、可隨時退出,退出時,打印已購買商品和餘額
程序:
salary = input("請輸入工資:") shop_list = [] if salary.isdigit(): # 判斷是否爲數字 salary = int(salary) while True: product_list = [("iphone", 9000), ("huewei", 7000), ("book", 50), ("bicycle", 800)] for index, item in enumerate(product_list): #enumerate 是將列表中的元素和座標組成元組 print(index, item) choose = input("請輸入商品購買編號:") if choose.isdigit(): choose = int(choose) if choose < len(product_list) and choose >= 0: if salary >= product_list[choose][1]: print("選擇的商品爲:", product_list[choose]) shop_list.append(product_list[choose]) salary -= product_list[choose][1] print("你的餘額爲:\033[1;32;40m%d\033[0m" % salary) else: print("\033[0;31;46m你的餘額不足,請從新購買\033[0m") else: print("輸入的商品編號錯誤") elif choose == 'q': for i in shop_list: print(i) print("你的餘額爲:%d" % salary) exit() else: print("輸入錯誤,請從新輸入") else: print("輸入錯誤,請從新輸入")
十一、字符串操做
name = 「alex」
1)capitalize() 首字母大寫 print(name.capitalize())
2)count(「 「) 統計出現的字母的個數 print(name.count(「a」))
3)center() 把要打印的字符串放在中間,若是長度不夠的話,進行補充 print(name.center(50,」-「))
4) endswith( ) 判斷是否以什麼結尾,返回True或False ,print(name.endswith(「ex」))
5)expandtabs() 幫你把\t轉爲多少個空格
6)find() 是返回對應值得索引,和列表同樣,也是能夠切片的。print(name.find(「a」))
print(name[name.find(「a」):2])
7) format() 格式化整理數據
name = 「my name is {name},and I am {age} old」
print(name.format(name=」alex」,age=23))
8)format_map 也是格式化整理數據,只不過數據是以字典的形式
print(name.format_map({‘name’:’alex’,’age’:12})
9)isalnum() 判斷是否爲字符+阿拉伯數字
Print(‘ab123’.isalnum()) 返回爲True
10)isalpha() 判斷是否爲純英文字符,
Print(‘ab’.isalpha()) 返回爲True
11)isdecimal() 判斷是否爲十進制
Print(‘1A’.isdecimal()) 返回爲False
12)isdigit() 判斷是否爲整數
Print(‘1A’.isdigit()) 返回爲False
13)isidentifier() 判斷是否是一個合法的標識符
14)islower( ) 判斷是否是小寫
Print(‘a1A’.islower()) 返回False
15)isnumeric() 判斷是否是純數字,中間有小數點也不行
Print(’33.33’.isnumeric()) 返回False
16)isspace() 判斷是否是空格
17)istitle() 判斷是否是標題 即每一個單詞的首字母大寫
18)isprintable() 判斷是否能被打印 tty file, drive file
19)isupper() 判斷是否所有爲大寫
20)join() 鏈接
Print(‘+’.join([‘1’,’2’,’3’])) 輸出爲1+2+3
Print(‘’.join([‘1’,’2’,’3’])) 輸出爲123
21)ljust() (50,’*’) 保證長度爲50,長度不夠在末尾用*填充
22)rjust() (50,’*’) 保證長度爲50,長度不夠在前面用*補充
23)lower() 把大寫變成小寫
24)upper() 把小寫變成大寫
25)lstrip() 去掉左邊的空格和換行
26)rstrip() 去掉右邊的空格和換行
27)strip() 去掉全部的空格和換行
28)maketrans()
P = str.maketrans(「abcde」,」12345」)
Print(「alex li」.translate(P))
結果: 115x li 按照對應的編碼規則,將對應的翻譯爲定義的編碼規則
29)replace()替換,將舊的用新的替換 replace(‘l’,’L’)
replace(‘l’,’L’,1)表示只替換一個
30)rfind() 從左往右找,找到最右邊的那個值對象的座標
31)split() 把字符串按照默認空格分割成列表,其中split()裏面能夠傳遞參數,即按照傳遞的規則進行分割,其中傳遞的參數不會顯示。
32)splitlines() 按照換行符來進行分割
33)swapcase() 大寫換成小寫 小寫換成大寫
34)title() 把它變成title,即每一個單詞的首字母大寫
35)zfill() 在前面補充多少個0
十二、字典操做
字典就是一種 key-value的數據類型
語法:
info={
‘stu1101’,」d1」,
‘stu1102’,」d2」,
‘stu1103’,」d3」
}
字典的特性:
dict是無序的
key必須是惟一 的,so天生去重
1)刪除
del info 這是把字典都刪掉
del info[「stu1101」],指刪掉這個key和這個key對應的value
info,pop[「stu1101」],指刪掉這個key和這個key對應的value
info.popitem() 隨機刪掉一個key和這個key對應的value
2)查找
info[「stu1101」],這個就是直接返回key所對應的value,如果木有,則返回錯誤,因此用這種方法要肯定這個字典裏面含的有這個key
info.get(‘stu11021’),這個表示若是有這個key所對應的value,則直接返回,如果沒有這個key,則直接返回None。
3)判斷一個key是否存在這個字典中
print(‘stu1101’ in info) 如果存在,則返回True,如果不存在,則返回False
在python2中還有 info.has_key(「「stu1101」」),可是在python3中沒有這種方法。
4)多級字典嵌套及操做
5)其餘操做
info.values() 返回全部的values值
info.keys() 返回全部的keys值
info.setdefault(key,value) 先從info裏面找key,如有,則直接返回所有,若沒有,則從新建立一個鍵值對
info.update(b) 即把info和b兩個字典進行合併,要是二則有交叉的,則info進行更新。
info.items() 把一個字典轉爲一個列表
fromkeys() 初始化一個字典
print(dict.fromkeys([1,2,3],’testd’)
結果:{1:’testd’,2:’testd’,3:’testd’}
此辦法建立的字典相似於列表中的copy,即當字典裏面嵌套字典時,更改嵌套的字典時,則全部的都會更改,嵌套的字典外面的更改,不會改變。
6)字典的循環
方法1:
for key in info: print(key,info[key])
方法2:
for k,v in info.items(): #會先把dict轉成list,數據量大時莫用。 print(k,v)
三級菜單:
item = { "北京":{ "昌平","海淀","雄安" }, "河南":{"周口":{"商水","西華","鹿邑"}, "商丘":{"民權","夏邑","蘭考"}} } while True: for i in item: print(i) choose = input("--->選擇:") if choose in item: while True: for i in item[choose]: print(i) choose2 = input("--->選擇:") if choose2 in item[choose]: while True: for i in item[choose][choose2]: print(i) choose3 = input("--->選擇:") if choose3 == 'b': break if choose2 == 'b': break if choose == 'b': break
購物車修改:
用戶入口:
商品信息存在文件裏
已購商品,餘額記錄,信息存儲。
商家入口:
能夠添加商品,修改商品價格