筆試題目:從主字符串中去掉從字符串
0.前言
考試題目如下:
例:
a:5,b:5,c:2@a:2,c:1
得到
a3,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)