考试题

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

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)

二,简答题(共42分)

1、is 和 == 的区别 (2分)

2、Python 如何实现tuple和list的转换。(2分)

3、list和tuple有什么不同 (2分)

4、*args和**kwargs在什么情况下会使到?请给出使 **kwargs的事例(2分)

5、Python中什么数据类型存在小数据池?小数据池有什么作用?(2分)

6、在Python3x版本中,s1 ='老男孩',如何将s1转化成utf-8的bytes类型?转化成功之后,得到了s2,如何将s2转化成gbk的bytes类型(请写出具体代码)?(3分)

7、有如下操作,最后dic的结果是什么?为什么?(2分)

dic = dict.fromkeys(['barry','alex',],[])

dic['barry'].append(666)

print(dic)

8、请描述unicode,utf-8,gbk等编码之间的关系?(2分)

9、l = [1,1,2,2,3,4,5,5,6,6,7,8]将此列表去重。(2分)

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)

11、有如下代码,说出l1与l2的关系?(2分)

l1 = [1,2,3,4,5]

l2 = l1[:]

12、'1,2,3'如何变成['1','2','3']? ['1','2','3']如何变成[1,2,3]?(写具体代码)(4分)

13、如何生成[1,4,9,16,25,36,64,81,100]尽量用一行实现。(2分)

14、map(str,[1,2,3,4,5,6,7,8,9])输出什么?(2分)

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)

16、下面代码的执行结果是什么?为什么?(4分)

a = 1

def func1():

a += 1

print(a)

func1()

这段代码呢?

def wrapper():

a = 1

def inner():

a += 1

print(a)

inner()

wrapper()

17、什么是闭包(closure),为什么要用它?(2分)

三,代码题。

1、用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb

name=['oldboy','alex','wusir'](4分)

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}]

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'},

......]

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),退出程序为结束整个程序运行。

答案:

一、选择题

1.A

解释:char类型在python中不存在,它是其他编程语言的一种数据类型,比如C/C++,JAVA

2.E

解释:x是字符串类型,y是整形,所以x+y执行报错

3.A

解释:字符串的长度,不只是有1个字符串,还有多个字符串。

4.C

解释:list是可变类型,它不可哈希,它不能作为字典的key

5.D (面试题)

解释:theCopy做了赋值,当kvps['1'] = 5改变时,theCopy也改变了,所以最终结果为10

6.B (面试题)

先判断x>=y,结果为True。判断ch < 'b' 也就是'A' < 'b'这里比较是ascii码字母对应的顺序。

A对应的顺序是65,b对于的是97,结果为True。True and True ,结果为True

最后判断True and y 也就是True and 1。根据x and y判断规则,如果x为false,则取x,否则取y。那么这里取y,最终结果为1

7.AD

解释:A是一个三元运算符,语句正确。B是PHP里面的三元运算,语句错误。C的if判断结尾没有冒号,直接print了,语句错误

D是whlie循环,语句正确。

8.B (面试题)

直接上代码,测试一波

k=1000

count = 0

while k>1:

count += 1

k = int(k)

print(k)

k=k/2

print('循环执的次数为{}'.format(count))

执行输出:

1000

500

250

125

62

31

15

7

3

1

循环执的次数为10

9.B (面试题)

A.continue的作用是结束当前循环,继续下一次循环,叙述错误

B.循环体,也即是for和while,这里面可以使用breck,叙述正确

C.break是结束循环,continue的作用是结束当前循环,继续下一次循环,叙述错误

D.goto语句也称为无条件转移语句,它是C语言和GO语言的语法,叙述错误

10.B

A.是for循环,它是一个有限循环

B.1<10是成立的,它会无限循环下去

C.break直接结束循环了

D.是for循环,它是一个有限循环

11.C

A. a和b是重新赋值了,所以2个都是新的内存地址

B. 小数据池的范围是数字: -5~256 ,i1和I2的数值超出范围了,所以不是同一内存地址

C.字符串不含有特殊字符,且长度不超过20,存在小数据池。这里的s1和和s2没有超过20,所以内存地址是同一个

D.tu = (1)缺失逗号,tu = (1,)才是元组类型。

12.BD (面试题)

A.执行输出:

0

1

1

2

2

3

