Python第二周笔记
2019年3月25日
文章目录
Day-1
上周复习,做练习题,记笔记
Day-2
项目二:用户管理系统
# -*- coding: UTF-8 -*-
#用户管理系统
print('''
===================
用户管理系统
1.添加一个新用户信息
2.查询一个用户信息
3.显示所有的用户信息
4.删除一个用户信息
5.修改一个用户信息
6.退出系统
===================
''')
d={'zq':['123456','654321','ddddd']}
def f1():
a1=input('请输入新用户名:')
a2=input('请输入新用户微信号:')
d.setdefault(a1,[]).append(a2)
a3=input('请输入新用户手机号:')
d.setdefault(a1,[]).append(a3)
a4=input('请输入新用户的地址:')
d.setdefault(a1,[]).append(a4)
print('添加成功')
def f2(): #查询
l=[]
b1=input('请输入要查询的姓名:')
a=d.get(b1)
for i in a:
l.append(i)
print(b1,' '.join(l))
def f3(): #显示所有的用户信息
keys = list(d.keys())
l=[]
for b1 in keys:
a=d.get(b1)
print('''姓名 微信号 手机号 住址 ''')
print(b1,' ',' '.join(a))
def f4(): #删除一个用户信息
c1=input('请输入要删除的姓名:')
del d[c1]
print('删除成功')
def f5(): #修改一个用户信息
l=[]
d1=input('请输入要改的姓名信息:')
a=d.get(d1)
for i in a:
l.append(i)
print(d1,' '.join(l))
d2=input('修改的姓名是:')
d[d2] = d.pop(d1)
print('修改成功')
def menu(x):
if x==1:
f1()
elif x==2:
f2()
elif x==3:
f3()
elif x==4:
f4()
elif x==5:
f5()
elif x==6:
exit()
else:
print('输入错误')
return
n=int(input('请输入操作序号:'))
menu(n)
while True:
n=int(input('请输入操作序号:'))
menu(n)
Day-3
明白跟使用还是有差距的
一、函数进阶
-
MAP
#初级版本 items=[1,2,3,4,5] squared=[] for i in items: squared.append(i**2) #进阶版本 items=[1,2,3,4,5] squared=list(map(lambda x:x**2,items))题目一: 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
def test(name_list): print(map(lambda name:name[0].upper()+name[1:].lower,name_list)) >>>test( ['adam', 'LISA', 'barT']) -
Filter
filter能创建⼀个列表,其中每个元素都是对⼀个函数能返回True.
# -*- coding: UTF-8 -*- #判断是不是素数,不是返回TRUE,是返回False def not_prime(num): if(num < 2): return True judge = 2 while(judge < num): if num%judge == 0: return True judge += 1 return False #将一个数字列表中所有的素数过滤删除掉 def prime_number(num_list): print(list(filter(not_prime,num_list))) #删除1-100以内的素数 prime_number(range(100)) print(not_prime(2)) -
Reduce
reduce()把一个函数作用在一个序列[x1, x2, x3…]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
语法:
>>>reduce(function, iterable[ ,nitialiser])· function – 函数,有两个参数
· iterable – 可迭代对象
· initializer – 可选,初始参数
二、模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
from fib import fibonacci #from 模块名 import 函数名
import module1[, module2[,... moduleN]]#模块名.函数名
from modname import * #导入模块所有项目
-
dir()函数 :显示模块的内容
import math content = dir(math) print content -
reload()函数:重新导入之前导过的模块,reload(hello)
-
globals() 和 locals() 函数:返回全局和局部命名空间里的名字
-
python的包:包就是文件夹
test.py package_runoob |-- __init__.py |-- runoob1.py |-- runoob2.py
三、 文件方法
一种类型的对象,类似前面已经学习过的其它
数据类型,包括文本的、图片的、音频的、视频的等等,还有不少没见过的扩展名的。
f = open("130.txt") #打开已经存在的文件
for line in f:
print line #打印文件内容
nf = open("131.txt","w") #创建文件内容
nf.write("This is a file")
f.close()#一定要关掉
Day-4
关于****open 模式:
w 以写方式打开,如果没有则会创建,有则覆盖。
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件),没有则创建
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
fp.read([size]) #size为读取的长度,以byte为单位
fp.readline([size]) #读一行,size返回的是一行的部分 ,超过则返回一行到\n
fp.readlines([size]) #把文件每一行作为一个list的成员返回这个list。
fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。只写入,不会在每行后面加上任何东西。
fp.close() #关闭文件。
fp.flush() #把缓冲区的内容写入硬盘
fp.fileno() #返回一个长整型的”文件标签“
fp.isatty() #文件是否是一个终端设备文件(unix系统中的)
fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点
fp.next() #返回下一行,并将文件操作标记位移到下一行。
fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。
fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。
fileObject.seek(offset[, whence])
offset : 开始的偏移量,也就是代表需要移动偏移的字节数
**whence:**可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
一、正则表达式
[] 表示范围
[0-9a-zA-Z_]可以匹配一个数字、字母或者下划线
[0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串
[a-zA-Z_] [0-9a-zA-Z_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B可以匹配A或B,所以(P|p)ython可以匹配’Python’或者’python’。
^:行的开头 ^\d:必须以数字开头
$行的结束 \d:必须以数字开头
贪婪匹配:正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
re模块
import re
print(re.match(r'^\d{3}\-\d{3,8}$', '010-12345'))
>>><re.Match object; span=(0, 9), match='010-12345'>
Day5
项目地址:
https://www.edureka.co/blog/python-projects/
https://www.geeksforgeeks.org/computer-science-projects/#Python
一、错误和异常
-
语法错误:SyntaxError:invalid syntax
>>> while True print('Hello world') File "<stdin>", line 1, in ? while True print('Hello world') SyntaxError: invalid syntax -
异常
>>> 10 * (1/0) Traceback (most recent call last): File "<stdin>", line 1, in ? ZeroDivisionError: division by zero >>> 4 + spam*3 Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: Can't convert 'int' object to str implicitly -
异常处理
try语句按照如下方式工作;
首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:
except (RuntimeError, TypeError, NameError):
pass
最后一个except子句可以忽略异常的名称,它将被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。
>>> while True:
try:
x=int(input("Please enter a number: "))
break
except ValueError:
print("Oops!That was no valid number. Try again")
raise 语句抛出一个指定的异常,raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
>>> raise NameError('HiThere')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: HiThere
异常类继承自Exception 类,可以直接继承,或者间接继承
当创建一个模块有可能抛出多种不同的异常时,一种通常的做法是为这个包建立一个基础异常类,然后基于这个基础类为不同的错误情况创建不同的子类:
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try 语句还有另外一个可选的子句,它定义了无论在任何情况下都会执行的清理行为。
>>> try:
raise KeyboardInterrupt
finally:
print('Goodbye, world!')
Goodbye, world!
KeyboardInterrupt
一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。
for line in open("myfile.txt"):
print(line, end="")
二、面向对象
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板
class Student(object):
pass
第一个参数永远是self,表示创建的实例本身在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去
lass Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
class Student(object):
...
def get_grade(self):
if self.score >= 90:
return 'A'
elif self.score >= 60:
return 'B'
else:
return 'C'