Description
假设你是一个美食家,现在需要编写一个函数,函数接收一个字符串作为参数,该字符串由多个食材组成,每个食材之间用"$","#"等特殊符号隔开,函数需要将这些食材两两组合起来,输出所有可能的菜式,要求食材不能重复出现。 注意:为确保输出一致,在解析出食材之后,建议先对食材排一次序再进行搭配,搭配好后排序再输出,中文本质上是利用unicode字符转换的数值排序,不是拼音序号排序。
Format
Input
西红柿%鸡蛋*花菜$西红柿
Output
花菜+西红柿 花菜+鸡蛋 西红柿+鸡蛋
Samples
输入数据 1
土豆$土豆$茄子$洋葱%洋葱*土豆&芹菜
输出数据 1
土豆+洋葱 土豆+芹菜 土豆+茄子 洋葱+芹菜 洋葱+茄子 芹菜+茄子
tips:
1.input输入数据
2.re.findfall 返回所有的中文字符,并用变量接收(注:提前导入re模板)
3.定义一个空列表l1
4.在输入的数据中遍历,如果元素是中文字符则添加到列表中,如果不是则append(' ')隔开
5.现在得到一个包含了输入数据中所有食材的列表(含重复元素的),因此需要set处理一下重复元素,并且用sort函数对以上列表进行排序
6.做完以上操作可得到一个不含重复食材 并排好序的食材列表,现在可以对食材进行选择搭配
7.定义一个新的空列表l2,用来存储食材搭配的可能
8.双重循环遍历排好序的食材列表,以便取出每一种食材,并且在a ! = b的情况下执行9
9.如果a + b 已经存在于l2中,则pass,反之a + b这种搭配还没有,则将b + a 使用append函数存入l2中。
注意存入b + a是因为一种搭配存在的形式可能是a + b 也可能是b + a (这都是同一种搭配)。
如果此时a + b 此时没有在l2中,存入b + a于l2中后,等某一次循环轮到判断b + a 是否存在于l2 中时,此时b + a 已经在之前的判断中放进去了 ,因此我们的目的达到,a + b和b + a这一种搭配只有一个形式进入了l2.
10.在循环中输出 a + b 的食材搭配形式,并注意末尾的 end=' '
代码:
import re
s =input()
chinese = re.findall(r'[\u4e00-\u9fa5]', s)
index = 0
l1 = ['']
for i in s:
if i in chinese:
l1[index] += i
else:
index += 1
l1.append('')
l1 = sorted(set(l1))
l2 = []
for i in l1:
for j in l1:
if i != j:
if str(i + '+' + j) in l2:
pass
else:
l2.append(str(j + '+' + i))
print(i + '+' + j, end=' ')