笔试题目:从主字符串中去掉从字符串
0.前言
考试题目如下:
例:
a:5,b:5,c:2@a:2,c:1
得到
a:3,b:5,c:1
例:
a:9,b:2,c:2@
得到
a:9,b:2,c:2@
1.代码如下
# coding=utf-8
import sys
import collections
def read_str():
# 测试使用
#test_str = 'a:5,b:5,c:2@a:2'
test_str = (sys.stdin.readline())
# print((test_str)) # 测试使用
return test_str
def split_str(test_str):
# 拆分得到前后两部分字符串
before_str = (test_str.split('@')[0])
after_str = (test_str.split('@')[1])
if after_str == None or after_str == '\n':
print(test_str)
sys.exit()
return before_str, after_str
def deal_with_str(object_str):
# 根据得到字符串转化为对应的字典类型
str_list = object_str.split(',')
Alphabet_str = []
number_str = []
for temp_list in str_list:
Alphabet_str.append(temp_list[0])
number_str.append(int(temp_list[2]))
# 生成有序的字典,方便后续按照顺序输出
str_dict = collections.OrderedDict(zip(Alphabet_str, number_str))
return str_dict
def handle_total_str(before_str, after_str):
# 处理前字符串
before_dict = deal_with_str(before_str)
# 处理后字符串
after_dict = deal_with_str(after_str)
# 后面字典元素中的键在后面字典元素的键中,就减掉键对应的个数
middle_temp_str = ''
for middle_temp_str in after_dict.keys():
if middle_temp_str in before_dict.keys():
before_dict[middle_temp_str] = int(before_dict[middle_temp_str]) - int(after_dict[middle_temp_str])
return before_dict # 返回字典类型的结果
def print_str(result_dict):
# 分别取出
mid_keys = (list(result_dict.keys()))
mid_values = (list(result_dict.values()))
for test_queue in range(len(mid_keys)):
# 注意最后一个
if test_queue == len(mid_keys) - 1 :
result_str = mid_keys[test_queue] + ':' + str(mid_values[test_queue])
print(result_str,end="\n") # 因为最后一个会多一个,
else:
# 注意键值对的输出方式,不要换行
result_str = mid_keys[test_queue] + ':' + str(mid_values[test_queue])
print(result_str, end=",")
if __name__ == "__main__":
# 1.读取字符串
test_str = read_str()
# 2.拆分字符串
before_str , after_str = split_str(test_str)
# 3.处理前后字符串
result_dict = handle_total_str(before_str, after_str)
# 4.得出结果并打印
print_str(result_dict)