【无标题】头歌实训作业——第1关:练习-Python字符串之综合练习一答案

发布于:2022-10-29 ⋅ 阅读:(21478) ⋅ 点赞:(19)

## 任务描述:

### 本关任务:给定一个字符串,该字符串中包含了许多邮箱号,使用字符串函数筛选出这些邮箱号,并根据不同的电子邮件服务商来分类。

## 编程要求:

### 仔细阅读右侧编辑区内给出的代码框架及注释,按照提示在 Begin-End 之间编写程序代码。分类结果为一个列表,每个元素的格式如下:

### x:y1,y2...

### x 为邮箱号中@和.com之间的一截,y 为邮箱号,每个邮箱号用英文逗号隔开。请在合适的地方使用排序函数 sorted,使每次运行的结果都一样。

## 测试说明

**平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。**
**可在右侧 “测试结果”区查看具体的测试集详情。**
**测试输入:**

**sasdlf@163.com,non2893@sina.com,29h_Hdskie@sina.com**
**预期输出:**

### **['163:sasdlf@163.com', 'sina:non2893@sina.com,29h_Hdskie@sina.com']**

代码答案:

```python
import copy
str1 = input()# 包含邮箱号的字符串,input()输入的都是字符串
Str =copy.deepcopy(str1) #复制一个
count=Str.count("@")#看看有多少个邮箱号码
list1=list(str1.split(','))#把邮箱号全部放入list1中作为邮箱的value列表
list2=[]#定义一个空列表,作为邮箱类名的key值列表
for i in range(0,count):#有几个邮箱切几次
    a = Str.find("@")# 返回@的位置
    b = Str.find(".")# 返回.的位置
    if Str[a+1:b] not in list2:#去重操作,因为可能有好几个同类别的邮箱
        list2.append(Str[a+1:b])#把邮箱类名放入list2中
    Str=Str[b+4:]#把前面判断过的邮箱号码删除,接着判断知道判断结束为止
dic={}#定义一个空列表,将其键与值对应存入,注意这里一个键对应多个值,所以值的类型是列表,(题目要求已经给出)
for i in list2:
    for j in list1:
        if j.endswith(i+".com"):#如果值是以邮箱名+.com结尾
            dic.setdefault(i,[]).append(j)#就加入到key对应的列表中
res=[]#返回结果列表
keys=[]#key值列表
values=[]#value值列表
for key,valu in dic.items():#遍历字典
    keys.append(key)#将键加入到keys列表中
    values.append(valu)#将值加入到values列表中,注意这里有一个列表嵌套,列表里面还有列表
for i in range(len(keys)):#有几个键就循环几次
        str4=",".join(values[i])#去除了列表的方括号
        res.append(keys[i]+':'+str4)#将格式化后的元素加入到返回结果列表里面
res.sort()#进行排序,要符合测试集给出的顺序
print(res)#输出答案
```


网站公告

今日签到

点亮在社区的每一天
去签到