python学习day6

# _*_ coding:utf-8 _*_"""老男孩教育python学院第二次考试(基础数据类型与函数部分)考试时长:3个小时                             满分:100分一,选择题(每题2分,共30分)一、如下说法正确的是: DA、Python中str的单引号与双引号有区别B、python3x版本默认编码方式为unicode。C、Python设置变量能够为and。D、Python3x版本中的input输入的字符串类型。二、此代码的运行结果为:while flag:   A          print(1)          print(2)          flag = False          print(4)   A、1  2  B、1 2 1 2.....  C、1 2 4   D、1 2 4 1 2 4........三、下面代码的结果为:Dname = ‘alex’a = ‘3’print(name*a)A、alexalexalex  B、 alex3   C、3alex   D、TypeError四、如下说法错误的是:DA、ASCII码只包含数字,字母,特殊字符。B、unicode有两个版本,第一个版本是一个字符用两个字节表示,第二个版本是一个字符用四个字节表示。C、utf-8中,一个字节用三个字符表示。D、gbk只包含英文,数字,特殊字符,和中文。五、计算一下这个不等式的结果: D1 > 2 and  3  or   6A、True       B.False       C. 3           D.6六、‘老男孩’用utf-8编码须要几个字节表示? CA、3      B、6    C、9   D、12七、在Python3x中:a = b‘alex’,如何将a转化成 ‘alex’? BA、a.encode(‘utf-8’)  B、a.decode()  C、bytes(a)  D、str(a)八、count在内存中最终等于: Ccount = 1   while count < 9:       print(count)       count += 1A.7       B.8       C.9         D.6九、如下叙述正确的是:BA、continue语句的做用是结束整个循环的执行B、只能在循环体内使用break语句C、在循环体内使用break语句或continue语句的做用相同D、从多层循环嵌套中退出时,只能使用quit语句十、a = ‘老男孩教育’,a[:6]的结果为:   AA、‘老男孩教育’ B、‘’  C、TypeError   D、‘老男孩教育老男’十一、下列说法正确的是(多选) : A  BA,字符串的capitalize()为首字母大写,其他字母小写。B,列表的pop为经过索引删除,且有返回值。C,字典的remove为经过键删除字典的键值对。D,元组为只读列表,只能进行增和查。十二、下列表达正确的是(多选):B C DA、字典中的keys()方法是将字典的全部键都存放至一个列表中。B、给一个列表extend(‘ab3’)其实是添加了a,b,3三个字符串。C、s1=‘alex@’,s2=‘alex@’,print(s1 is s2) 为True。D、‘abc’.encode(‘utf-8’).decode(‘gbk’) 结果为‘abc’。1三、下列表达正确的是(多选):B CA、a =(1,) a为int类型。B、l1 = [1,2,3] l2 = l1 l1.append(666) print(l2)结果为[1,2,3,666]C、l1 = [22,33,44] l2 = l1[:] l1与l2的关系为浅copy。D、集合是无序的不重复的,里面的元素要求是不可哈希的。1四、选出你认为正确的答案(多选):B DA、在文件操做中,r+模式只能读写,不能写读。B、函数是以功能为导向的。C、文件操做中,将光标移动至末尾是seek(0,1)。D、函数的*args在默认参数前面。1五、下列说法正确的是(多选):B DA、函数的return的是将值返回给函数名。B、函数的实参的位置参数在关键字参数前面。C、全局做用域包含内置名称空间和局部名称空间。D、函数名被视为第一类对象。二,填空题(10分)。def calc(a, b, c, d=1, e=2):    return a + b + c - d - e请分别写出下列标号代码的输出结果,若是出错请写出Error。print(calc(1, 2, 3, 4, 5))___ - 3__print(calc(1, 2))__TypeError__print(calc(e=4, c=5, a=2, b=3))___5print(calc(1, 2, 3))_____3print(calc(1, 2, 3, d=5, 4))____SyntaxError_获取list的元素个数,和向末尾追加元素所用的方法是___append_, ____.extend不依赖中间变量,交换变量a和b的值得表达式是________a, b = b, a_________________.list = [1, 2, 3, 4, 5]print(list[10:])答案是什么?______[]______.如何经过一行语句建立一个这样的字典{1: 'alex', 2: 'alex', 3: 'alex'}?不能直接写dic = {1: 'alex', 2: 'alex', 3: 'alex'})____________________________.dd = eval("{1: 'alex', 2: 'alex', 3: 'alex'}")三,简答题(共20分)一、 is 和 == 的区别 (1分)== 值is对象二、Python如何实现tuple和list的转换。(1分)tl = tuple(l1)lt = list(tl)三、list和tuple有什么不一样 (1分)list可变,不可哈希,不可比较,tuple不可变,可哈希,可比较,查询速度较快四、*args和 ** kwargs在什么状况下会使到?请给出使 ** kwargs的事例(2分)*args位置参数不肯定数量, ** kwargs默认参数不肯定数量五、Python中什么数据类型存在小数据池?小数据池有什么做用?(1分)str: 1)不能含有特殊字符2)单个元素 * int不能超过21, 节省内存六、在Python3x版本中,s1 = ‘老男孩’,如何将s1转化成utf - 8的bytes类型?转化成功以后,获得了s2,如何将s2转化成gbk的bytes类型(请写出具体代码)?(2分)s1 = '老男孩's2 = s1.encode(encoding='utf-8')print(s2)s3 = s2.decode(encoding='utf-8').encode(encoding='gbk')print(s3)七、下面代码有没有问题?若是有问题请指出来(2分)?f = open('a.txt', encoding='utf-8')f.write('666')默认读模式打开文件,不能写入,不然会抛出异常八、l = [1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8]将此列表去重。(1分)l = list(set(l))九、有以下代码,写出最后结果,并解释为何。(2分)l1 = [1, [22, 33, 44], 3, 4, ]l2 = l1l3 = l1.copy()l1.append(666)l1[1].append('55')Print(l1, l2, l3)[1, [22, 33, 44, '55'], 3, 4, 666][1, [22, 33, 44, '55'], 3, 4, 666][1, [22, 33, 44, '55'], 3, 4]l2和l1指向同一个对象故l2和l1结果同样l3和l1是浅COPY,因此666没有添加成功十、‘1, 2, 3’如何变成[‘1’, ’2’, ’3’]? [‘1’, ’2’, ’3’]如何变成[1, 2, 3]?(写具体代码)(2分)"""print('1,2,3'.split(','))print(','.join(['1', '2', '3']))"""十一、什么是闭包(closure),为何要用它?(2分)闭包:内层函数对外层函数非全局变量的引用12,global有什么用?nonlocal又是干什么的?(2分)global 实现引用并修改全局变量nonlocal不能操做全局变量从哪层引用的从那层开始所有改变"""#13,如何终止while循环?(1分)#break"""四,编程题。一、有文件t1.txt里面的内容为:(6分)1, alex, 22, 13651054608, IT2, wusir, 23, 13304320533, Tearcher3, taibai, 18, 1333235322, IT利用文件操做,将其构形成以下数据类型。[{'id': '1', 'name': 'alex', 'age': '22', 'phone': '13651054608', 'job': 'IT'}, ......]"""with open('t1.txt') as ff:    l1 = []    for l in ff.readlines():        d = {}        s = l.strip().split(',')        print(s)        for n in range(len(s)):            d[s[n]] = s[n]        l1.append(d)print(l1)"""二、写函数,完成如下功能:(6分)用户将文件名(文件前提必须存在),操做方法(只有r, w, a三种)传入此函数,此函数按照传入的参数完成相应的操做。例如:"""def func(path, mode, *args):    pass"""func(‘a.txt’, ’r’) 此函数完成的就是以读的模式打开a.txt文件,并打印出来。func(‘a.txt’, ’w’, ’老男孩教育’)此函数完成的就是以写的模式打开a.txt文件,将内容写入。func(‘a.txt’, ’a’, ’老男孩教育’)此函数完成的就是以追加的模式打开a.txt文件,将内容追加。"""def func(path, mode, text=None):    try:        f = open(path, mode)    except:        print('Can not find file')    dirc = {        'w': f.write,        'r': f.read,        'a': f.write    }    if (mode in list(dirc.keys())):        if (dirc.get(mode)):            return dirc.get(mode)(text) if text else dirc.get(mode)()        f.close()    else:        print('not support mode')print(func('a.txt', 'w', '老男孩教育'))print(func('a.txt', 'a', '老男孩教育'))print(func('a.txt', 'r'))"""三、写函数完成如下功能:(6分)给函数传入一个列表(此列表里面的元素必须所有是str类型),将列表中的每一个元素按照顺序依次加上他们的索引,造成新的元素,并添加到一个新列表,将新列表返回。例如:给函数传入一个列表[‘alex’, ’太白’],返回值为[‘alex0’, ’太白1’]"""def indexlist(s):    return [str(i) + s[i] for i in range(len(s))]#4,写一个函数,完成注册的功能,将用户名,密码写入到文件中(用户名不能重复,若是重复提示他从新输入)。再写一个函数,完成三次登陆功能,帐号密码从注册的文件中获取。(12#分)import timestatus_dict={    'username':None,    'status':False,}def wrapper_log(l): #日志装饰器,用于打印用户访问3~6功能日志。    def inner_log(*args,**kwargs):        re = l(*args,**kwargs)        while True:            with open("log", encoding="utf-8", mode="a") as f2:                f2.write("\n用户: %s 在 %s 执行了  %s  函数,访问页面时,页面内容为:欢迎%s用户访问 %s" % \                         (status_dict["username"], time.strftime("%Y-%m-%d %H:%M:%S"),l.__name__,status_dict["username"],choice_dict[choice][0]))                return True        return re    return inner_logdef wrapper_login(loging): #登录认证装饰器,用于若是用户没有登录选择3~6功能会提醒用户进行登录。    def inner_loging(*args,**kwargs):        reg = loging(*args, **kwargs)        if status_dict["username"] is not None and status_dict["status"] == True:            print("欢迎"+status_dict["username"]+"用户,访问"+choice_dict[choice][0]+"")        else:            print("您尚未登录,不能使用此模块。")            return False        return reg    return inner_logingdef login(): #登录函数    i = 0    while i < 3:        username = input('请输入用户名:').strip()        password = input('请输入密码:').strip()        if status_dict["username"] is not None and status_dict["status"] == True:            print("用户"+status_dict["username"]+"已登录,请注销后从新登录。")            break        with open('register',encoding='utf-8') as f1:            for line in f1:                line_list = line.strip().replace(',', ',').split(',')                if username == line_list[0] and password==line_list[1]:                    print('登陆成功...')                    status_dict['username'] = username                    status_dict['status'] = True                    return True            else:                print('帐号或者密码不正确,请从新输入')                i += 1                if i == 3:                    exit()def regiter(*args,**kwargs): #注册函数    while True:        username = input('请输入注册用户名:').strip()        password = input('请输入用户名密码:').strip()        with open('register',encoding='utf-8') as f1:            for line in f1:                line_list = line.strip().replace(',', ',').split(',')                if username == line_list[0]:                    print('用户名存在,请从新输入!')                    break            else:                with open('register',encoding='utf-8',mode='a') as f2:                    f2.write('\n{},{}'.format(username,password))                    print('注册成功')                    return True#调用装饰器@wrapper_login@wrapper_logdef article_page(): #文章页面函数    print("请编辑文章。")@wrapper_login@wrapper_logdef diary_page(): #日志页面函数    print("请编辑日志。")@wrapper_login@wrapper_logdef comment_page(): #评论页面函数    print("请评论。")@wrapper_login@wrapper_logdef collection_page(): #收藏页面函数    print("请收藏")def logout(): #注销函数    print("确认注销%s用户?输入y注销用户,输入n返回。" % status_dict["username"])    while True:        user_choice = input("请输入选项:")        if user_choice == "y":            status_dict["username"] = None            status_dict["status"] = False            print("注销成功,已返回登录界面。")            login()            return True        elif user_choice == "n":            return False        else:            print("您输入的选项不正确,请从新输入。")def exit_program(): #退出程序函数    print("确认要退出程序?输入y退出,输入n返回。" % status_dict["username"])    while True:        user = input("请输入选项:")        if user == "y":            print("退出程序成功。")            exit()        elif user == "n":            return False        else:            print("您输入的选项不正确,请从新输入。")choice_dict = {    1: ['登陆', login],    2: ['注册', regiter],    3: ['文章页面',article_page],    4: ['日记页面', diary_page],    5: ['评论页面', comment_page],    6: ['收藏页面', collection_page],    7: ['注销', logout],    8: ['退出程序',exit_program],}while True:    print("欢迎来到博客园")    for (k, v) in choice_dict.items():        print(k, v[0])    choice = input("请输入选项:")    if choice.isdigit():        choice = int(choice)        if 0 < choice< len(choice_dict)+1:            choice_dict[choice][-1]()            continue    else:        print("超出范围,请从新输入!")
相关文章
相关标签/搜索