python自学之路-进阶习题篇(三)异常篇

1 定义一个函数func(filename) filename:文件的路径,函数功能:打开文件,并且返回文件内容,最后关闭,用异常来处理可能发生的错误。

def fuc(fn):
    try:
        with open(fn, "r") as f:
            a = f.read()
    except Exception as e:
        return e
    else:
        return a

print(fuc("1.txt"))

2 定义一个函数func(urllist)   urllist:为URL的列表,例如:['http://xx.com','http://www.xx.com','http://www.xxx.com'...] 

import logging,urllib.request
logger = logging.getLogger()
hdlr = logging.FileHandler('sendlog.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.NOTSET)
def func(urllist):

    for i in urllist:
        try:
            f=urllib.request.urlopen(i)
        except Exception as e:
            logging.error(e)
        else:
            print(f.read())


print(func(["https://www.baidu.com","https:12313245"]))

函数功能:要求依次打开url,打印url对应的内容,如果有的url打不开,则把url记录到日志文件里,并且跳过继续访问下个url。

3 有10个刷卡机,代表建立10个线程,每个刷卡机每次扣除用户一块钱进入总账中,每个刷卡机每天一共被刷100次。账户原有500块。所以当天最后的总账应该为1500。(提示:用多线程的方式来解决)

import threading
mlock=threading.Lock()
num=500
def a():
    global num
    for i in range(0,100):
        mlock.acquire()
        num+=1
        mlock.release()

l=[]
for i in range(10):
    d=threading.Thread(target=a)
    d.start()
    l.append(d)
for i in l:
    i.join()
    
print(num)

4 用生成器yield实现斐波拉切数列。

def fblq(num):
    x,y=1,1
    f=[x]
    while y

[0-9] \d 全部数字 

\w 单词类字符 a-z A-Z 0-9 _
\W 非单词类字符

{2}  {n}  前面的表达式匹配n次
{0,2} {m,n} 前面的表达式匹配m到n次

+ 前面的表达式,出现1到无限次  最少,出现1次
? 前面的表达式,出现0到1次  最多,出现1次
* 前面的表达式,出现0到无限次 出现不出现,都没关系

你可能感兴趣的:(python自学之路-进阶习题篇(三)异常篇)