第二周-第02章節-Python3.5-模塊初識 G:\Python3.7.3\python.exe G:/practise/oldboy/day2/sys.py['G:/practise/oldboy/day2/sys.py'] 驅動器 G 中的捲沒有標簽。 捲的序列號是 C038-3181 G: ...
第二周-第02章節-Python3.5-模塊初識
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: sys.py
@time: 2019/04/16
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
#import guess
import os
import sys
#print(sys.path)
print(sys.argv) ###捕獲參數
cmd_res = os.system("dir") ##執行命令不保存結果
print(sys.path)
=========================================================
G:\Python3.7.3\python.exe G:/practise/oldboy/day2/sys.py
['G:/practise/oldboy/day2/sys.py']
驅動器 G 中的捲沒有標簽。
捲的序列號是 C038-3181
G:\practise\oldboy\day2 的目錄
2019/04/17 21:25 <DIR> .
2019/04/17 21:25 <DIR> ..
2019/04/17 20:52 274 checklist.py
2019/04/17 20:40 1,770 CPU.py
2019/04/17 20:43 897 disk.py
2019/04/17 20:54 930 mail.py
2019/04/17 20:39 1,263 memory.py
2019/04/17 20:22 3,314 monitor.py
2019/04/17 20:41 913 network.py
2019/04/17 21:22 <DIR> new_dir
2019/04/17 20:51 944 read_only.py
2019/04/17 21:25 491 sys.py
2019/04/17 20:52 <DIR> __pycache__
9 個文件 10,796 位元組
4 個目錄 84,762,398,720 可用位元組
['G:\\practise\\oldboy\\day2', 'G:\\practise\\oldboy', 'G:\\Python3.7.3\\python37.zip', 'G:\\Python3.7.3\\DLLs', 'G:\\Python3.7.3\\lib', 'G:\\Python3.7.3', 'G:\\Python3.7.3\\lib\\site-packages']
Process finished with exit code 0
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: sys.py
@time: 2019/04/16
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
import os
cmd_df=os.system("df -Th") ###不保存結果
print("===============================>",cmd_df)
=====================================================
[root@linux-node1 Python]# python argv.py
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 18G 2.1G 16G 12% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 120M 378M 25% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
0
==================分割線==============================
[root@linux-node1 Python]# cat argv.py
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: sys.py
@time: 2019/04/16
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
import os
cmd_df=os.popen("df -Th").read() ###不保存結果
print(cmd_df)
os.mkdir("TEST") ##創建同級目錄TEST
==============================================
[root@linux-node1 Python]# python argv.py
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 18G 2.1G 16G 12% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 120M 378M 25% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
第二周-第03章節-Python3.5-模塊初識2
註意:導入自定義模塊的時候,如果在同級目錄下,直接import model_name就可以了,如果沒有在同級目錄,直接扔到G:\Python3.7.3\Lib\site-packages 下麵即可。
第二周-第04章節-Python3.5-pyc是什麼
1. Python是一門解釋型語言?
我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。如果是解釋型語言,那麼生成的*.pyc文件是什麼呢?c應該是compiled的縮寫才對啊!
為了防止其他學習Python的人也被這句話誤解,那麼我們就在文中來澄清下這個問題,並且把一些基礎概念給理清。
2. 解釋型語言和編譯型語言
電腦是不能夠識別高級語言的,所以當我們運行一個高級語言程式的時候,就需要一個“翻譯機”來從事把高級語言轉變成電腦能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程式執行之前,先會通過編譯器對程式執行一個編譯的過程,把程式轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程式運行的時候,通過解釋器對程式逐行作出解釋,然後直接運行,最典型的例子是Ruby。
通過以上的例子,我們可以來總結一下解釋型語言和編譯型語言的優缺點,因為編譯型語言在程式運行之前就已經對程式做出了“翻譯”,所以在運行時就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解釋器的優化來在對程式做出翻譯時對整個程式做出優化,從而在效率上超過編譯型語言。
此外,隨著Java等基於虛擬機的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,Java首先是通過編譯器編譯成位元組碼文件,然後在運行時通過解釋器給解釋成機器文件。所以我們說Java是一種先編譯後解釋的語言。
3. Python到底是什麼
其實Python和Java/C#一樣,也是一門基於虛擬機的語言,我們先來從錶面上簡單地瞭解一下Python程式的運行過程吧。
當我們在命令行中輸入python hello.py時,其實是激活了Python的“解釋器”,告訴“解釋器”:你要開始工作了。可是在“解釋”之前,其實執行的第一項工作和Java一樣,是編譯。
熟悉Java的同學可以想一下我們在命令行中如何執行一個Java的程式:
javac hello.java
java hello
只是我們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也一樣,當我們執行python hello.py時,他也一樣執行了這麼一個過程,所以我們應該這樣來描述Python,Python是一門先編譯後解釋的語言。
4. 簡述Python的運行過程
在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc文件。
我們在硬碟上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。
當python程式運行時,編譯的結果則是保存在位於記憶體中的PyCodeObject中,當Python程式運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。
當python程式第二次運行時,首先程式會在硬碟中尋找pyc文件,如果找到,則直接載入,否則就重覆上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc文件,我們說pyc文件其實是PyCodeObject的一種持久化保存方式。
第二周-第05章節-Python3.5-python數據類型
1、數字2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裡,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子,其中-5,4為實數,j為虛數,數學中表示覆數是什麼?。
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(浮點型) 先掃盲 http://www.cnblogs.com/alex3714/articles/5895848.html
浮點數用來處理實數,即帶有小數的數字。類似於C語言中的double類型,占8個位元組(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
複數由實數部分和虛數部分組成,一般形式為x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裡的x和y都是實數。 註:Python中存在小數字池:-5 ~ 257 2、布爾值 真或假 1 或 0 3、字元串
"hello world"
第二周-第06章節-Python3.5-bytes數據類型
三元運算:
例子:
>>> result = 1 if 2 > 1 else 2
>>> print(result)
1
python3 最重要的新特性大概要算是對文本和二進位數據做了更為清晰的區分,文本總是unicode,由string類型表示, 二進位數據則有Bytes類型表示。python3中不會以任意隱式的方式混用string和bytes.(如視頻文件是二進位,而文本文件肯定是字元串)
string和bytes數據類型之間的相互轉換用decode和encode
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: encode.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:字元編碼的轉換
Software:JetBrains PyCharm 4.5.3
"""
msg = "我愛北京頤和園"
print(msg)
print(msg.encode(encoding="utf-8"))
print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))
=====================================================================
G:\Python3.7.3\python.exe G:/practise/oldboy/day2/encode.py
我愛北京頤和園
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe9\xa2\x90\xe5\x92\x8c\xe5\x9b\xad'
我愛北京頤和園
第二周-第07章節-Python3.5-列表的使用
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: list.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
#字元串
names = "chenjs,xianggr,chenlr,liuxz"
print(names)
#列表
names = ["chenjs","xianggr","chenlr","liuxz"]
print(names)
###切片
print(names[1])
#追加
names.append("leihd")
print(names)
#插入
names.insert(1,"Chenrh")
names.insert(2,"Chenrh")
print(names)
#計數
print(names)
print(names.count("Chenrh"))
#替換
names[2] = "xied"
print(names)
#刪除delete
#刪除方法1
#names.remove("Chenrh")
#刪除方法2
#del names[1]
#刪除方法3
names.pop() #括弧中可以輸入下標
print(names)
#查找位置
print(names)
print(names.index("chenlr"))
#反轉
print(names.reverse())
print(names)
#排序(按照字母排序)
print(names.sort())
print(names)
#擴展
names2 = ["xyz","abc","def"]
names.extend(names2)
print(names)
#清空
names.clear()
print(names)
=========================================================================
G:\Python3.7.3\python.exe G:/practise/oldboy/day2/list.py
chenjs,xianggr,chenlr,liuxz
['chenjs', 'xianggr', 'chenlr', 'liuxz']
xianggr
['chenjs', 'xianggr', 'chenlr', 'liuxz', 'leihd']
['chenjs', 'Chenrh', 'Chenrh', 'xianggr', 'chenlr', 'liuxz', 'leihd']
['chenjs', 'Chenrh', 'Chenrh', 'xianggr', 'chenlr', 'liuxz', 'leihd']
2
['chenjs', 'Chenrh', 'xied', 'xianggr', 'chenlr', 'liuxz', 'leihd']
['chenjs', 'Chenrh', 'xied', 'xianggr', 'chenlr', 'liuxz']
['chenjs', 'Chenrh', 'xied', 'xianggr', 'chenlr', 'liuxz']
4
None
['liuxz', 'chenlr', 'xianggr', 'xied', 'Chenrh', 'chenjs']
None
['Chenrh', 'chenjs', 'chenlr', 'liuxz', 'xianggr', 'xied']
['Chenrh', 'chenjs', 'chenlr', 'liuxz', 'xianggr', 'xied', 'xyz', 'abc', 'def']
[]
Process finished with exit code 0
第二周-第08章節-Python3.5-列表的使用2
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: list.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
import copy
#字元串
names = "chenjs,xianggr,chenlr,liuxz"
print(names)
#列表
names = ["chenjs","xianggr",["chenjisong","chenjinxi"],"chenlr","liuxz"]
print(names)
#擴展
names2 = ["xyz","abc","def","ghi"]
names.extend(names2)
print(names)
#淺複製(copy)
names2=names.copy()
print(names)
print(names2)
names[0]="陳繼松"
print("=======淺copy========>",names)
print("=======淺copy========>",names2)
#深複製(deepcopy,深copy必須要導入copy模塊)
names2=copy.deepcopy(names)
print("=======深copy=======>",names)
print("=======深copy=======>",names2)
#copy淺拷貝,沒有拷貝子對象,所以原始數據改變,子對象會改變
#deepcopy深拷貝,包含對象裡面的自對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變
names[2][0]="CHENJISONG"
print(names)
#切片
print(names[0:-1:2])
print(names[::2])
#清空
names.clear()
print(names)
第二周-第09章節-Python3.5-元組與購物車程式練習
元祖又為不可變列表,用()表示,比如
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: yuanzu.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
names = ("A","B","C","D","D","D")
print(names.index("C")) #取下標值
print(names.count("D")) #計數
=====================================================================
G:\Python3.7.3\python.exe G:/practise/oldboy/day2/yuanzu.py
2
3
Process finished with exit code 0
需求:
- 啟動程式後,讓用戶輸入工資,然後列印商品列表
- 允許用戶根據商品編號購買商品
- 用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒
- 可隨時退出,退出時,列印已購買商品和餘額
第二周-第10章節-Python3.5-購物車程式練習實例
程式:
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: shopping.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
product_list = [
('Iphone',5800),
('Mac Pro',9800),
('Bike',800),
('Watch',10600),
('Coffee',31),
('Alex Python',120),
]
shopping_list = [] ##定義shopping_list為空列表
salary = input("Input your salary:") ##輸入用戶的工資
if salary.isdigit(): ##判斷用戶輸入的是否為數字
salary = int(salary) ##格式化salary
while True:
for index,item in enumerate(product_list):
#print(product_list.index(item),item)
print(index,item)
user_choice = input("選擇要買嘛?>>>:")
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice < len(product_list) and user_choice >=0:
p_item = product_list[user_choice]
if p_item[1] <= salary: #買的起
shopping_list.append(p_item)
salary -= p_item[1]
print("Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m" %(p_item,salary) )
else:
print("\033[41;1m你的餘額只剩[%s]啦,還買個毛線\033[0m" % salary)
else:
print("product code [%s] is not exist!"% user_choice)
elif user_choice == 'q':
print("--------shopping list------")
for p in shopping_list:
print(p)
print("Your current balance:",salary)
exit()
else:
print("invalid option")
第二周-第11章節-Python3.5-字元串常用操作
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: string.py
@time: 2019/04/22
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
name = "my \tname is chenjisong"
print(name.capitalize()) #capitalize首字母大寫
print(name.count("n")) #字母的個數
print(name.center(50,"=")) #列印50個字元,如果不夠就把name放在中間,並用"="補齊
print(name.endswith("ng")) #是否以什麼結尾
print(name.expandtabs(tabsize=30)) #將\t轉成30個空格
print(name.find("name")) #找出字元的索引位置
print('abc123'.isalnum()) #是否為阿拉伯數字(包含字母和數字)
print('abA'.isalpha()) #是否為純英文字元
print('12'.isdecimal()) #是否為十進位
print('1.2'.isdigit()) #是否為純數字整數
print('_1A'.isidentifier()) #判斷是否為合法的變數名
print('aBc'.islower()) #判斷是否為小寫
print('33.33'.isnumeric()) #判斷是否為純數字
print(' '.isspace()) #是否為空格
print('My Name Is'.istitle()) #是否為每個首字母大寫
print('My Name Is'.isprintable()) #是否為可列印的
print('My Name Is'.isupper()) #是否全是大寫
print('*'.join(['1','2','3','4'])) #是否將特定字元放在列表元素中間
print(name.ljust(50,"*")) #保證長度50.如果不夠右邊填充起來
print(name.rjust(50,"*")) #保證長度50.如果不夠左邊填充起來
print('Chenjisong'.lower()) #把大寫變小寫
print('Chenjisong'.upper()) #把小寫變大寫
print('\nChenjisong'.lstrip()) #lstrip去掉左邊的空格或回車
print('Chenjisong\n'.rstrip()) #lstrip去掉右邊的空格或回車
print("\nChenjisong\n".strip()) #去掉左右兩邊的空格或回車
print('chenjisong'.replace('n','N')) #替換字母,也可以在後面加位置參數
print('chenjisong'.rfind('n')) #找到最後一個字母的位置下標並返回
print('1+2+3+4'.split('+')) #以什麼作為分隔符
print('1+2\n+3+4'.splitlines()) #自動識別不通系統的換行
print("ChenJiSong".swapcase()) #將字元串大小寫互換
print("Chen ji song".title()) #將首字母變為大寫
print('chen ji song'.zfill(50)) #字元串50,不夠的用0填充
===================================================================
結果:
"G:\Python 3.6.6\python.exe" G:/practise/oldboy/day2/string.py
My name is chenjisong
3
==============my name is chenjisong==============
True
my name is chenjisong
4
True
True
True
False
True
False
False
True
True
True
False
1*2*3*4
my name is chenjisong****************************
****************************my name is chenjisong
chenjisong
CHENJISONG
Chenjisong
Chenjisong
Chenjisong
cheNjisoNg
8
['1', '2', '3', '4']
['1+2', '+3+4']
cHENjIsONG
Chen Ji Song
00000000000000000000000000000000000000chen ji song
Process finished with exit code 0
第二周-第12章節-Python3.5-字典的使用
字典一種key - value 的數據類型,使用就像我們上學用的字典,通過筆劃、字母來查對應頁的詳細內容。
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: dictionary.py
@time: 2019/04/22
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
'''
info = {
'stu001':"lanmao",
'stu002':"taoqi",
'stu003':"feifei"
}
#字典是無序的
print(info)
#通過key取value值
print(info["stu002"])
#通過key值修改value值
info["stu002"]="淘氣"
print(info)
#創建一個item
info["stu004"]="chenjisong"
print(info)
#刪除value
del info["stu004"]
print(info)
#刪除pop
info.pop("stu001")
print(info)
#隨機刪除popitem
info.popitem()
print(info)
'''
info = {
'stu001':"lanmao",
'stu002':"taoqi",
'stu003':"feifei"
}
#查找 info.get,如果存在顯示ture,如果不存在顯示None
print(info.get("stu004"))
print("stu001" in info)
#更新update,有值更新,無值合併字典
b = {
'stu001':"chenjisong",
'3':'5',
'4':'6'
}
info.update(b)
print(info)
##初始化一個新的字典
c = dict.fromkeys([6,7,8],[1,{"name":"chenjisong"},444])
print(c)
c[7][1]["name"] = "orson chen"
print(c)
#字典的迴圈
info = {
'stu001':"lanmao",
'stu002':"taoqi",
'stu003':"feifei"
}
###直接取索引,高效
for i in info:
print(i,info[i])
##將字典變成列表,再取值,低效
for k,v in info.items():
print(k,v)
#把字典轉換成列表
print(info.items())
'''
#多級字典的嵌套
av_catalog = {
"歐美":{
"www.youporn.com": ["很多免費的,世界最大的","質量一般"],
"www.pornhub.com": ["很多免費的,也很大","質量比yourporn高點"],
"letmedothistoyou.com": ["多是自拍,高質量圖片很多","資源不多,更新慢"],
"x-art.com":["質量很高,真的很高","全部收費,屌比請繞過"]
},
"日韓":{
"tokyo-hot":["質量怎樣不清楚,個人已經不喜歡日韓範了","聽說是收費的"]
},
"大陸":{
"1024":["全部免費,真好,好人一生平安","伺服器在國外,慢"]
}
}
print(av_catalog)
av_catalog["大陸"]["1024"][1] += ",可以用爬蟲爬下來"
print(av_catalog["大陸"]["1024"])
#ouput
['全部免費,真好,好人一生平安', '伺服器在國外,慢,可以用爬蟲爬下來']
'''
第二周-第13章節-Python3.5-三級菜單實例
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: Three Level.py
@time: 2019/04/23
url:https://www.liaoxuefeng.com
functions:三級菜單,在每個層級都能夠退出
Software:JetBrains PyCharm 4.5.3
"""
data = {
'北京':{
"昌平":{
"沙河":["oldboy","test"],
"天通苑":["鏈家地產","我愛我家"]
},
"朝陽":{
"望京":["賓士","陌陌"],
"國貿":{"CICC","HP"},
"東直門":{"Advent","飛信"},
},
"海澱":{},
},
'山東':{
"德州":{},
"青島":{},
"濟南":{}
},
'廣東':{
"東莞":{},
"常熟":{},
"佛山":{},
},
}
exit_flag = False
while not exit_flag:
for i in data:
print(i)
choice = input("選擇進入1>>:")
if choice in data:
while not exit_flag:
for i2 in data[choice]:
print("\t",i2)
choice2 = input("選擇進入2>>:")
if choice2 in data[choice]:
while not exit_flag:
for i3 in data[choice][choice2]:
print("\t\t", i3)
choice3 = input("選擇進入3>>:")
if choice3 in data[choice][choice2]:
for i4 in data[choice][choice2][choice3]:
print("\t\t",i4)
choice4 = input("最後一層,按b返回>>:")
if choice4 == "b":
pass
elif choice4 == "q":
exit_flag = True
if choice3 == "b":
break
elif choice3 == "q":
exit_flag = True
if choice2 == "b":
break
elif choice2 == "q":
exit_flag = True
第二周-第14章節-Python3.5-本周作業-購物車優化
購物車
用戶入口:
1、商品信息存在文件里
2、已購商品,餘額記錄
商家入口:
1、可以添加商品,修改商品價格