python基础之测试题

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)

    View Code

  • 方法二:使用内置函数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)

    View Code

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”

 

以上是 python基础之测试题 的全部内容, 来源链接: utcz.com/z/388314.html

回到顶部