第二次考试 试题
Posted zzw731862651
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二次考试 试题相关的知识,希望对你有一定的参考价值。
# 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 inner
import time
def 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==inner1
def article(): #3
print(‘欢迎%s访问文章页面‘ % status_dic[‘username‘])
@wrapper
@log_record
def diary():
print(‘欢迎%s访问日记页面‘ % status_dic[‘username‘])
@wrapper
@log_record
def comment():
print(‘欢迎%s访问评论页面‘ % status_dic[‘username‘])
@wrapper
@log_record
def 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(‘您输入的选项有非法字符,请重新输入。‘)
以上是关于第二次考试 试题的主要内容,如果未能解决你的问题,请参考以下文章