python自动化测试面试—编程题

  1. 搜索引擎中会对用户输入的数据进行处理,第一步就是词法分析,分离字符串中的数字、中文、拼音、符号。比如这个字符串:我的是名字是ths,今年18岁
    语法分析后得到结果如下: 请编写程序实现该词法分析功能。
    数字:18
    中文:我的名字是 今年 岁
    拼音:ths
    符号:,。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
方法一:使用string 模块
import string
number=[]
chinese = []
english=[]
symbol=[]
def find_data(s):
for i in s:
if i in string.digits:
number.append(i)
elif i in string.ascii_letters:
english.append(i)
elif i in string.punctuation:
symbol.append(i)
elif i in string.whitespace:
symbol.append(i)
else:
chinese.append(i)
print('数字是:{}'.format(''.join(number)))
print('中文是:{}'.format(''.join(chinese)))
print('字母是:{}'.format(''.join(english)))
print('符号是:{}'.format(''.join(symbol)))

if __name__ == '__main__':
in_data = input('请输入你要解析的字符串:')
find_data(in_data)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
方法二:使用正则方法
import re
def find_data_re(s):
patter = {"数字":"\d","字母":"[a-zA-Z]","汉字":"[\u4e00-\u9fff]"}
for k,v in patter.items():
# print('键的内容:{}'.format(k))
# print ('值的内容:{}'.format (v))
# 取字典中的value值
result = re.findall(v,s)
print(k+':'+''.join(result))
s = re.sub(v,'',s)
print('符号:{}'.format(s))

if __name__ == '__main__':
in_data = input('请输入你要解析的字符串:')
find_data_re(in_data)
  1. 编写程序实现:根据输入的数字打印菱形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
n=5,输出:
*
***
*****
***
*
n=6,输出:
*
***
*****
*****
***
*
n为任意大于1的正整数

# 理解题意
# 1.行数=输入的数 n=5->有5行
# 2.*的个数 2n-1 n=1 第一行 2*1-1=1 第一行一个*
# 3.星号+空格=输入的数字n
# 4.前面的空格数 = 后面的空格数 = (n-星号数)/2 = 单边空格个数 (n=输入的数)

def print_star(n):
# 前半部分
for i in range(1,n+1,2): # 步调为 2 第一行1 第二行3
star_num = ' '*((n-i)//2)+'*'*i # ' '*((n-i)//2) 前面的空格数目
print(star_num)

if n%2 == 0: # n为偶数
s = n-1 # n=6 那么下部分第一行只打印5个,所以打印 n-1
else: # n 为奇数
s = n-2 # 比如n=5,那么下半部份,第一行只打印3个 所以打印n-2

# 后半部分
for i in range(s,0,-2):
star_num = ' ' * ((n - i) // 2) + '*' * i
print(star_num)


if __name__ == '__main__':
print_star(5)
  1. 传入一个Json串,返回一个字典,字典只取出Json最底层的数据,中间如果有字符串也要进行处理,
    请以下面的数据为例,请用递归方法实现
    Json:{“a”:”aa”,”b”:[‘{“c”:”cc”,”d”:”dd”}’,{“f”:{“e”:”ee”}}]}
    输出:
    Dic:{‘a’:’aa’,’c’:’cc’,’d’:’dd’,’e’:’ee’}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def str_to_dict(S):   # S 是一个json字符串
dict_result={}
if type(S)== str: # S 是字符串 直接处理字符串
S = eval(S) # (字符串转为字典 不传给dict_result(因为字典里面还有其他的数据类型))
print('eval()后的S的值:{},类型是:{}'.format(S,type(S)))

if type (S) == list: # 判断是否是列表,遍历列表里面的内容
for i in S:
d = str_to_dict(i)
dict_result.update(d)

if type(S)==dict: # 判断是否是字典
for k,v in S.items():
if type(v)==list or type(v)==dict: # 字典里面镶嵌着列表或者字典
d= str_to_dict(v) # (字典里面有列表和字典里面有字典)
dict_result.update(d)
else:
dict_result[k]=v # 单纯是字典,就直接存在dict_result字典中
return dict_result # 返回底层字典
if __name__ == '__main__':
J='{"a":"aa","b":[\'{"c":"cc","d":"dd"}\',{"f":{"e":"ee"}}]}'
dict = str_to_dict(J)
print(dict)