B.执行输出:

1

2

3

C.执行输出:

1

2

D.执行输出:

1

2

3

二、简答题

1.

== 比较的是数值

is 比较的是内存地址

2.

#tuple转换为list

a = (1,2,3)

b = list(a)

#list转换为tuple

a = [1,2,3]

b = tuple(a)

3.

list 的值可以改变,tuple的值不能改变

list 有增删改查的方法,tuple只有查看的方法。

list用[]符号存放元素,tuple用()符号存放元素

4.

*args和**kwargs是动态参数,在参数数量不确定的情况下使用,它可以接收任何变量,它是万能参数

事例:

def fun1(**kwargs):

print(kwargs)

5.

只有数字和字符串类型,存在小数据池

小数据池的作用,就是节省内存

6.

s1 ='老男孩'

s2 = s1.encode(encoding='utf-8') #转化成utf-8的bytes类型

s3 = s2.decode(encoding='utf-8').encode('gbk') #解码,再转化成gbk的bytes类型

print(s3)

7.

最后dic的结果是 {'barry': [666], 'alex': [666]}

fromkeys() 方法是创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None

所以新的字典应该是 dic = {'barry': [], 'alex': []},这里的[]是同一个值[],它对应一个内存地址

执行dic['barry'].append(666)之后,列表的值为[666],由于2个key对应同一个内存地址

所以2个key对应的value是一样的,最终结果为{'barry': [666], 'alex': [666]}

8.

unicode,utf-8,gbk 英文,占用1个字符

unicode,gbk 中文,占用2个字符。utf-8中文,占用3个字符

unicode是万国码,保存所有国家的编码,升级之后是4个字节表示一个字符,

为了解决资源浪费问题,utf-8诞生了,是在unicode基础上,发展过来的。

gbk是国标

9.

l = [1,1,2,2,3,4,5,5,6,6,7,8]

l2 = list(set(l)) #先转换为集合去重,再转换为列表

print(l2)

10.

最后结果为:

[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 用的是同一内存地址,l3 = l1.copy() 用了浅copy

l1.append(666) 增加了一个元素,由于l2和l1的值,对应的是同一内存地址,所以值也变动了。l3不受影响

l1[1].append('55') 给l1里面的列表增加了一个元素,同上,l1和l2的值是一样的,l3依然不受影响

11.

l1和l2的值是一样的,l2通过切片的方式,把l1的值都复制过来了。但是l2是一个新的变量,和l1的内存地址是不一样的

12.

a = '1,2,3'

b = a.split(',') #分割,转换成列表

print(b) #['1','2','3']

13.

ret = map(lambda x:x **2,[i for i in range(1,11)])

14.

生成器,迭代器,迭代器的地址,map对象

15.

2次list1的结果不一样

第一次list1执行时候,函数用的是默认值list=[],所以值为[10]

由于list3执行时,也用了函数的默认值list,由于默认值对应同一内存地址,所以执行完成之后,list为[10, 'a']

那么最终list1输出list时,结果为[10, 'a']

16.

执行报错,因为内层函数只能引用全局变量,不能修改全局变量

第二个也是报错,内层函数可以引用父级函数变量,它不能修改

17.

内部函数包含对外部作用域而非全剧作用域变量的引用,该内部函数称为闭包函数

闭包的好处:

当函数开始执行时,如果遇到了闭包,他有一个机制,他会永远开辟一个内存空间,将必包中的变量等值放入其中,不会随着函数的执行完毕而消失。

三、代码题

1.

res = map(lambda x:x+'_sb',name)

for i in res:

print(i)

2.

ret = filter(lambda x:x['price'] > 100,portfolio)

for i in ret:

print(i)

3.

#空列表,存放结果

li_1 = []

with open('t1.txt', encoding='utf-8') as f1:

# 读取第一行,去除空格,使用逗号切割成列表

title_name = f1.readline().strip().split(',')

for i in f1:

dic = {}

# 去除空格,以逗号切割成列表

i = i.strip().split(',')

for j in range(len(i)):

# 添加字典, list_name[j]表示key, i[j]表示value,比如'id': '1'

dic[title_name[j]] = i[j]

# 添加到列表中

li_1.append(dic)

print(li_1)

4.

老师的代码:

import time

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):

