摘要:并返回合理錯誤提示。如果不在則再輸入密碼,成功則增加用戶信息到文件中,密碼進行加密處理。作業增加用戶名,密碼的合法化判斷和錯誤提示。
課時5:字符串-基礎 切片,索引
s = "use python do somenthing s[1],s[-1],s[1:3],s[1:6:2],s[1:],s[:-1],s[:] spilt,join,[start:stop:step]常用方法集合
"let us" + s, s*2 #字符串重復
s.upper()
s.find("pa")
s.replace("python","java")
print "%s like %s" %("we","python")
strip() #返回去除兩側空格(不包括內部)的字符串
轉義r""
s="C:
ewpython",print s,len(s)
r"
#前綴字符串,不考慮轉義
s=r"C:
ewpython"
Unicode u""
coding:utf-8
import re # Regular expression re.match(p,text) re.search(p,text) re.findall(p,text) re.split(p,text) re.sub(p,s,text) pattern = re.compile(p) results = pattern.match(text)整體模式
11個元字符:,^,$,.,|,?,*,(),[],{},
特殊含義:,.
可選:|,[]
重復:*,+,?,{},(貪婪模式)
6個字符類:d,D,s,S,w,W
4個位置類:,B,A,,C^、$)
分組:()
編譯選項:I、L、M、S、U、X
^ start
$ end
. except
+ 1-inf
* 0-inf
? 0-1
[] or
{} repeat
[^] not
日期: Datetime.date.today() 日期和時間: datetime.datetime.now() 1000天之后是哪一天: datetime.timedelta(days=1000) 打印格式的問題: Isoformat(),strtime() 字符串轉換: strptime()time
Datetime.time(12,11,30) Time.time() #實際時間 Time.clock() #cpu時間 Time.sleep() #以s為時間
import datetime課時8 列表 切片,索引,引用
a = [1,2,3] a_ref = a a[2] = 100常用操作
a_copy=a[:] a.append(300) a.insert(1,50) a.pop() a.sort() a.reverse() del a[1]嵌套
b = [a,a_ref,a_copy] c = [1,2,"123","abc"] +,* Count(val) #對某個元素計數(多態函數)元組 不可變的列表
(a,b,c) #不能原處修改常用操作
index count #對某個元素計數 +,* 嵌套: 可嵌套可變的list 轉換: tuple()課時9 字典 Key-Value
dict = {"xiaoming":90,"xiaohong":80,"xioamao":60}
dict,zip
常用操作
Keys,values Get Update Del Clear 嵌套
散列表,沒有順序,適合插入,查詢操作
Key不一定是字符串,但一定是不可變對象(數字,字符串,元組)。
[(k,dict[k] for k ins sorted(dict,keys())] #列表解析 sorted(dict.iteritems()key=lambda d:d[1],reverse=True)再談引用和拷貝
#引用 L = [4,5,6] X = L*4,Y = [L]*4 L[1] = 0 print X,Y #淺拷貝 字典D.copy(),copy.copy(D) 列表L[:] #深拷貝 copy.deepcopy(D)
#將兩個等長度的list合并成dict
text = "C++ python shell ruby java javascript c"
code_num = [38599,100931,26153,93142,84275,184220]
text_list = text.split(" ")
code_dict = dict(zip(text_list,code_num))
#get
a = code_dict.get("fortran",None)
#update,del,copy,clear
other_code = {"php":78014,"objective-c":34444}
code_dict.update(other_code)
del code_dict["c++"]
#sort key and value 列表解析
[(k,a_copy[k]) for k in sorted(a_copy.keys())]
課時10 文件
#常用操作
F = open(path,"r") #返回對象為file-like object
#還可以是內存,網絡等,r,w,a
F.read()
F.readline()
F.write()
F.close()
#中文支持
import codecs
f = codecs.open(filename,mode,encoding)
#文件操作
import os
os.path.exists(filename)
os.rename(old,new)
#Shelve庫 import shelve D = Shelve.open(file) D["name"]="newtext" D.close() #Pickle/cPickle import cPickle f = open(file,mode) cPickle.dump(obj,f) Obj = cPickle.load(f)課時11 作業參考 11.1 驗證E-mail正則表達式
import re text="aaa@163.com chu-tian-shu_1981@heibanke2015.com abc-fff@xfd.org ccc_fd2@fff.edu aaa@111 com" print(re.findall(r"(w+[-w]*)@([a-zA-Z0-9]+).(com|org|edu)",text))11.2 隨機函數
利用隨機函數產生一個用戶的用戶名,密碼,并利用文件將用戶名和密碼保存下來。
import random
charactor="abcdefghijklmnopqrstuvwxyz0123456789"
len_char = len(charactor)-1
# generate name
a=[0]*4
a[0]=charactor[random.randint(0,len_char)]
a[1]=charactor[random.randint(0,len_char)]
a[2]=charactor[random.randint(0,len_char)]
a[3]=charactor[random.randint(0,len_char)]
name="".join(a)
# generate password
a=[0]*6
a[0]=charactor[random.randint(0,len_char)]
a[1]=charactor[random.randint(0,len_char)]
a[2]=charactor[random.randint(0,len_char)]
a[3]=charactor[random.randint(0,len_char)]
a[4]=charactor[random.randint(0,len_char)]
a[5]=charactor[random.randint(0,len_char)]
password="".join(a)
#write file
f=open("a.txt","w")
f.write(name+","+password+"
")
f.close()
11.3 密碼加密
上面的文件中密碼沒有加密,不安全,請將文件內容讀出后將密碼字段通過md5的庫處理后,再保存至另一個文件。
#md5加密數據庫 import hashlib hashlib.md5(password).hexdigest()11.4 公交車數據讀取,存入字典
#!/usr/bin/env python
# coding: utf-8
import codecs
import re
# read the file
# f=codecs.open("beijing_jt.csv","r","utf-8")
# read_list=[]
# read_tmp=f.readline()
# for i in range(0,39):
# read_tmp=f.readline()
# read_list.append(read_tmp)
# f.close()
f=codecs.open("beijing_jt.csv","r","utf-8")
read_tmp_total=f.readlines()
f.close()
# get linenum and stations information
s_tmp="".join(read_tmp_total[1:40]) #read_list
jt_info=s_tmp.split(",")
jt_stations = jt_info[-1].split("
")
print jt_info[1]
# convert stations info format
station_pattern = (r"(?P[0-9]+)s(?PD+)")
station_list = []
stations = re.findall(station_pattern,jt_info[-1])
for tmp in stations:
print tmp[0],tmp[1].strip()
station_list.append(tmp[1].strip())
print "-------------------------------------------------"
for tmp in jt_stations:
stations = re.search(station_pattern,tmp.strip())
print stations.group("number"),stations.group("name")
result={}
result[jt_info[1]]=station_list
print result
# coding: utf-8
import csv
import re
csvfile = open("beijing_jt.csv","r")
reader = csv.reader(csvfile)
reader.next()
jt_info = reader.next()
print jt_info[1].decode("utf-8")
csvfile.close()
# convert stations info format
station_pattern = (r"(?P[0-9]+)s(?PD+)")
station_list = []
stations = re.findall(station_pattern,jt_info[-1].decode("utf-8"))
for tmp in stations:
print tmp[0],tmp[1].strip()
station_list.append(tmp[1].strip())
result={}
result[jt_info[1]]=station_list
print result
a,b = 1,2 a,b = "bj","sh" a,b = "bj" a = b = "bj" a,*b = "beijing" a,b = (1,2) a,b = [1,2] +=輸入 input
raw_input() #原始輸入 input()輸出
#3.x
#函數
print([obj,...][,sep=""][,end="
"][,file=sys.stdout]
#2.x
#語句
print a,b
print >> file,a,b
print "%d,%d,%s"%(a,b,c)
print"{0}like{1}".format("we","python")
print"{a} like {b}".format(a="we",b="python")
課時13 if語句和for循環語句
#if if xxx:statement1 elif xxx:statements2 else:statements3
#其他用法 #邏輯表達式 not/and/or #三元表達式 a = y if x > 0 else z #避免混用Tab和空格 #Pass #分號 #換行:括號匹配和反斜線
#while/else
While xxx:
statements1
if xxx:break/continue
else:
statements
#for/else
#列表,字符串,元組,字典,文件
for x on objects:
statenments
if xxx:break/continue
else:
statements 2
課時14 列表解析和異常
列表解析
列表分析不但解決而且運行速度較快。
用法
#去除列表中重復元素 l1 = ["b","c","d","b","c","a","a"] l2 = [] [l2.append(i) for i in l1 if not in l2] print l2
舉例
>>> iter=(x**2 for x in range(10) if x%2 == 0) >>> iter異常at 0x02419CB0 >>> for el in iter: print el print[(x,y) for x in (1,2,3,4) for y in (10,15,3,22) if x*y > 25]
用法
try/except #try后語句有異常發生后執行except try/finally #無論異常是否發生都執行finally raise error(meassage) #觸發異常 Assert condition,message #條件觸發錯誤,觸發后打印信息,并終止程序
舉例
a[1] #NameError,a無定義
a = 2; a[1]; #TypeError,定義a為整數,按List去訪問
a = [2];a[1]; #IndexError
a = {};a[1]; #KeyError
Raise IndexError
Assert False,"error occur,please check program"
課時15 猜數字
隨機產生要猜的數字
輸入,用于接收用戶輸入的數字
循環,如果沒猜對則循環接收輸入,并打出提示信息
猜到數字或猜測次數達到一定次數后(6次)打印失敗并退出
# coding:utf-8
import random
secret = random.randint(1,100)
guess,tries = 0,0
print u"你好,我很幸運,我是一個路過的神仙,我有一個秘密"
print u"我的秘密是一個從1到99的數字,我只會給你6次機會來猜."
print u"如果你猜到它,那說明你很幸運,趕緊去買彩票吧!"
while guess != secret and tries <6:
print u"你猜這個數字是多少?(1-100)"
guess = input()
if guess == secret:
print u"哇~~,真的假的!你居然發現了我的秘密!它就是"
break
elif guess < secret:
print str(guess),u"太小了,你還差點運氣!"
elif guess > secret:
print str(guess),u"太大了,你還差點運氣!"
tries +=1
else:
print u"你唯一的機會已被你用完了!看來你還需要再攢點人品!"
print u"還是讓我告訴吧!這個數字:",str(secret)
問題:
輸入非數字
直接輸入secret(作弊模式)
作業3-1改進猜數字游戲,放作弊,錯誤輸入判斷
作業3-2利用上次用戶密碼作業,請模擬注冊過程:用戶輸入用戶名后進行檢測用戶名是否在文件中的過程。并返回合理錯誤提示。如果不在則再輸入密碼,成功則增加用戶信息到文件中,密碼進行md5加密處理。
作業3-3增加用戶名,密碼的合法化判斷和錯誤提示。
用戶名:字母,數字,下劃線和橫線的組合,且首字符應是字母,長度不小于4
密碼:字母,數字,下劃線和橫線的組合,且長度不小于6
循環上一課的公交系統作業
利用循環語句將所有線路的linenum和stations保存到一個字典對象
執行后提示輸入公交站名字,在所有公交線路的stations里查詢該名字,并將包含有該名字的公交線路存到一個字進行返回。
課時16 3-1# coding:utf-8
import random
secret = random.randint(1,100)
guess,tries = 0,0
print u"你好,我很幸運,我是一個路過的神仙,我有一個秘密"
print u"我的秘密是一個從1到99的數字,我只會給你6次機會來猜."
print u"如果你猜到它,那說明你很幸運,趕緊去買彩票吧!"
while guess != secret and tries <6:
print u"你猜這個數字是多少?(1-100)"
guess_str =raw_input()
try:
guess = int(guess_str)
except:
print u"你輸入的不是整數,請重新輸入:"
continue
if guess == secret:
print u"哇~~,真的假的!你居然發現了我的秘密!它就是"
break
elif guess < secret:
print str(guess),u"太小了,你還差點運氣!"
elif guess > secret:
print str(guess),u"太大了,你還差點運氣!"
tries +=1
else:
print u"你唯一的機會已被你用完了!看來你還需要再攢點人品!"
print u"還是讓我告訴吧!這個數字:",str(secret)
3-2
# coding:utf-8
import random
secret = random.randint(1,100)
guess,tries = 0,0
print u"你好,我很幸運,我是一個路過的神仙,我有一個秘密"
print u"我的秘密是一個從1到99的數字,我只會給你6次機會來猜."
print u"如果你猜到它,那說明你很幸運,趕緊去買彩票吧!"
while guess != secret and tries <6:
print u"你猜這個數字是多少?(1-100)"
guess_str =raw_input()
try:
guess = int(guess_str)
except:
print u"你輸入的不是整數,請重新輸入:"
continue
if guess == secret:
print u"哇~~,真的假的!你居然發現了我的秘密!它就是"
break
elif guess < secret:
print str(guess),u"太小了,你還差點運氣!"
elif guess > secret:
print str(guess),u"太大了,你還差點運氣!"
tries +=1
else:
print u"你唯一的機會已被你用完了!看來你還需要再攢點人品!"
print u"還是讓我告訴吧!這個數字:",str(secret)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/37860.html
摘要:本文與大家分享一些編程語言的入門書籍,其中不乏經典。全書貫穿的主體是如何思考設計開發的方法,而具體的編程語言,只是提供一個具體場景方便介紹的媒介。入門入門容易理解而且讀起來幽默風趣,對于編程初學者和語言新手而言是理想的書籍。 本文與大家分享一些Python編程語言的入門書籍,其中不乏經典。我在這里分享的,大部分是這些書的英文版,如果有中文版的我也加上了。有關書籍的介紹,大部分截取自是官...
摘要:某熊的技術之路做些有趣的產品年初的時候,我就在想,今年的主題詞是什么上半年考慮的較多的是所謂研發效能的提升,下半年卻漸漸發現自己更多的會在想產品這兩個字。 showImg(https://segmentfault.com/img/remote/1460000016874425); 2018-某熊的技術之路: 做些有趣的產品 年初的時候,我就在想,今年的主題詞是什么;上半年考慮的較多的是...
摘要:將的,和包含全部請求參數的字符串存入管理器。如滿足條件,則當前請求不需要發起。如果參數不同,或者是人為操作,則視為兩個不同請求。此時取消中的,并將當前請求重新注冊。如果不設置此項,則只會保留最后一次,前面的請求會被掉。 先描述兩個場景: 快速點擊分頁碼1.2.3.4.5...。假設網絡不好或接口速度不佳,此時可能有多個pending中請求。而我們無法控制返回順序。假如用戶最后點擊到分...
摘要:如何更好的學習一門技術,去把它的官方文檔仔細看一遍最近這段時間一有空就會去刷一會官方文檔,寫點感受總結一下。官方文檔上的評論尤其要注意,有不少評論很有價值。 如何更好的學習一門技術,去把它的官方文檔仔細看一遍 最近這段時間一有空就會去刷一會 PHP 官方文檔,寫點感受總結一下。 起因 我開始學習編程應該算是在大二學 C語言 課程,到了大三自學 PHP,之后用這門語言做了七八個外包項目,...
摘要:安裝安裝用于數據科學的的最佳方法是使用發行版。但這只是展示了構建數據科學問題的不同方式中的機器學習這是一個重要的主題,機器學習正在風靡世界,是數據科學家工作的重要組成部分。 作為編程界的頭牌名媛,Python平易近人的態度和精明婉約的靈動深得各個大佬歡心。比如:人工智能、web開發、爬蟲、系統運維、數據分析與計算等等。這幾位風流多金的行業精英隨便哪個都能逆轉未來。 本文為你精心準備了一...
閱讀 4410·2021-11-24 10:46
閱讀 2074·2021-11-16 11:44
閱讀 2549·2021-09-22 16:02
閱讀 1631·2019-08-30 15:55
閱讀 1307·2019-08-30 12:46
閱讀 790·2019-08-28 18:31
閱讀 3048·2019-08-26 18:38
閱讀 1302·2019-08-23 16:51