標(biāo)準(zhǔn)庫比較多 功能也不同:
創(chuàng)新互聯(lián)建站專注于吳忠企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。吳忠網(wǎng)站建設(shè)公司,為吳忠等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
標(biāo)準(zhǔn)庫
sys
系統(tǒng)相關(guān)的參數(shù)和函數(shù)。 sys 庫一般用來訪問和修改系統(tǒng)相關(guān)信息,比如查看 python 版本、系統(tǒng)環(huán)境變量、模塊信息和 python 解釋器相關(guān)信息等等。
os
操作系統(tǒng)接口模塊。這個(gè)庫提供了訪問操作系統(tǒng)相關(guān)依賴的方式,比如輸入輸出操作、讀寫操作、操作系統(tǒng)異常錯(cuò)誤信息、進(jìn)程線程管理、文件管理、調(diào)度程序等等。
re
正則表達(dá)式操作。這個(gè)庫是我喜歡并且經(jīng)常會用到的庫,在對大量字符串進(jìn)行處理的時(shí)候用正則表達(dá)式是最快速有效的方式,但是正則表達(dá)式的學(xué)習(xí)曲線較高,有興趣的朋友可以訪問這個(gè)網(wǎng)站學(xué)習(xí)。
math
數(shù)學(xué)函數(shù)庫。 math 庫提供了對 C 語言標(biāo)準(zhǔn)定義的數(shù)學(xué)函數(shù)訪問,比如數(shù)論(Number-theoretic)的各種表示方法、冪和對數(shù)函數(shù)(Power and logarithmic functions)、三角函數(shù)(Trigonometric functions)、常量圓周率(π)和自然常數(shù)(e)等等。
random
生成偽隨機(jī)數(shù)。
偽隨機(jī)數(shù)與隨機(jī)數(shù)(真隨機(jī)數(shù))不同的是執(zhí)行環(huán)境,隨機(jī)數(shù)是真實(shí)世界中通過物理過程實(shí)踐得出結(jié)論,而偽隨機(jī)數(shù)是通過計(jì)算機(jī)的特定算法生成的數(shù),所以這個(gè)過程是可預(yù)測的、有規(guī)律的,只是循環(huán)周期較長,并不能與現(xiàn)實(shí)場景相切合。
random庫提供生成隨機(jī)數(shù),可以模擬現(xiàn)實(shí)世界中隨機(jī)取數(shù)、隨機(jī)抽獎(jiǎng)等等。
logging
日志記錄工具。這個(gè)庫提供了對應(yīng)用程序和庫函數(shù)的日志記錄,日常開發(fā)中我們經(jīng)常需要通過日志打印出當(dāng)前程序的運(yùn)行狀態(tài),實(shí)時(shí)查看可能出現(xiàn)的堆棧異常和錯(cuò)誤信息。
json
Json 編碼和解碼器。 json 庫提供了對 json 數(shù)據(jù)的支持,日常開發(fā)中我們做前后端分離需要對傳輸數(shù)據(jù) json 進(jìn)行序列化和反序列化操作,以保證對數(shù)據(jù)的完整性和有效性,而序列化和反序列化其實(shí)就是編碼和解碼的過程。
pickle
Python 對象序列化庫。 pickle 庫支持對 python 對象進(jìn)行序列化和反序列化操作,當(dāng)我們需要將處理好的對象保存到文件或數(shù)據(jù)庫中時(shí),就可以將其序列化成二進(jìn)制數(shù)據(jù),從而更好的保存起來。
shelve
Python 對象持久化。簡單的數(shù)據(jù)存儲方案。
socket
底層網(wǎng)絡(luò)接口。 socket(套接字) 庫提供了標(biāo)準(zhǔn)的BSD(伯克利套接字) Socket API,可以通過訪問底層操作系統(tǒng) Socket 的相關(guān)接口進(jìn)行網(wǎng)絡(luò)通訊。
datetime
基本日期和時(shí)間類型庫。該庫提供了各種簡單和復(fù)雜的方式處理日期和時(shí)間,日常我們會用時(shí)間測算時(shí)間消耗、復(fù)雜度,對存儲的創(chuàng)建時(shí)間和修改時(shí)間也需要進(jìn)一步說明,對計(jì)時(shí)器的描述和控制也需要用到該庫。
hashlib
安全哈希和消息摘要。摘要算法 其實(shí)就是對某些數(shù)據(jù)進(jìn)行加密(不可逆的加密算法),因?yàn)楸患用艿臄?shù)據(jù)無法破解,所以就能防止被篡改。常見的摘要算法有 MD5、SHA1,一般我們會用 MD5 對用戶口令進(jìn)行加密,防止盜用后被輕易破解;而 SHA1 與 MD5 類似,但是 SHA1 會產(chǎn)生更長的長度,也更安全,但是算法的復(fù)雜性通常伴隨著存儲空間和時(shí)間的消耗。要說比SHA1更長的字符長度,還有 SHA224、SHA256、SHA384 和 SHA512,看名字就能知道。
大家都知道無論算法生成的字符長度如何都有可能發(fā)生碰撞(被破解),這是不可避免的,所以具體場景具體情況而定。
configparser
配置文件解析器。 configparser 庫可以輕松定制配置文件,通過解析配置文件的信息我們就可以全局訪問相關(guān)配置。
urllib
URL 處理模塊。 urllib 庫集成了處理 URLs(統(tǒng)一資源定位符)的各種模塊:
URL urllib.request URL robots.txt urllib 庫對訪問網(wǎng)絡(luò)有很好的支持,提供了對數(shù)據(jù)的訪問和處理、文件的上傳和下載、記錄 cookie 和 session 等等。
itertools
為高效循環(huán)而創(chuàng)建迭代器的函數(shù)。 itertools 庫也是經(jīng)常需要用到,當(dāng)我們要對某些數(shù)進(jìn)行 for-in 時(shí)就需要先將其處理成一個(gè)可迭代對象,之后我們才能進(jìn)行遍歷操作。
collections
容器數(shù)據(jù)類型庫。 collections 庫提供了對所有容器數(shù)據(jù)類型的支持,包括 dict, list, set 和 tuple。我們可以用此庫對不同數(shù)據(jù)類型進(jìn)行操作,常有的函數(shù)方法有這些:
namedtuple() 創(chuàng)建命名元組子類的工廠函數(shù) deque 類似列表(list)的容器,實(shí)現(xiàn)了在兩端快速添加(append)和彈出(pop) ChainMap 類似字典(dict)的容器類,將多個(gè)映射集合到一個(gè)視圖里面 Counter 字典的子類,提供了可哈希對象的計(jì)數(shù)功能 OrderedDict 字典的子類,保存了他們被添加的順序 defaultdict 字典的子類,提供了一個(gè)工廠函數(shù),為字典查詢提供一個(gè)默認(rèn)值 UserDict 封裝了字典對象,簡化了字典子類化 UserList 封裝了列表對象,簡化了列表子類化 UserString 封裝了列表對象,簡化了字符串子類化 functools
高階函數(shù)和可調(diào)用對象上的操作。該庫主要調(diào)用高階函數(shù),是常規(guī)函數(shù)的一種補(bǔ)充。目前庫中包含以下幾種函數(shù):
cmp_to_key lru_cache total_ordering partial partialmethod reduce singledispatch update_wrapper wraps threading
線程并行庫。 threading 庫支持線程和多線程的操作,針對多線程并發(fā)的問題可以給數(shù)據(jù)加同步鎖,一次只能讓一個(gè)線程處理數(shù)據(jù),從而避免出現(xiàn)數(shù)據(jù)讀寫混亂。
在 CPython 解釋器上,因?yàn)镚IL(全局解釋器鎖)鎖機(jī)制的存在的,被設(shè)計(jì)成線程安全,所以同一時(shí)間只能執(zhí)行一個(gè)線程,這就導(dǎo)致了多線程不能發(fā)揮出計(jì)算機(jī)的多核特性。
multiprocessing
進(jìn)程并行庫。 multiprocessing 庫與 threading 庫很類似,不同的是進(jìn)程庫可以創(chuàng)建子進(jìn)程避開 GIL,從而彌補(bǔ)線程庫存在的劣勢和發(fā)揮計(jì)算機(jī)的多核特性。
timeit
測量小代碼片段的執(zhí)行時(shí)間。此庫主要用來計(jì)算運(yùn)行代碼的時(shí)間消耗,支持多種方式傳入?yún)?shù)。
atexit
退出處理器。當(dāng)處理一個(gè)函數(shù)需要立馬退出時(shí)可以使用該庫。
abc
抽象基類。 abc 庫定義抽象基類,以便其他類派生出新類。比如 collections 容器庫中就有此派生出的 collections.abc 類,派生出來的類可以進(jìn)一步實(shí)現(xiàn)。
asyncio
異步IO庫。 asyncio 庫是一個(gè)用 async/await 關(guān)鍵字編寫并發(fā)的庫,為多個(gè)異步框架提供基礎(chǔ)功能,能夠?qū)崿F(xiàn)高性能的網(wǎng)絡(luò)、Web服務(wù)器、數(shù)據(jù)庫連接和分布式任務(wù)隊(duì)列等。
copy
淺層和深層復(fù)制操作。 copy 庫提供對對象的拷貝,我們都知道要制作對象副本,是無法通過簡單值傳遞創(chuàng)建新變量的方式做到,因?yàn)樾伦兞克赶虻膬?nèi)存空間依舊是原對象本身,所以對新變量進(jìn)行任何操作都會改變原對象。那么, copy 庫就提供了制作對象副本的各種方法,會開辟一個(gè)新的內(nèi)存空間存放副本對象,修改操作不會對原對象有任何干預(yù)。
csv
csv(Comma Separated Values)文件讀寫庫。此庫支持以純文本的形式存儲表格數(shù)據(jù)(數(shù)字和文本)。
operator
標(biāo)準(zhǔn)運(yùn)算符替代函數(shù)庫。此庫是將 python 自有的運(yùn)算符作為有效函數(shù),比如表達(dá)式 x+y 可以用函數(shù) operator.add(x, y) 表示;比如表達(dá)式 a*b 可以用函數(shù) operator.mul(a, b) 表示,等等。
enum
枚舉庫。 enum 庫支持創(chuàng)建枚舉類來存儲大量同類型的不可變常量,以便其他函數(shù)調(diào)用。創(chuàng)建出來的枚舉類是可迭代對象,所以可以用 for-in 枚舉出所有常量。
heapq
堆隊(duì)列算法。這個(gè)模塊提供了堆隊(duì)列算法的實(shí)現(xiàn),也稱為優(yōu)先隊(duì)列算法。優(yōu)先隊(duì)列中的每個(gè)元素都有各自的優(yōu)先級,優(yōu)先級最高的元素最先得到服務(wù)。所以當(dāng)我們要求前n最大/最小值的時(shí)候就可以用此算法來實(shí)現(xiàn), heapq 庫中也提供了相應(yīng)函數(shù)實(shí)現(xiàn)。
http
HTTP 模塊。 http 模塊是一個(gè)包,收集了多個(gè)處理超文本傳輸協(xié)議的模塊:
urllib.request http 模塊通過 http.HTTPStatus 枚舉定義了HTTP狀態(tài)碼 以及相關(guān)聯(lián)消息。
profile、pstats
性能分析工具。 profile 模塊提供了 profile 和 cProfile 兩種不同實(shí)現(xiàn)的性能分析工具,可用來描述程序各個(gè)部分的執(zhí)行時(shí)間和頻率,統(tǒng)計(jì)后的信息可以通過 pstats 模塊保存并使用。
ssl
TLS/SSL(傳輸安全協(xié)議)。此模塊提供對安全協(xié)議的支持,通過應(yīng)用上下文,可將 TLS(傳輸層安全性協(xié)議)或其前身 SSL(安全套接層)支持安全協(xié)議,能為互聯(lián)網(wǎng)通信提供安全和數(shù)據(jù)完整性保障。一般 HTTPS 協(xié)議都支持 TLS/SSL 加密。
unitest
單元測試框架。 unitest 庫常用于單元測試,受到 JUnit 和其他主流測試庫的啟發(fā), unitest 庫的功能和函數(shù)與它們有著相似的風(fēng)格。
uuid
UUID庫。 uuid 庫主要用途是生成隨機(jī)字符串,庫中有多個(gè)版本的 UUID 對象方法,比如版本 1、3、4 和 5 的 uuid1() 、 uuid3() 、 uuid4() 和 uuid5() 。需要注意的是,如果要生成隨機(jī)字符串,可以使用 uuid1() 和 uuid4() ,但是 uuid1() 會存在隱私風(fēng)險(xiǎn),因?yàn)樯傻脑砝镞叞脩粼L問計(jì)算機(jī)的網(wǎng)絡(luò)地址,而 uuid4() 是通過隨機(jī)字符生成。
希望可以幫助到你。
#data和name_data數(shù)據(jù)自己添加
import random
# 所有員工數(shù)據(jù),字典的key是一個(gè)set類型,value是list類型
data = {
('能永年', '甲隊(duì)'): ['項(xiàng)目隊(duì)長', '曾經(jīng)外派抵達(dá)x地做出了某事', '曾經(jīng)外派抵達(dá)子公司做出了ss項(xiàng)目'],
('巴偉毅', '乙隊(duì)'): ['HR'],
('紀(jì)文博', '丙隊(duì)'): ['項(xiàng)目成員', '為xx事做出了重大貢獻(xiàn)', '曾經(jīng)做過AA項(xiàng)目'],
('吉信鴻', '丙隊(duì)'): ['HR', '為公司面試了XX人次', ],
('沙雅旭', '丙隊(duì)'): ['財(cái)務(wù)管理', '針對財(cái)務(wù)的做出了重要指導(dǎo)'],
}
name_data = ['能永年', '巴偉毅', '紀(jì)文博', '吉信鴻', '沙雅旭'] ?# 參見抽獎(jiǎng)人的姓名
random_name = random.choice(name_data) ?# 隨機(jī)一個(gè)中獎(jiǎng)的人
for key, value in data.items():
# print(key,value)
if random_name == key[0]: ?# 在字典key中找到這人
print('{}:{}'.format(key[0], key[1]))
for item in value: ?# 遍歷他的信息
print('\t\t' + item.ljust(20))
16年年會抽獎(jiǎng)網(wǎng)上有人對公司的抽獎(jiǎng)結(jié)果又偏見,于是全員進(jìn)行了抽獎(jiǎng)代碼的review,好像是愛奇藝公司的,下面用python來實(shí)現(xiàn)一個(gè)抽獎(jiǎng)程序。
主要功能有
1.從一個(gè)csv文件中讀入所有員工工號
2.將這些工號初始到一個(gè)列表中
3.用random模塊下的choice函數(shù)來隨機(jī)選擇列表中的一個(gè)工號
4.抽到的獎(jiǎng)項(xiàng)的工號要從列表中進(jìn)行刪除,以免再次抽到
初級版
這個(gè)比較簡單,缺少定制性,如沒法設(shè)置一等獎(jiǎng)有幾名,二等獎(jiǎng)有幾名
import csv#創(chuàng)建一個(gè)員工列表emplist = []#用with自動關(guān)閉文件with open('c://emps.csv') as f:
empf = csv.reader(f) for emp in empf:
emplist.append(emp)
print("進(jìn)行一等獎(jiǎng)抽獎(jiǎng),共有一名")import random#利用random模塊的chice函數(shù)來從列表中隨機(jī)選取一個(gè)元素e1 = random.choice(emplist)#將中獎(jiǎng)的員工從列表中剔除emplist.remove(e1)
print('一等獎(jiǎng)得主的號碼是 %s' % e1)
print('進(jìn)行三個(gè)二等獎(jiǎng)的號碼抽獎(jiǎng)')
e2_1 = random.choice(emplist)
emplist.remove(e2_1)
e2_2 = random.choice(emplist)
emplist.remove(e2_2)
e2_3 = random.choice(emplist)
emplist.remove(e2_3)
print('獲得3個(gè)二等獎(jiǎng)是 %s %s %s',(e2_1,e2_2,e2_3))#下面依次類推可以設(shè)置三等獎(jiǎng)的抽獎(jiǎng)123456789101112131415161718192021222324
改進(jìn)版
上面的那個(gè)初級版,假如要設(shè)置個(gè)三等獎(jiǎng)一百名那么將要重新維護(hù)幾百行代碼,下面用比較高級點(diǎn)的辦法實(shí)現(xiàn).
我們考慮用面向?qū)ο髞韺?shí)現(xiàn),設(shè)計(jì)一個(gè)抽獎(jiǎng)?lì)?,類中包含一個(gè)屬性(號碼來源),一個(gè)方法:產(chǎn)生所有抽獎(jiǎng)層次指定個(gè)數(shù)的抽獎(jiǎng)號碼。
用到如下知識點(diǎn):
1. csv模塊部分函數(shù)用法
2. sys模塊讀取輸入
3. random模塊函數(shù)choice函數(shù)用法
4. 列表和字典元素的添加、刪除
6. for循環(huán)中range用法
7. 類和面向?qū)ο?/p>
8. 字符打印,print中的計(jì)算
9.open中with
#!/usr/bin/python#coding=utf-8import csvimport sysimport random
reload(sys)
sys.setdefaultencoding('utf8')#coding=utf-8print("開始進(jìn)行抽獎(jiǎng)")#定義個(gè)抽獎(jiǎng)?lì)?,功能有輸入抽?jiǎng)級別和個(gè)數(shù),打印出每個(gè)級別的抽獎(jiǎng)員工號碼class Choujiang:
#定義scv文件路徑
def __init__(self,filepath):
self.empfile = filepath def creat_num(self):
emplist = [] with open(self.empfile) as f:
empf = csv.reader(f) for emp in empf:
emplist.append(emp)
print('共有%s 人參與抽獎(jiǎng)' % len(emplist))
levels = int(input('抽獎(jiǎng)分幾個(gè)層次,請輸入:')) #定義一個(gè)字典
level_dict = {} for i in range(0,levels):
print('請輸入當(dāng)前獲獎(jiǎng)層次 %s 對應(yīng)的獎(jiǎng)品個(gè)數(shù)' % ( i + 1))
str_level_dict_key = sys.stdin.readline()
int_level_dict_key = int(str_level_dict_key)
level_dict[i] = int_level_dict_key #循環(huán)完成后抽獎(jiǎng)層次字典構(gòu)造完畢
#進(jìn)行抽獎(jiǎng)開始
print('抽獎(jiǎng)字典設(shè)置為: %s' % level_dict) for i in range(0,len(level_dict)):
winers = [] #產(chǎn)生當(dāng)前抽獎(jiǎng)層次i對應(yīng)的抽獎(jiǎng)個(gè)數(shù)
for j in range(0,int(level_dict[i])): #利用random模塊中的choice函數(shù)從列表中隨機(jī)產(chǎn)生一個(gè)
winer = random.choice(emplist)
winers.append(winer)
emplist.remove(winer)
print('抽獎(jiǎng)層次 %s 下產(chǎn)出的獲獎(jiǎng)人員有:' % (i + 1 ))
print(winers)#類功能定義完畢,開始初始化并使用if __name__ == '__main__':
peoples = Choujiang('c://emps.csv')
peoples.creat_num()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
該段程序在python 2.6 以上及 3中均可以運(yùn)行,運(yùn)行結(jié)果如下圖:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information. ================================ RESTART ================================ 開始進(jìn)行抽獎(jiǎng)
共有24790 人參與抽獎(jiǎng)
抽獎(jiǎng)分幾個(gè)層次,請輸入:2請輸入當(dāng)前獲獎(jiǎng)層次 1 對應(yīng)的獎(jiǎng)品個(gè)數(shù)1請輸入當(dāng)前獲獎(jiǎng)層次 2 對應(yīng)的獎(jiǎng)品個(gè)數(shù)3抽獎(jiǎng)字典設(shè)置為: {0: 1, 1: 3}
抽獎(jiǎng)層次 1 下產(chǎn)出的獲獎(jiǎng)人員有:
[['張三19826']]
抽獎(jiǎng)層次 2 下產(chǎn)出的獲獎(jiǎng)人員有:
[['張三18670'], ['張三23235'], ['張三15705']] 1234567891011121314151617
**2. **創(chuàng)建Die類****
5.匯總
這個(gè)可以創(chuàng)建多種玩法,隨機(jī)搖骰子只是其中的一種,還可以先讓一個(gè)人輸入一個(gè)幸運(yùn)數(shù)字并儲存起來,然后再執(zhí)行程序,如果數(shù)字不等于幸運(yùn)數(shù)字就不是幸運(yùn)星,當(dāng)數(shù)字等于時(shí)就是幸運(yùn)星并結(jié)束程序——類似抽獎(jiǎng)。。。。
總之玩法很多,看你怎么寫,用最基礎(chǔ)的知識來實(shí)現(xiàn)!