'''

:param func:此函数是的登录认证的装饰器, 直接利用login()函数进行登陆认证。

:return: 执行被装饰的函数。

'''

def inner(*args,**kwargs):

if status_dic['status']:

ret = func(*args,**kwargs)

return ret

else:

print('请先进行登录')

if login():

ret = func(*args, **kwargs)

return ret

return inner

def log_record(func):

def inner(*args,**kwargs):

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)

return ret

return inner

@log_record # article = wrapper(article) article --> inner

@wrapper # article = wrapper(article) 里面的 func = article article --.inner()(wrapper)

def article():

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('您输入的选项有非法字符,请重新输入。')

python第一次考试_python 全栈开发,Day16(函数第一次考试)相关推荐

  1. python 仪表盘监控_Python 全栈开发 -- 监控篇

    如果你已经玩转了 Python 编程语言语法,肯定想用这些知识,开发一款应用程序,它可以是在网上,可以炫耀或出售,那就需要全栈式开发 Python.具体如何创建,部署和运行生产 Python Web ...

  2. python费用结算系统_python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长,varchar是变长. char的查询速度比varchar要快. View Code 7.  ...

  3. format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  4. python简介动画_python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)...

    01-jQuery的介绍 1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...

  5. python 动画代码_python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)...

    js总结 js: 1.ECMAScript5 ES5语法 2.DOM CRUD 获取 3种方式 id tag className //面向对象 对象 : 属性和方法 某个对象中 function $( ...

  6. python 创业项目_python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)...

    用户注册 用户名 密码 确认密码 昵称 男 女 年龄 电话 注册 返回

  7. python全栈开发下载_python全栈开发神器 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn...

    将安卓手机打造成你的python全栈开发利器 超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Q ...

  8. python全栈开发优势_Python全栈开发多少钱?学Python价格贵吗?

    Python全栈开发培训多少钱?学习Python是大家进入编程世界的理想之选,而且Python也是一门非常受欢迎的编程,可以从事的领域有很多. 从目前市场上的行情来说,一般情况下Python培训的费用 ...

  9. python由谁设计并领导开发_Python全栈开发之路 【第七篇】:面向对象编程设计与开发(1)...

    本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.&quo ...

最新文章

  1. 怎样在Red Hat Enterprise Linux 5.4版本上安装GCC?
  2. android 获取activity当前view
  3. Flutter开发之ListView使用第三方pull_to_refresh加载更多(36)
  4. java stringbuilder换行_初遇Java StringBuffer 和 StringBuilder 类利用 StringBuilder 给TextView实现换行处理...
  5. SpringBoot框架(4)-- 类装配及Bean装配监听器
  6. python人脸识别opencv_Python与OpenCV实时人脸识别
  7. 一图看懂圆柱侧面与螺旋线关系,你懂了吗?
  8. python numpy loadtxt
  9. PHP面试之网络协议面试题
  10. navicat12.1.18破解 亲测
  11. jmail邮件服务器,jmail 指定发送邮件的服务器
  12. aop切面重复调用两次controller
  13. win7 计算机 地址栏扫描,Win7系统添加地址栏的两种方法
  14. 几何分布(一种离散分布)
  15. 用Tableau制作10种漂亮的饼图
  16. KT6368A蓝牙转HID键盘_蓝牙ibeacon模块方案测试板使用说明
  17. unity|火焰和烟效果(粒子系统)
  18. 计算机必须安装flash吗,如果计算机提示,如何安装Flash Player?
  19. SimpleDateFormate日期字符串转换(墨雪亲测)
  20. c语言开发安装浏览器,用Visual C++开发简易浏览器

热门文章

  1. 注解和注解处理器APT
  2. 凡事都要追求公平?还真不一定!
  3. 【阿里云云计算工程师ACP认证】什么是ACP
  4. 全屏css,CSS之全屏背景图
  5. 字体加粗造成文字抖动
  6. 在C#中使用WIA获取扫描仪数据
  7. Ubuntu,不能sudo,也不能root登录
  8. 让linux脚本输出声音,即使在linux中没有麦克风,声音输出也会出现在声音输入中...
  9. 新手使用python易踩坑语法:if语句中or 与in连用
  10. 语雀 添加块级模式公式