SWUST 派森练习题:P50 食材搭配

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=' '

1.re.findall()用法详解

2.re模块的使用

3.正则表达式的简单使用

4.python的“end=”介绍_"end=\" \"是什么意思"

5.python 对中文排序

代码:

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=' ')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值