python基础之测试题
一、python基础
1、 s = ' 123.33sdhf3424.34fdg323.324',计算字符串中所有数字的和。
本题结果应为:123.33+3424.34+323.32
答案:
1.1、如果结果为:123.33+3424.34+323.324,有以下几种解法:
- (1)、使用"[\d.]+"匹配数字
import re s = ' 123.33sdhf3424.34fdg323.324' pattern = re.compile("[\d.]+") res = pattern.findall(s) # print(res) num_list = [float(i) for i in res] print(num_list) count = 0 for i in num_list: count += i print(count
- (2)、使用'\d+\.?\d+'匹配数字
s = '123.33sdhf3424.34fdg323.324' import re result = "" s = re.findall('\d+\.?\d+',s) for i in s: result = "+".join(s) print("表达式:%s 的和是"%result) #123.33+3424.34+323.324 su = 0 for i in result.split("+"): i = float(i) su += i print(i) #323.324 print(su)
1.2、如果结果为:123.33+3424.34+323.32,有以下几种解法:
- (1)、使用"(\d+\.\d{,2})"匹配数字
import re s = ' 123.33sdhf3424.34fdg323.324' pattern = re.compile("(\d+\.\d{,2})") res = pattern.findall(s) # print(res) num_list = [float(i) for i in res] print(num_list) count = 0 for i in num_list: count += i print(count)
1.3、对正则匹配后的列表可以使用"+".join()将其合成为字符串,然后使用eval()执行
import re s = ' 123.33sdhf3424.34fdg323.324' ret = re.findall('\d+\.?\d+',s) ret = "+".join(ret) print(ret) eval(ret)
7、d={‘k1‘:‘v1‘,‘k2’:[1,2,3],(‘k’,’3’):{1,2,3}},请用程序实现:
(1) 输出上述字典中value为列表的key
答案:
d = {'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}} for k,v in d.items(): if type(v) == list: print(k)
(2) 如果字典中的key是一个元祖,请输出对应的value值。
答案:
d = {'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}} for k,v in d.items(): if type(k) == tuple: print(v)
(3) d[(‘k‘,‘3‘)]对应的value是一个什么数据类型
答案:set类型
8、如果不使用@wrapper装饰器,请在a()之前加入一句代码,达到相同的效果
def wrapper(func): def inner(*arg, **kwargs): func(*arg, **kwargs) return inner @wrapper def a(arg): print(arg) a(233)
答案:
def wrapper(func): def inner(*arg, **kwargs): func(*arg, **kwargs) return inner def a(arg): print(arg) a = wrapper(a) a(123)
9、请处理文件7th_questions,输出所有以‘T‘开头的行。
答案:
with open("7th_questions", "r",encoding="utf-8") as f: for i in f.readlines(): if i.startswith("T"): print(i)
11、默写10个字符串对象的内置方法,描述它的作用
a = "123" a.split() a.startswith("1") a.endswith("3") a.strip() a.upper() a.lower() a.isdigit() a.find("1") a.format() a.encode("utf-8")
12、有如下代码,写出调用的顺序以及结果
def f1(): print('funcname is f1') def f2(): print('funcname is f2') return 1 def f3(func1): l1 = func1() print('funcname is f3') return l1 print(f3(f2))
答案:
1、f3中传入f2作为参数,则f2()执行,打印“funcname is f2”,返回1, 2、l1 =1,打印“funcname is f3”,返回l1 3、打印1
实际运行结果:
funcname is f2 funcname is f3 1
13、创建一个闭包函数需要满足哪几点?
答案:1、内部嵌套函数 ; 2、内部用到外部变量
14、将时间打印成一个2017/10/01 18:08:15的格式,将"2017-11-13 17:43:43"转换为结构化时间。
答案:
import time t = time.strftime("%Y/%m/%d %H:%M:%S") print(t) t1 = "2017-11-13 17:43:43" res = time.strptime(t1, "%Y-%m-%d %H:%M:%S") print(res)
15、用什么模块能知道文件夹存在不存在?怎么获取这个文件夹的大小?
答案:
使用os.path中的exists()方法判断文件夹是否存在。获取文件夹大小的方法是计算文件夹下的每个文件的大小并求和。实例代码如下:
import os file_path = os.getcwd() file_path = os.path.join(file_path, "images") os.path.exists(file_path) size = 0 for foldername, subfolders, filenames in os.walk(file_path): for filename in filenames: path = os.path.join(foldername,filename) size += os.path.getsize(path) print(size)
16、请写出一个能够匹配手机好的正则语句
答案:
import re pattern = re.compile("1(55|58|59|87)\d{8}") res = pattern.search("15849467672") if res: print(res.group())
17、有四个数:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
答案:
- (1)、使用for循环
count = 0 for i in range(1,5): for j in range(1,5): for z in range(1,5): if i ==j or i == z or j == z: continue count += 1 n = i*100+j*10+z print(n) print("count:",count)
- (2)、使用生成器
count = 0 def get_num(): for i in range(1,5): for j in range(1,5): for z in range(1,5): if i ==j or i == z or j == z: continue yield i*100+j*10+z for i in get_num(): count += 1 print(i) print("count:",count)
二、面向对象
1、请简述类、对象、实例化、实例这些名词的含义
答案:
类: 类是对有相同属性和相似行为的一类事物的抽象。
对象: 是一个具有具体属性值的类的实例化.
实例化 :从一个抽象的类产生一个具体对象的过程.
实例:就是对象.
2、面向对象的三大特性是什么?
答案:
封装、继承、多态、
3.有一个类定义:
class Person: def __init__(self,name,age): self.name = name self.age = age
(1)初始化10个不同的对象
答案:
p1 = Person("Jack",18) p2 = Person("Tom",15) p3 = Person("White",30) p4 = Person("Black",25)
(2)求最高age的对象的name
答案:
- 方法一
class Person: def __init__(self,name,age): self.name = name self.age = age p1 = Person("Jack",18) p2 = Person("Tom",15) p3 = Person("White",30) p4 = Person("Black",25) p_list = [p1,p2,p3,p4] p_dict = {} for p in p_list: p_dict[p] = p.age res = max(p_dict.values()) print(res) for k in p_dict: if k.age == res: print("最高age的对象的name:",k.name)
- 方法二:使用内置函数max()
class Person: def __init__(self,name,age): self.name = name self.age = age p1 = Person("Jack",18) p2 = Person("Tom",15) p3 = Person("White",30) p4 = Person("Black",25) p_list = [p1,p2,p3,p4] res = max(p_list,key=lambda p:p.age) print(res.name)
4. 模拟cs游戏
(1)人物角色分为警察和匪徒两种,定义成两个类
所有的警察的角色都是police
每个警察都有自己独有名字,生命值,武器,性别
每个都可以开枪攻击敌人,切攻击目标不能是police
所有的警察的角色都是terrorist
每个匪徒都有自己独有名字,生命值,武器,性别
每个都可以开枪攻击敌人,切攻击目标不能是terrorist方式减少代码重复
(2) 实例化一个警察,一个匪徒,警察攻击匪徒,匪徒掉血
(3) 提取警察类和匪徒类相似之处定义成一个父类,使用继承的方式减少代码重复
5、读代码
class Base: def f1(self): self.f2() def f2(self): print(‘...‘) class Foo(Base): def f2(self): print(‘9999‘) obj = Foo() obj.f1()
(1)、面向对象中的self指的什么?
答案:self指的是实例化的对象
(2)、运行结果并简述原因
答案:打印出“9999”