# Python11 期第二次考试(基础数据类型与函数部分)# 考试时长:3个小时 满分:105分# 一,选择题(每题2分,共24分)# 1、python不支持的数据类型有## A、char## B、int## C、float## D、list# 2、## x = “foo”## y = 2## print(x+y)## A.foo B.foofoo C.foo2 D.2 E.TypeError # 3、关于字符串下列说法错误的是## A、字符串应该视为长度为1的字符串## B、字符串可以转化成数字## C、既可以用单引号,也可以用双引号创建字符串## D、在三引号字符串中可以包含换行回车等特殊字符## 4、以下不能创建一个字典的语句是## A、dic1 = {}## B、dic2 = {123:345}## C、dic3 = {[1,2,3]:‘uestc‘}## D、dic3 = {(1,2,3):‘uestc‘}## 5、Kvps = {‘1’:1,’2’:2}## theCopy = kvps## kvps[‘1’] = 5## sum = kvps[‘1’] + theCopy[‘1’]## print(sum)## A.1 B.2 C.7 D.10## 6、已知x=43,ch=‘A’,y = 1,则表达式(x>=y and ch <‘b’ and y)的值是# A、0 B、1 C、出错 D、True# 7、下列Python语句正确的事(多选)## A、min = x if x < y else y## B、max = x > y ? x : y## C、if(x>y) print(x)## D、while True:pass## 8、若k为整形,下述while循环执 的次数为:## k=1000# while k>1:# print(k)# k=k/2## A.9 B.10 C.11 D.100# 9、以下叙述正确的是:# A、continue语句的作用是结束整个循环的执行# B、只能在循环体内使用break语句# C、在循环体内使用break语句或continue语句的作用相同# D、从多层循环嵌套中退出时,只能使用goto语句# 10、下面的语句哪个会无限循环下去:## A、for a in range(10):# time.sleep(10)## B、while 1<10:# time.sleep(10)## C、while True:# break## D、a = [3,-1,‘,‘]# for i in a[:]:# if not a: break# 11、下列说法正确的是(多选,选错不得分):#这题有争议# A,# a = [1,2,3]# b = [1,2,3]# a与b指向同一个内存地址。# B,# i1 = 356# I2 = 356# i1 与 i2是同一个内存地址。# C,# s1 = ‘laonanhai’# s2 = ‘laonanhai’# s1 与 s2 是同一个内存地址。# D,tu = (1) tu是元组类型。# 12、下面的代码,哪些会输出1,2,3三个数字(多选,选错不得分):# A、# for i in range(3):## print(i)## print(i+1)# B、# aList = [0,1,2]# for i in aList:# print(i+1)# C、# i = 1# while i < 3:# print(i)# i+=1# D、# for i in range(3):# print(i+1) #答案1.A 2.E 3.A 4.C 5.D 6.B 7.AD 8.B 9.B 10.B 11.C 12.ABD # 二,简答题(共42分)# 1、is 和 == 的区别 (2分)#答:is是内存地址的比较,‘==’是数值比较# 2、Python 如何实现tuple和list的转换。(2分)#答:# # 元祖转换列表:# tu=(1,2,3)# li=list(tu)# print(li)# # 列表转换元祖:# li=[1,2,4]# tu1=tuple(li)# print(tu1)# 3、list和tuple有什么不同 (2分)#答:1,list列表属于可变数据类型,tuple属于不可变数据类型;2,list可以进行增删改查的动作,tuple一般不能动,儿# 子不能改,孙子可以改。tuple只可以查看# 4、*args和**kwargs在什么情况下会使到?请给出使 **kwargs的事例(2分)#答:在传参不确定有几个参数的时候会使用到,(动态传参)# def func(*args,**kwargs):# print(111)# print(func(1,2,3,a=4,b=5)) # 5、Python中什么数据类型存在小数据池?小数据池有什么作用?(2分)#答:int,-5---256以内有小数据池,str有特殊字符不存在小数据池。作用:节省内存空间# 6、在Python3x版本中,s1 = ‘老男孩’,如何将s1转化成utf-8的bytes类型?转化成功之后,得到了s2,如何将s2转化成# gbk的bytes类型(请写出具体代码)?(3分)# 答:# s1=‘老男孩‘# s2=s1.encode(‘utf-8‘)# print(s2)# s3=s2.decode(‘utf-8‘)# s4=s3.encode(‘gbk‘)# print(s4) # 7、有如下操作,最后dic的结果是什么?为什么?(2分)# dic = dict.fromkeys([‘barry‘,‘alex‘,],[])# dic[‘barry‘].append(666)# print(dic)#答:{‘barry‘: [666], ‘alex‘: [666]} 因为字典里两个K对应的列表是同一个列表。默认参数为可变数据类型# 8、请描述unicode,utf-8,gbk等编码之间的关系?(2分)#unicode为非bytes类型,python3默认此编码,utf-8和gbk编码为bytes类型,三者之间可以转换,解码用encode,编码用decode# 9、l = [1,1,2,2,3,4,5,5,6,6,7,8]将此列表去重。(2分)# 答:list(set(l))# 10、有如下代码,写出最后结果,并解释为什么。(3分)# l1 = [1,[22,33,44],3,4,]# l2 = l1# l3 = 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]# 原因:赋值运算公用一个内存地址,python执行顺序为从上到下依次执行,l1增加了两个元素,l2跟l1一样,浅copy,l3不增加666# 11、有如下代码,说出l1与l2的关系?(2分)# l1 = [1,2,3,4,5]# l2 = l1[:]#答:l2对1进行切片操作,结果为[1, 2, 3, 4, 5],浅copy# 12、‘1,2,3’如何变成[‘1’,’2’,’3’]? [‘1’,’2’,’3’]如何变成[1,2,3]?(写具体代码)(4分)#答:# s= ‘1,2,3‘# l1 = s.strip().split(‘,‘)# print(l1)# l2=[]# for i in l1:# l2.append(eval(i))# print(l2) # 13、如何生成[1,4,9,16,25,36,64,81,100]尽量用一行实现。(2分)#答:# l=[i**2 for i in range(1,11)]# print(l)# 14、map(str,[1,2,3,4,5,6,7,8,9])输出什么?(2分)#答:迭代器或者迭代器地址或者map对象# 15、下面代码输出结果是什么?两次list1的结果相同么?为什么?(4分)# def extendList(val,list=[]):# list.append(val)# return list# list1 = extendList(10)# print(‘list1=%s‘%list1)# list2 = extendList(123,[])# print(‘list2=%s‘%list2)# list3 = extendList(‘a‘)# print(‘list3=%s‘%list3)# print(‘list1=%s‘%list1)# 答:list1=[10]# list2=[123]# list3=[10, ‘a‘]# list1=[10, ‘a‘]# 不相同,默认参数为可变数据类型,指向的是同一个# 16、下面代码的执行结果是什么?为什么?(4分)# a = 1# def func1():# global a# a += 1# print(a)# func1()# 答:报错# 这段代码呢?# def wrapper():# a = 1# def inner():# nonlocal a# a += 1# print(a)# inner()# wrapper()# 答:内部作用域不能对外部作用域的变量进行改变。# 17、什么是闭包(closure),为什么要用它?(2分)#答:闭包就是内层函数对外层函数(非全局)变量的引用。#闭包有节省内存空间的作用,能开辟一个特殊的空间,保存变量数据,还能方便函数调用,可以作为装饰器的一部分装饰函数,所以要用他# 三,代码题。## 1、用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb# name=[‘oldboy’,‘alex‘,‘wusir‘](4分)map lambda# name=[‘oldboy‘,‘alex‘,‘wusir‘]# ret = map(lambda x:x+‘_sb‘,[‘oldboy‘,‘alex‘,‘wusir‘])# for i in ret:# print(i) # 2,用filter函数过滤出单价大于100的股票。(4分)# portfolio = [# {‘name‘: ‘IBM‘, ‘shares‘: 100, ‘price‘: 91.1},# {‘name‘: ‘AAPL‘, ‘shares‘: 50, ‘price‘: 543.22},# {‘name‘: ‘FB‘, ‘shares‘: 200, ‘price‘: 21.09},# {‘name‘: ‘HPQ‘, ‘shares‘: 35, ‘price‘: 31.75},# {‘name‘: ‘YHOO‘, ‘shares‘: 45, ‘price‘: 16.35},# {‘name‘: ‘ACME‘, ‘shares‘: 75, ‘price‘: 115.65}]# 答: # m = filter(lambda k: k[‘price‘] > 100, portfolio)# print(list(m))# # 3,有文件t1.txt里面的内容为:(6分)# id,name,age,phone,job# 1,alex,22,13651054608,IT# 2,wusir,23,13304320533,Tearcher# 3,taibai,18,1333235322,IT# 利用文件操作,将其构造成如下数据类型。# [{‘id‘:‘1‘,‘name‘:‘alex‘,‘age‘:‘22‘,‘phone‘:‘13651054608‘,‘job‘:‘IT‘},# ......]#答:# l1 = []# with open(‘t1.txt‘,encoding=‘utf-8‘) as f1:# l2 = f1.readline().strip().split(‘,‘)# for i in f1:# l3 = i.strip().split(‘,‘)# dic = {}# for j in range(len(l3)):# dic[l2[j]] = l3[j]# l1.append(dic)# print(l1) ## 4,写程序完成下列功能:(20分,有5分加分项,共计25分)## 1),启动程序,首页面应该显示成如下格式:# 欢迎来到博客园首页# 1:请登录# 2:请注册# 3:文章页面# 4:日记页面# 5:评论页面# 6:收藏页面# 7:注销# 8:退出程序# 2),用户输入选项,3~6选项必须在用户登录成功之后,才能访问成功。# 3),用户选择登录,用户名密码从register文件中读取验证,三次机会,没成功则结束整个程序运行,# 成功之后,可以选择访问3~6项,访问页面之前,必须要在log文件中打印日志,# 日志格式为-->用户:xx 在xx年xx月xx日 执行了 %s函数,访问页面时,页面内容为:欢 迎xx用户访问评论# (文章,日记,收藏)页面# 4),如果用户没有注册,则可以选择注册,注册成功之后,可以自动完成登录(完成自动登录+5 分),# 然后进入首页选择。# 5),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。# 6),退出程序为结束整个程序运行。#答: status_dic = { ‘username‘: None, ‘status‘: False,} flag1 = True def login(*args,**kwargs): i = 0 while i < 3: if args: status_dic[‘username‘] = args[0] status_dic[‘status‘] = True return True else: username = input(‘请输入用户名:‘).strip() password = input(‘请输入密码:‘).strip() with open(‘register‘,encoding=‘utf-8‘) as f1: for line in f1: line_list = line.strip().split() if username == line_list[0] and password == line_list[1]: print(‘登录成功‘) status_dic[‘username‘] = username status_dic[‘status‘] = True return True else: print(‘输入不正确,请重新输入,还剩%s机会‘ % (2-i)) if i == 2: return Quit() i += 1 def register(*args, **kwargs): flag = True while flag: username = input(‘请输入要注册的用户名:‘) f1 = open(‘register‘,encoding=‘utf-8‘) for i in f1: if username in i: print(‘用户名重复,请重新输入‘) f1.close() break else: f1.close() password = input(‘请输入要注册的密码:‘).strip() f2 = open(‘register‘, encoding=‘utf-8‘, mode=‘a‘) f2.write(‘\n{}\t{}‘.format(username, password)) f2.close() print(‘恭喜你,注册成功,已经自动为您登录,现在跳转到首页...‘) return login(username,password) def wrapper(func): #func 函数名 def inner(*args,**kwargs): #2 if status_dic[‘status‘]: ret = func(*args,**kwargs) #4 return ret else: print(‘请先进行登录‘) if login(): ret = func(*args, **kwargs) return ret return innerimport timedef log_record(func): #func==inner1 def inner(*args,**kwargs): #1 struct_time = time.localtime() time_now = time.strftime("%Y-%m-%d %H:%M:%S", struct_time) with open(‘log_func‘,‘a‘,encoding=‘utf-8‘) as f1: f1.write(‘用户:%s 在%s 执行了 %s函数\n‘%(status_dic[‘username‘],time_now,func.__name__)) ret = func(*args,**kwargs) #5 return ret return inner @wrapper #article = wrapper(article) 里article==inner1 外article==inner2@log_record # article=log_record(article) 里article,函数名 外article==inner1def article(): #3 print(‘欢迎%s访问文章页面‘ % status_dic[‘username‘]) @wrapper@log_recorddef diary(): print(‘欢迎%s访问日记页面‘ % status_dic[‘username‘]) @wrapper@log_recorddef comment(): print(‘欢迎%s访问评论页面‘ % status_dic[‘username‘]) @wrapper@log_recorddef enshrine(): print(‘欢迎%s访问收藏页面‘ % status_dic[‘username‘]) def login_out(): status_dic[‘username‘] = None status_dic[‘status‘] = False print(‘注销成功‘) def Quit(): global flag1 flag1 = False return flag1 choice_dict = {1: login,2: register,3: article,4: diary,5: comment,6: enshrine,7: login_out,8: Quit,} while flag1: print(‘欢迎来到博客园首页\n1:请登录\n2:请注册\n3:文章页面\n4:日记页面\n5:评论页面\n6:收藏页面\n7:注销\n8:退出程序‘) choice = input(‘请输入您选择的序号:‘).strip() if choice.isdigit(): choice = int(choice) if 0 < choice <= len(choice_dict): choice_dict[choice]() else: print(‘您输入的超出范围,请重新输入‘) else: print(‘您输入的选项有非法字符,请重新输入。‘)
原文地址:https://www.cnblogs.com/zzw731862651/p/8762206.html
时间: 2024-11-12 23:27:06