资讯专栏INFORMATION COLUMN

【学习笔记】用python做些事

wdzgege / 1356人阅读

摘要:并返回合理错误提示。如果不在则再输入密码,成功则增加用户信息到文件中,密码进行加密处理。作业增加用户名,密码的合法化判断和错误提示。

课时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

课时6:字符串-re
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^$)
分组:()
编译选项:ILMSUX

^    start
$    end
.    except 

+    1-inf
*    0-inf
?    0-1
[]    or
{}    repeat
[^]   not

课时7 日期和时间 Datetime
日期:                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  

课时12 赋值,输入输出语句 赋值
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

作业3-4

循环上一课的公交系统作业

利用循环语句将所有线路的linenumstations保存到一个字典对象

执行后提示输入公交站名字,在所有公交线路的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)

课时16 作业参考

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37860.html

相关文章

  • 编程书单:十本Python编程语言的入门书籍

    摘要:本文与大家分享一些编程语言的入门书籍,其中不乏经典。全书贯穿的主体是如何思考设计开发的方法,而具体的编程语言,只是提供一个具体场景方便介绍的媒介。入门入门容易理解而且读起来幽默风趣,对于编程初学者和语言新手而言是理想的书籍。 本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。我在这里分享的,大部分是这些书的英文版,如果有中文版的我也加上了。有关书籍的介绍,大部分截取自是官...

    desdik 评论0 收藏0
  • 2018-某熊的技术之路: 做些有趣的产品

    摘要:某熊的技术之路做些有趣的产品年初的时候,我就在想,今年的主题词是什么上半年考虑的较多的是所谓研发效能的提升,下半年却渐渐发现自己更多的会在想产品这两个字。 showImg(https://segmentfault.com/img/remote/1460000016874425); 2018-某熊的技术之路: 做些有趣的产品 年初的时候,我就在想,今年的主题词是什么;上半年考虑的较多的是...

    30e8336b8229 评论0 收藏0
  • Ajax 如何保证请求接口数据符合预期?如何去重?

    摘要:将的,和包含全部请求参数的字符串存入管理器。如满足条件,则当前请求不需要发起。如果参数不同,或者是人为操作,则视为两个不同请求。此时取消中的,并将当前请求重新注册。如果不设置此项,则只会保留最后一次,前面的请求会被掉。 先描述两个场景: 快速点击分页码1.2.3.4.5...。假设网络不好或接口速度不佳,此时可能有多个pending中请求。而我们无法控制返回顺序。假如用户最后点击到分...

    Darkgel 评论0 收藏0
  • 关于阅读技术文档的一点心得

    摘要:如何更好的学习一门技术,去把它的官方文档仔细看一遍最近这段时间一有空就会去刷一会官方文档,写点感受总结一下。官方文档上的评论尤其要注意,有不少评论很有价值。 如何更好的学习一门技术,去把它的官方文档仔细看一遍 最近这段时间一有空就会去刷一会 PHP 官方文档,写点感受总结一下。 起因 我开始学习编程应该算是在大二学 C语言 课程,到了大三自学 PHP,之后用这门语言做了七八个外包项目,...

    booster 评论0 收藏0
  • 编程界的“头牌”名媛:Python,14个与数据科学的“暧昧情事”

    摘要:安装安装用于数据科学的的最佳方法是使用发行版。但这只是展示了构建数据科学问题的不同方式中的机器学习这是一个重要的主题,机器学习正在风靡世界,是数据科学家工作的重要组成部分。 作为编程界的头牌名媛,Python平易近人的态度和精明婉约的灵动深得各个大佬欢心。比如:人工智能、web开发、爬虫、系统运维、数据分析与计算等等。这几位风流多金的行业精英随便哪个都能逆转未来。 本文为你精心准备了一...

    Labradors 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<