python3--基础综合测试

发布时间:2018-04-09 19:20:35编辑:Run阅读(4476)

一:选择题

1、python不支持的数据类型有

A、char

B、int

C、float

D、list

选择:A

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

2、

x ="foo"

y = 2

print(x+y)

A.foo    B.foofoo      C.foo2     D.2      E.TypeError

选择:E

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

3、关于字符串下列说法错误的是

A、字符串应该视为长度为1的字符串

B、字符串可以转化成数字

C、既可以用单引号,也可以用双引号创建字符串

D、在三引号字符串中可以包含换行回车等特殊字符

选择:A

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

4、以下不能创建一个字典的语句是

A、dic1 = {}

B、dic2 = {123:345}

C、dic3 = {[1,2,3]:'uestc'}

D、dic3 = {(1,2,3):'uestc'}

选择:C

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

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

选择:D

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

6、已知x=43,ch='A',y = 1,则表达式(x>=y and ch

A、0      B、1     C、出错     D、True

选择: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、下列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

选择:AD

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

8、若k为整形,下述while循环执 的次数为:(python3上执行了10次,此题应该是py2上的题目)

k=1000

while k>1:

print(k)

k=k/2

A.9        B.10       C.11       D.100

选择:B

9、以下叙述正确的是:

A、continue语句的作用是结束整个循环的执行

B、只能在循环体内使用break语句

C、在循环体内使用break语句或continue语句的作用相同

D、从多层循环嵌套中退出时,只能使用goto语句

选择:B

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

选择:B

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是元组类型。

选择:C

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)

选择:BD

二,简答题

1、is 和 == 的区别

== 比较的是数值

is 比较的是内存地址

2、Python 如何实现tuple和list的转换

#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只有查看的方法。

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

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

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

例子:

def fun1(**kwargs):

print(kwargs)

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

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

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

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

s1 ='中国'

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

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

print(s3)

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

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

dic['barry'].append(666)

print(dic)

最后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等编码之间的关系?

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]将此列表去重。

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

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

print(l2)

10、有如下代码,写出最后结果,并解释为什么。

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

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

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

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

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

l2 = l1[:]

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

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

a = '1,2,3'

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

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

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

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

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

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

15、下面代码输出结果是什么?两次list1的结果相同么?为什么?

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)

2次list1的结果不一样

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

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

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

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

a = 1

def func1():

a += 1

print(a)

func1()

这段代码呢?

def wrapper():

a = 1

def inner():

a += 1

print(a)

inner()

wrapper()

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

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

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

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

闭包的好处:

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

三,代码题

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

name=['Sam','Tom','Jack']res = map(lambda x:x+'_sb',name)

for i in res:

print(i)

执行结果

Sam_sb

Tom_sb

Jack_sb

2,用filter函数过滤出单价大于100的股票。

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}]ret = filter(lambda x:x['price'] > 100,portfolio)

for i in ret:

print(i)

执行结果

{'price': 543.22, 'shares': 50, 'name': 'AAPL'}

{'price': 115.65, 'shares': 75, 'name': 'ACME'}

3,有文件t1.txt里面的内容为:

id,name,age,phone,job

1,Sam,22,13651054608,IT

2,Tom,23,13304320533,Tearcher

3,Jack,18,1333235322,IT

利用文件操作,将其构造成如下数据类型。

[{'id':'1','name':'Sam','age':'22','phone':'13651054608','job':'IT'},

......]

创建一个t1.txt文件,把上面的内容复制进去l1 = []

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

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

# 得到['1', 'Sam', '22', '13651054608', 'IT']

for i in f1:

dic = {}

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

# 得到

# ['1', 'Sam', '22', '13651054608', 'IT']

# ['2', 'Tom', '23', '13304320533', 'Tearcher']

# ['3', 'Jack', '18', '1333235322', 'IT']

for j in range(len(i_list)):

dic[name_list[j]] = i_list[j]

l1.append(dic)

print(l1)

执行结果

[{'job': 'IT', 'age': '22', 'phone': '13651054608', 'name': 'Sam', 'id': '1'}, {'job': 'Tearcher', 'age': '23', 'phone': '13304320533', 'name': 'Tom', 'id': '2'}, {'job': 'IT', 'age': '18', 'phone': '1333235322', 'name': 'Jack', 'id': '3'}]

4,写程序完成下列功能:

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

