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]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。

  • Time 模块
  • read/readline/readlines

    EOF:end-of-file

    /n: 返行

  • seek:让指针移动,以字节为单位进行移动
fileObject.seek(offset[, whence])

offset : 开始的偏移量,也就是代表需要移动偏移的字节数

​ **whence:**可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

一、正则表达式

  • 基础

Python第二周笔记Python第二周笔记

  • 进阶

[] 表示范围

[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://knightlab.northwestern.edu/2014/06/05/five-mini-programming-projects-for-the-python-beginner/

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

  • __init__方法:

第一个参数永远是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'

相关文章: