前面的简答题,,,,,后面的答题,,,,小伙伴们加油!!!!
\'\'\' 1.列举Python2与Python3之间的区别(5条)?(4分) \'\'\' #python2中: #1.默认编码:ASCll #2.range返回的是列表,xrange返回的是可迭代对象 #3.整数分为:int和lang #4.代码重复 #5.语言不统一 #6.不支持中文 #python3中: # 1默认编码:Unicode # 2.返回的是可迭代对象 # 3.整数统一是:int # 4.代码重复 # 5.语言统一 # 6.支持中文 #更多python2和Python3的区别 see also: # https://wiki.python.org/moin/Python2orPython3 # https://www.cnblogs.com/Neeo/p/8033520.html \'\'\' 2.有整数3.14 如何去掉小数位? 请一行代码实现不能使⽤切⽚ (1分) \'\'\' print(round(3.14)) print(int(3.14)) print(\'%.0f\'%3.14) \'\'\' 3.文件件操作有哪些模式?请简述各模式的作用 (3分) \'\'\' #Character Meaning # \'r\' open for reading (default) # \'w\' open for writing, truncating the file first # \'x\' open for exclusive creation, failing if the file already exists # \'a\' open for writing, appending t #\'a\' open for writing, appending to the end of the file if it exists # \'b\' binary mode # \'t\' text mode (default) # \'+\' open a disk file for updating (reading and writing) # \'U\' universal newlines mode (deprecated) # see also: https://docs.python.org/3/library/functions.html#open # \'r\' 打开文件,以读的方式,默认的方式 # \'w\' 打开文件,写入文件,如果原文件存在则会被覆盖,如果没有此文件就会创建,前提是 #该模式下必须保证文件目录的存在 # \'x\' 创建一个新文件并打开以写入,如果文件已存在则抛出FileExistsError错误 # \'a\' 以追加的方式打开文件,如果文件存在则从原文件的末尾写入,否则会创建文件 # \'b\' 二进制模式,可以搭配其他的模式使用,如\'rb\', # \'t\' 文本模式,默认 # \'+\' 读/写模式,用于更新 # \'U\' 通用的换行模式,现已弃用 # \'rt\' 文本读模式,默认模式 # \'wt\' 以文本写模式打开,打开前原文件会被清空 # \'rb\' 打开文件,以二进制的形式读文件 # \'ab\' 以二进制追加模式打开文件 # \'wb\' 以二进制写模式打开,打开前原文件会被清空 #\'r+\' 以文本读写模式打开文件,可以控制写入到文件任何位置,默认写的指针开始指在文件 #开头,所以会复写文件 # \'w+\' 以文本读写模式打开文件 # \'a+\' 以文本读写模式打开文件,如果写那么指针将从文件末尾开始 # \'rb+\' 以二进制读写模式打开文件 # \'wb+\' 以二进制读写模式打开文件,原文件会被清空 # \'ab+\' 以二进制读写模式打开文件 \'\'\' 4.字符串和列表如何互相转换?(2分) \'\'\' a=\'aaaa\' print(list(a)) l=[\'a\',\'b\'] s=\'\'.join(l) print(s) \'\'\' 5. ... 及 pass在Python中是否是占位 ? (1分) \'\'\' # 表示为了程序的完成性,而又不能立即实现其功能或者不需要实 # 现其功能,故采用pass或者...语句 \'\'\' 6.a=10; b=20 用一行代码实现a,b数值交换:(1分) \'\'\' a=10 b=20 # def func(a,b): # print(a,b) ##函数方法 # func(b,a) a,b=b,a #简单方法 print(a,b) \'\'\' 7.读代码写结论为什么? (2分) result = 1.2-1 while True: if round(result,1) == 0.2: print(\'hi guys!\') else: print(False) \'\'\' # 结论是result的结果是0.19999999999999996,round保留一位小数四舍五入后是0.2,符 # 合while循环中的if条件,打印结果是死循环hi guys! # result = 1.2-1 # print(result, round(result, 1)) # 0.19999999999999996 0.2 # while True: # if round(result,1) == 0.2: # print(\'hi guys!\') # else: # print(False) \'\'\' 8.递归的最大层数?(1分) \'\'\' # 网络上的递归最大层数:1000 # 自己测得:998 import sys print(sys.getrecursionlimit()) \'\'\' 9.读代码写结果 如下代码输出的结果是?(2分) def Generator(): value = yield 1 yield value gen = Generator() print(gen.send(1)) \'\'\' #报错 #修改: def Generator(): value = yield 1 yield value gen = Generator() # s=gen.__next__() # print(s) print(gen.send(None)) \'\'\' 10.列举你了解的5个模块并简述其作⽤。(2分) \'\'\' # import time 时间模块 # import random 数字模块 # import sys python解释器相关 # import os 系统相关 # import pickle 序列化相关 # import json 序列化相关 # import re 正则相关 #import logging 日志 #import hashlib 加密 \'\'\' 11.闭包函数有什么特点,应用场景?(2分) \'\'\' # 保证了数据的安全,只能内部访问外部,外部不能访问内部 #应用场景: # 装饰器 # 缓存 \'\'\' 12.写出下⾯代码的输出结果,并解释为什么?(2分) def f(x,l=[]): for i in range(x): l.append(i*i) print(l) f(2) f(3,[3,2,1]) f(3) \'\'\' # 答案:[0,1] # [3,2,1,0,1,4] # [0,1,0,1,4] \'\'\' 13.写出下⾯代码的输出结果,并解释为什么?(3分) l = [1,2,3] d = {"a":7,"b":8} def f(arg1,arg2,*args,**kwargs): print(arg1,arg2,args,kwargs) f(1,2,3,"groovy") f(arg1=1,arg2=2,c=3,zzz="h1" f(1,2,3,a=1,b=2,c=3) f(*l,**d) f(1,2,*l,q="winning",**d) \'\'\' # 1 2 (3,\'groovy\') {} # 1 2 () {\'c\':3,\'zzz\':\'h1\'} # 1 2 (3,) {\'a\': 1, \'b\': 2, \'c\': 3} # 1 2 (3,) {\'a\': 7, \'b\': 8} # 18 1 2 (1, 2, 3) {\'q\': \'winning\', \'a\': 7, \'b\': 8} \'\'\' 14.解释⼀下什么是迭代器,你在代码中如何获得⼀个迭代器?(2分) \'\'\' # 可迭代对象执行__iter__方法返回的结果称为迭代器 # 迭代器中必须包含:__iter__和__next__ \'\'\' 15.迭代器如何取值?迭代器的好处?(2分) \'\'\' # 迭代器的特点: # 重复 下一次的重复是基于上一次结果 # 使用迭代器的优点: # 1.提供一种不依赖索引的取值方式.迭代器通过__next__方法取值 # 2.惰性运算 # 缺点: # 1.取值不如索引方便 # 2.迭代过程不可逆 \'\'\' 16.什么是⽣成器?你在代码中如何获得⼀个⽣成器?(2分) \'\'\' # 函数体内包含有yield关键字,该函数执行的结果(返回值generator_obj)为生成器,而该函数称为生成器函数 # yield的功能: # 1. yield与return一样可以终止函数执行、可以返回值(不指定返回值默认返回None), # 但不同之处yield可以在函数内多次使用,而return只能返回一次。 # 2. 为函数封装好了__iter__和__next__方法,把函数得执行结果转换为迭代器,也就是 # 说yield自动实现了迭代协议并遵循迭代器协议。 # 3. 触发函数的执行、暂停、再继续,包括状态都由yield保存。 # 4. 生成器本质就是迭代器。 # 5. 延迟计算,当你需要的时候,yield返回一次,不需要,就保留信息,等待下一次调 # 用。 # 生成器函数和普通的函数最大的不同之处在于,生成器每当yield一次,在返回值的时候,将 # 函数挂起,保存相关信息,在下一次函数执行的时候,从当前挂起的位置继续执行。 \'\'\' 17.请写出下⾯代码的执⾏结果(4分) print([lambda: i for i in range(10)][0]()) \'\'\' print([lambda: i for i in range(10)][0]()) # 结果:9 \'\'\' 二.简洁编程 \'\'\' \'\'\' 1)有列表 a = ["7net ","www.7net ","www.septnet ","7net ","www"]现需要从中将包含字符 7net的元素给删掉,请以最少代码量实现。(2分 \'\'\' a = ["7net ","www.7net ","www.septnet ","7net ","www"] print([i for i in a if \'7net\'not in i ]) \'\'\' 2)l = [\'20\',\'10\',\'3\',\'15\',\'32\'],按照数字的顺序从小到大排序,不改变原列表。(请⽤最简的 ⽅式)(1分) \'\'\' l = [\'20\',\'10\',\'3\',\'15\',\'32\'] l1=[str(k) for k in sorted([int(i) for i in l])] print(l1) \'\'\' 3)l = [\'班级20\',\'班级10\',\'班级3\',\'班级15\',\'班级32\'],按照数字的顺序从小到大排序,不改变 原列表。(请⽤最简的⽅式) (2分) \'\'\' l = [\'班级20\',\'班级10\',\'班级3\',\'班级15\',\'班级32\'] def bar(y): return \'班级\'+str(y) def foo(n): return int(n[2:]) l2=sorted(list(map(foo,l))) print(l2) print(list(map(bar,l2))) \'\'\' 4)有⼀个列表l1 = [\'alex\', \'WuSir\', \'⽼男孩\', \'太⽩\']⽤列表推导式将其构造成这种列表 [\'alex0\', \'WuSir1\', \'⽼男孩2\', \'太⽩3\'] (2分) \'\'\' l1 = [\'alex\', \'WuSir\', \'老男孩\', \'太白\'] print([i+str(l1.index(i)) for i in l1]) \'\'\' 5)现在有两元祖((\'a\'),(\'b\')),((\'c\'),(\'d\')),请使⽤python中的匿名函数和内置函数⽣成列表 [{\'a\':\'c\'},{\'b\':\'d\'}] (2分) \'\'\' t1=((\'a\'),(\'b\')) t2=((\'c\'),(\'d\')) print([{k:v} for k,v in zip(t1,t2)]) #第二种,用lambda ret=lambda t1,t2:[{k:v} for k,v in zip(t1,t2)] print(ret(t1,t2)) \'\'\' 6)alist = [{“a”:5,”b”:2},{“a”:2,”b”:8},{“a”:8,”b”:2}]请写出以键a的值对alist进⾏排序的表达 式(3分) \'\'\' alist = [{\'a\':5,\'b\':2},{\'a\':2,\'b\':8},{\'a\':8,\'b\':2}] ret=sorted([i[\'a\'] for i in alist]) print([i for k in ret for i in alist if i[\'a\']==k]) \'\'\' 7)现有列表alist = [3,1,-4,-2],按照元素的绝对值⼤⼩进⾏排序并将得到列表的每个元素求 平⽅形成⼀个新的列表 (2分 \'\'\' alist = [3,1,-4,-2] print(list(sorted(map(lambda x:abs(x)**2,alist)))) \'\'\' 8).写函数(lambda)实现字符串翻转,如:V = ‘oldboy’ (请⽤最简的⽅式) (2分) \'\'\' print((lambda x:x[::-1])(\'oldboy\')) ##第二种 ret = \'\'.join(reversed(\'oldboy\')) print(ret) \'\'\' 9)请构建⼀个⽣成器,⾥⾯的元素是1,4,9,16,25,36,49 \'\'\' def func(): for i in range(1,8): ret=i**2 yield ret for i in func(): print(i) \'\'\' 10).写个⽣成器,⾥⾯的元素是20以内所有奇数的平⽅减⼀ \'\'\' print(list(i*i-1 for i in range(20) if i %2==1)) \'\'\' 1.写函数传入一个列表[11,22,33,44,55,[66,77,88,‘99’]] 将列表的所有的元素相加 得到总和495 (3分 \'\'\' list=[11,22,33,44,55,[66,77,88,\'99\']] def func(list): sum=0 sum1=0 for i in list[0:5]: sum+=i for k in list[-1]: sum1+=int(k) print(sum+sum1) func(list) #第二种 def func(l): num=0 for i in l: if isinstance(i ,list): #判断是否是列表类型 for k in i: num+=int(k) else: num+=int(i) return num print(func([11,22,33,44,55,[66,77,88,\'99\']])) \'\'\' 2.写函数,接收两个列表类型的参数,返回⼀个规定的字典:假设有列表 a = [\'name\', \'age\', \'sex\']和b = [\'alex\', 35, \'Male\'], 此函数最终的返回结果为{\'name\': \'alex\', \'age\': 35, \'sex\': \'Male\'} (3分) \'\'\' a = [\'name\', \'age\', \'sex\'] b = [\'alex\', 35, \'Male\'] ret=zip(a,b) print(dict(ret)) print(dict(zip(a,b))) #一条代码输出 def func(a,b): dict={} ##函数输出 for i in zip(a,b): dict[i[0]]=i[1] print(dict) func(a,b) \'\'\' 3.有字符串 “AlexLi_PageWu_BossJin” 写函数传⼊该字符串 将该字符串结果处 理成”AlexPageWuBossJin”(2分) \'\'\' a=\'AlexLi_PageWu_BossJin\' s=a.replace(\'_\',\'\') print(s) print(a.replace("_","")) \'\'\' 4.写函数,接收两个字典类型的参数,此函数完成的功能是实现两个字典的相 加,不同的key对应的值保留,相同的key对应的值相加后保留,如果是字符串 就拼接。⽐如: dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"} dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"} 如上⽰例得到结果为: dictc = {“a":1,"b":5,"c":3,"d":9,"e":7,"m": 9,"f":"hello","k":"world"}(4分) \'\'\' dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"} dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"} def func(a,b): dictc={} for i in a: if i in b: dictc[i]=b[i]+a[i] else: dictc[i]=a[i] for k in b: if k not in dictc: dictc[k]=b[k] print(dictc) func(dicta,dictb) \'\'\' 5.写函数,完成给下个列表去重的功能。(不能使⽤set集合)(3分) \'\'\' a=[1,2,3,5,2,4,1] b=[1,5,6] def func(): for i in a: if i in b: b.remove(i) print(a+b) func() #第二种 def func(args): list=[] for i in args: if i not in list: list.append(i) else: continue print(list) func(a) \'\'\' 6. 将当前时间戳打印成 "2017-10-01 18:08:15" 的格式 , 将 "2017-11-18 17:43:43" 转换为结构化时间(2分) \'\'\' import time s=time.strptime("2017-10-01 18:08:15","%Y-%m-%d %H:%M:%S") print(s) s1=time.mktime(s) print(s1) ret=time.strptime(\'2017-11-18 17:43:43\',\'%Y-%m-%d %H:%M:%S\' ) print(ret) import time s=time.gmtime(time.time()) s1=time.mktime(s) print(time.strftime(\'%Y-%m-%d %H:%M:%S\',s)) \'\'\' 7.生成器题,有空⽂件“info.txt” 请往⾥填写任意内容,你往”info.txt”所写⼊的内 容实时返回到控制台(也就是电脑的屏幕)⽤⽣成器函数实现 请列出具体代码(4 分) \'\'\' # with open (\'info.tst\',mode=\'w\',encoding=\'utf-8\')as f: # f.write(\'kaowanle\') # def tail(filename): # f=open(filename,mode=\'r\',encoding=\'utf-8\') # f.seek(0,2) # while True: # line =f.read() # if not line: # time.sleep(0.1) # continue # yield line # tail_g=tail(\'info.txt\') # for line in tail_g: # print(line) \'\'\' 8.请基于random模块 写⼀个随机生成6位验证码包含大小写a-z 数字0-9 例如: Kn7s1F 请列出具体代码(4分) \'\'\' #纯数字的 import random def func(n=6): s=\'\' for i in range(n): num=random.randint(0,9) s+=str(num) return s print(func()) #数字和字母的 import random def func(): s=\'\' for i in range(6): num =random.randint(0,9) alf_big=chr(random.randint(65,90)) alf_small=chr(random.randint(97,123)) add=random.choice([num,alf_big,alf_small]) s = \'\'.join([s,str(add)]) print(s) func() \'\'\' 9.⽤内置函数过滤出单价大于100的股票。(3分) 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}] \'\'\' 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 dic:dic[\'price\']>100,portfolio) print(list(ret)) #一条代码 print(list(filter(lambda x:x[\'price\']>100,portfolio))) \'\'\' 10.’asjdgf1.23sjdhf2.56ahsfgf2.34’请⽤python代码从字符串中找到所有数字并求 和。 最后计算1.23+2.56+2.34(3分) \'\'\' s=\'asjdgf1.23sjdhf2.56ahsfgf2.34\' import re print(sum([float(i) for i in re.findall(\'\d+\.\d+\',s)])) #取用这个方法 \'\'\' 11.请从⽂件中读取内容,并且⽤内置函数和匿名函数找到年纪最⼩的⼈的字典 ⽂件中的内容如下:(5分) [{“name”:“yuan”,”age”:18},{“name”:“nezha”,”age”:19},{“name”:“baoyuan”,”age”: 17}] \'\'\' with open(\'info\',encoding=\'utf-8\')as f: l1=[] title=f.readline().strip().split(\',\') for i in f: name,age=i.strip().split(\',\') l1.append({title[0]:name,title[1]:age}) print([i for i in l1 if str(min(list(map(lambda d:int(d[\'age\']),l1))))==i[\'age\']]) \'\'\' 12.请写函数,接收参数⽂件夹路径,获取这个⽂件夹中所有的⽂件(不包括⽂件 夹)的⼤⼩,并根据⽂件的size从⼤到⼩进⾏排序。(6分) 最终结果:[{‘file’:’file1’,’size’:10000},{‘file’:’file2’,’size’:9000},…] \'\'\' import os def sort_file(path): l=[] name_lst=os.listdir(path) for name in name_lst: w = os.path.join(path,name) w1=os.path.getsize(w) l.append({\'file\':name,\'size\':w1}) l.sort(key=lambda dic: dic[\'size\'],reverse=True) return l ret=sort_file(\'/Users/jingliyang/PycharmProjects/MyFlask\') print(ret) \'\'\' 13.有一个数据结构如下所示,请编写一个函数从该结构数据中返回由指定的字段和对应的值 组成的字典。如果指定字段不存在,则跳过该字段。(字典还有可能有n层) (实现可扩展10分 实现当前功能5分) data:{"time":"2016-08-05T13:13:05", "some_id":"ID1234", "grp1":{ "fld1":1, "fld2":2}, "xxx2":{ "fld3":0, “test”:{‘fld5’:0.4}}, "fld6":11, "fld7":7, “fld46":8 } fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19 def select(data,fields): # TODO:implementation return resul \'\'\' data = {\'time\': \'2016-08-05T13:13:05\', \'some_id\': \'ID1234\', \'grp1\': {\'fld1\': 1, \'fld2\': 2}, \'xxx2\': {\'fld3\': 0, \'test\': {\'fld5\': 0.4}}, \'fld6\': 11, \'fld7\': 7, \'fld46\': 8} def foo(data,fields): d=[] for k,v in data.items(): if isinstance(v,dict): d+=foo(v,fields) elif k in fields: d.append({k:v}) return d def core(): while True: fields=input(\'输入你的field:\').strip().split(\'|\') if fields[0].upper()==\'Q\': break print(foo(data,fields)) core()
如果发现错误,希望能评论下!!!