首先创建一个密码文件register,里面随便放几个账号密码,用来做登录认证用的,格式如下:

整个代码如下import time

class Shopping(object):

def __init__(self):

self.timeout = 1

self.sign = True

self.auth_dic = {'username': None,

'status': False,

}

self.run = {

'0': self.error,

'1': self.login,

'2': self.register,

'3': self.article,

'4': self.diary,

'5': self.comment,

'6': self.collection,

'7': self.login_out,

'8': self.out_exit,

}

self.main()

'''装饰器用于验证是否登录'''

def wrapper(func):

def inner(self):

if self.auth_dic['status']:

ret = func(self)

return ret

else:

print('|| 请先进行登录!')

if self.login():

ret = func(self)

return ret

return inner

'''此装饰器用于打印日志'''

def log_record(func):

def inner(self):

struct_time = time.localtime()

time_now = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)

with open('log_func', encoding='utf-8', mode='a') as f1:

f1.write('用户:{}在{}执行了{}函数\n'.format(self.auth_dic['username'],time_now,func.__name__))

ret = func(self)

return ret

return inner

'''程序入口'''

def main(self):

while True:

self.menu()

op = input(u'|| 输入选项:').strip()

'''map判断输入是否符合条件'''

if op in map(str, range(len(self.run))):

self.run.get(op)()

else:

self.error()

continue

'''此函数用于打印菜单'''

def menu(self, *args, **kwargs):

print(u'=' * 40)

print(u'|| 欢迎来到博客园首页')

print(u'|| 1:登陆')

print(u'|| 2:注册')

print(u'|| 3:文章页面')

print(u'|| 4:日记页面')

print(u'|| 5:评论页面')

print(u'|| 6:收藏页面')

print(u'|| 7:注销')

print(u'|| 8:退出')

print(u'=' * 42)

'''此函数用于注册'''

def register(self):

while self.sign:

username = input("|| 请输入用户名:").strip()

with open('register', encoding='utf-8', mode='r') as f2:

for i in f2:

li = i.strip().split()

if username == li[0] or not username.strip():

print('|| (账号名已存在)or(账号名不能为空)')

break

else:

password = input('|| 请输入密码:').strip()

again_password = input('|| 再次输入密码,确认:').strip()

if password == again_password:

with open('register', encoding='utf-8', mode='a') as f3:

f3.write('\n{} {}'.format(username, password))

print('|| 注册成功')

return self.login(username, password)

else:

print("|| 两次密码不一样")

'''此函数用于三次登录'''

def login(self, *args, **kwargs):

i = 0

while i

if args:

self.auth_dic['username'] = args[0]

self.auth_dic['status'] = True

return True

else:

username = input('|| 请输入账号:').strip()

password = input('|| 请输入密码:').strip()

with open('register', encoding='utf-8', mode='r') as f1:

for j in f1:

ss = j.split()

if username == ss[0] and password == ss[1]:

print('|| {}登陆成功'.format(username))

self.auth_dic['username'] = username

self.auth_dic['status'] = True

return True

else:

print('|| 账号或密码错误,请重新输入,还剩{}次机会'.format(2 - i))

i += 1

if i == 3:

return self.out_exit()

@wrapper

@log_record

def article(self):  # 文章页面

print(u'|| 欢迎{}访问文章页面'.format(self.auth_dic['username']))

@wrapper

@log_record

def diary(self):  # 日记页面

print(u'|| 欢迎{}访问日记页面'.format(self.auth_dic['username']))

@wrapper

@log_record

def comment(self):  # 评论页面

print(u'|| 欢迎{}访问评论页面'.format(self.auth_dic['username']))

@wrapper

@log_record

def collection(self):  # 收藏页面

print(u'|| 欢迎{}访问收藏页面'.format(self.auth_dic['username']))

'''此函数用于注销'''

def login_out(self):

if self.auth_dic['username'] is None:

print("|| 你还没有登录")

else:

self.auth_dic['username'] = None

self.auth_dic['status'] = False

print('|| 注销成功')

self.main()

'''此函数用于延迟'''

def error(self, *args, **kwargs):

print(u'|| 只能输入1-8的整数,等待{}秒后重新输入'.format(self.timeout))

time.sleep(self.timeout)

'''此函数用于退出程序'''

def out_exit(self):

exit()

if __name__ == '__main__':

Shopping()

