python学习day6

# _*_ coding:utf-8 _*_
"""
老男孩教育python学院第二次考试(基础数据类型与函数部分)
考试时长:3个小时 满分:100分
一,选择题(每题2分,共30分)
1、以下说法正确的是: D

A、Python中str的单引号与双引号有区别

B、python3x版本默认编码方式为unicode。
C、Python设置变量可以为and。

D、Python3x版本中的input输入的字符串类型。
2、此代码的运行结果为:

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........
3、下面代码的结果为:D
name = ‘alex’
a = ‘3’
print(name*a)
A、alexalexalex B、 alex3 C、3alex D、TypeError
4、以下说法错误的是:D

A、ASCII码只包含数字,字母,特殊字符。

B、unicode有两个版本,第一个版本是一个字符用两个字节表示,第二个版本是一个字符用四个字节表示。
C、utf-8中,一个字节用三个字符表示。

D、gbk只包含英文,数字,特殊字符,和中文。

5、计算一下这个不等式的结果: D
1 > 2 and 3 or 6
A、True B.False C. 3 D.6

6、‘老男孩’用utf-8编码需要几个字节表示? C
A、3 B、6 C、9 D、12

7、在Python3x中:a = b‘alex’,如何将a转化成 ‘alex’? B
A、a.encode(‘utf-8’) B、a.decode() C、bytes(a) D、str(a)



8、count在内存中最终等于: C

count = 1
while count < 9:
print(count)
count += 1
A.7 B.8 C.9 D.6
9、以下叙述正确的是:B
A、continue语句的作用是结束整个循环的执行
B、只能在循环体内使用break语句
C、在循环体内使用break语句或continue语句的作用相同
D、从多层循环嵌套中退出时,只能使用quit语句

10、a = ‘老男孩教育’,a[:6]的结果为: A
A、‘老男孩教育’ B、‘’ C、TypeError D、‘老男孩教育老男’

11、下列说法正确的是(多选) : A B
A,字符串的capitalize()为首字母大写,其余字母小写。
B,列表的pop为通过索引删除,且有返回值。
C,字典的remove为通过键删除字典的键值对。
D,元组为只读列表,只能进行增和查。

12、下列表达正确的是(多选):B C D
A、字典中的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’。

13、下列表达正确的是(多选):B C
A、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、集合是无序的不重复的,里面的元素要求是不可哈希的。

14、选出你认为正确的答案(多选):B D
A、在文件操作中,r+模式只能读写,不能写读。
B、函数是以功能为导向的。
C、文件操作中,将光标移动至末尾是seek(0,1)。
D、函数的*args在默认参数前面。
15、下列说法正确的是(多选):B D
A、函数的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))
___5
print(calc(1, 2, 3))
_____
3
print(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分)
1、 is 和 == 的区别 (1
分)
== 值
is对象
2、Python
如何实现tuple和list的转换。(1
分)
tl = tuple(l1)
lt = list(tl)

3、list和tuple有什么不同 (1
分)
list可变,不可哈希,不可比较,tuple不可变,可哈希,可比较,查询速度较快
4、*args和 ** kwargs在什么情况下会使到?请给出使 ** kwargs的事例(2
分)
*args
位置参数不确定数量, ** kwargs
默认参数不确定数量
5、Python中什么数据类型存在小数据池?小数据池有什么作用?(1
分)
str: 1)不能含有特殊字符
2)单个元素 * int
不能超过21, 节省内存
6、在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)

7、下面代码有没有问题?如果有问题请指出来(2
分)?
f = open('a.txt', encoding='utf-8')
f.write('666')
默认读模式打开文件,不能写入,否则会抛出异常
8、l = [1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 8]
将此列表去重。(1
分)
l = list(set(l))

9、有如下代码,写出最后结果,并解释为什么。(2
分)
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]
l2

l1指向同一个对象故l2

l1结果一样
l3

l1
是浅COPY,所以666没有添加成功
10、‘1, 2, 3’如何变成[‘1’, ’2’, ’3’]? [‘1’, ’2’, ’3’]如何变成[1, 2, 3]?(写具体代码)(2
分)
"""
print('1,2,3'.split(','))
print(','.join(['1', '2', '3']))
"""
11、什么是闭包(closure),为什么要用它?(2
分)
闭包:内层函数对外层函数非全局变量的引用
12,global有什么用?nonlocal又是干什么的?(2
分)
global 实现引用并修改全局变量
nonlocal
不能操作全局变量
从哪层引用的从那层开始全部改变
"""
#13,如何终止while循环?(1分)
#break
"""
四,编程题。

1、有文件t1.txt里面的内容为:(6
分)

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'}, ......]
"""
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)
"""
2、写函数,完成以下功能:(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'))
"""
3、写函数完成以下功能:(6
分)
给函数传入一个列表(此列表里面的元素必须全部是str类型),将列表中的每个元素按照顺序依次加上他们的索引,形成新的元素,并添加到一个新列表,将新列表返回。
例如:给函数传入一个列表[‘alex’, ’太白’],
返回值为[‘alex0’, ’太白1’]
"""
def indexlist(s):
return [str(i) + s[i] for i in range(len(s))]


#4,写一个函数,完成注册的功能,将用户名,密码写入到文件中(用户名不能重复,如果重复提示他重新输入)。再写一个函数,完成三次登录功能,账号密码从注册的文件中获取。(12
#分)

import time



status_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_log

def 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_loging




def 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_log
def article_page(): #文章页面函数
print("请编辑文章。")

@wrapper_login
@wrapper_log
def diary_page(): #日志页面函数
print("请编辑日志。")




@wrapper_login
@wrapper_log
def comment_page(): #评论页面函数
print("请评论。")



@wrapper_login
@wrapper_log
def 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("超出范围,请重新输入!")

转载于:https://www.cnblogs.com/dingyang-python/p/9186192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值