生成的日志文件截图

执行效果

关键字:

python中字符串也能进行关系比较操作_python3--基础综合测试相关推荐

  1. python中多分支结构可以不用else吗_Python3基础 多分支结构 if-elif-else

    镇场诗: ---大梦谁觉,水月中建博客.百千磨难,才知世事无常. ---今持佛语,技术无量愿学.愿尽所学,铸一良心博客. --------------------------------------- ...

  2. Python中字符串的操作(图文详情)

    以下操作均在pycharm pycharm官方下载地址: https://www.jetbrains.com/pycharm/download/#section=windows 目录 python中字 ...

  3. 站长在线Python精讲:Python中字符串编码转换encode编码和decode解码详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中字符串编码转换:encode编码和decode解码详解>.本知识点主要内容有:常用编码简介.使用encode( ...

  4. python字符串拼接数字_解决Python中字符串和数字拼接报错的方法

    解决Python中字符串和数字拼接报错的方法 前言 众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错. 如以下的代码: # co ...

  5. python如何小写p转换p_Python进阶---python 中字符串大小写转换

    python中字符串的大小写转换和判断字符串大小写的函数小结: 一.pyhton字符串的大小写转换, 常用的有以下几种方法: 1.对字符串中所有字符(仅对字母有效)的大小写转换,有两个方法: prin ...

  6. python中字符串的几种表达方式(用什么方式表示字符串)

    今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...

  7. Python中字符串常用处理函数

    ** Python中字符串常用处理函数 ** 1.len( )函数 用len( )函数计算字符串的长度 2.strip( )函数 删除字符串两边的空白符(包括:'\n'.'\t'.'\r') 注:只能 ...

  8. python中abc属于字符串吗_在Python中,字符串s = 'abc',那么执行表达式s+'d'之后,s的打印结果是( )。...

    [单选题]当知道条件为真,想要程序无限执行直到人为停止的话,可以需要下列哪个选项? [单选题]Python3解释器执行 for i,v in enumerate([0,1,2],2):print(i, ...

  9. python中字符串大小写转换常用操作

    python中字符串的大小写转换操作 方法名 操作说明 upper() 把字符串中的字符全部转换为大写 lower() 把字符串中的字符全部转换为小写 swapcase() 把原字符串中的字符,大写变 ...

最新文章

  1. django创建项目案例1详细介绍方法01
  2. 奥比中光深度摄像头_奥比中光获得银联检测通行证,银联进入刷脸支付赛道
  3. 发现程序美----while+for冒泡实现的
  4. Java黑皮书课后题第6章:*6.14(估算π)π可以使用下面的数列进行计算。编写一个方法,对于给定的i返回m(i),并编写一个测试程序,显示如下表格
  5. mycat 资料汇总
  6. Java Arrays类进行数组排序需要注意的事情
  7. java求最大值时i的值_java 输入一组数组,求最大值。
  8. [恢]hdu 2138
  9. java 利用Future异步获取多线程任务结果
  10. Microsoft store下载速度缓慢
  11. 【Pr】视频剪辑学习记录——导出
  12. html格式蠕虫病毒,XiaoBa自制蠕虫病毒[2018-1-10]
  13. Java随笔记 - 内核缓冲区与进程缓冲区
  14. 【阿里云双11薅羊毛攻略】领限量手办详细步骤
  15. 基于数据库实现微服务动态路由
  16. Pippo java微服务,轻量级web开发框架,原来Filter还能这么玩
  17. 如何申请美国大学计算机科学研究生,申请美国计算机研究生院要求
  18. 遥控定时小夜灯芯片,充电遥控小夜灯PCBA控制板,遥控小台灯
  19. 学生上课考勤系统jsp_jsp+ssm+mysql课堂考勤系统
  20. NovaMind教程笔记总结

热门文章

  1. python3格式化输出
  2. 微信小程序如何添加业务域名
  3. 图表插件 - chart.js (柱状图) 学习总结
  4. C++中关于写日志文件Log的方法
  5. @2-1 CCF 2020-12-01 期末预测之安全指数
  6. 手机qq2005 没声音
  7. 处理器不同编址方式、指令/数据处理方式区别
  8. 磁力链接 结构解析 分享
  9. 关于RO、RW、ZI的说明
  10. 物理思维在计算机中的应用,思维导图学物理 学会用大脑的语言进行思考