有一串长的字符串names = "LI XIA , ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI, CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,DU GU QIU BAI,QIAO FENG"。
要求:(1)过滤所有的名字,去掉每个名字左右的空格和乱码,每个名字的首字母大小比如‘LAO WANG*’,处理成‘Lao wang’;(2)统计出最长的名字;(3)统计出同姓人的名单。
解读题目要求,我们可以这样考虑。过滤掉名字左右的空格和乱码,我们可以考虑使用strip函数;每个名字首字母大写,我们可以用title函数;要统计最长的名字,我们需要将每个名字的字符串个数进行切片统计,这里用split函数。
根据上面的思路,编写的代码如下:
names = "LI XIA , ZHAO MING ,LAO WANG *,DA XIONG >,LI MEI MEI,""CHANG JIANG,LI QIANG,ZHANG WU JI,ZHANG SAN FENG,""DU GU QIU BAI,QIAO FENG"
def problems7(names):newnames =[name.title().strip('*>') for name in names.split(',')]names_dict = {name:len(name) for name in newnames}result = sorted(names_dict.items(),key=lambda x:x[1],reverse=True)print(result)problems7(names)
输出的结果是:
[('Zhang San Feng', 14), ('Du Gu Qiu Bai', 13), (' Zhao Ming ', 11), ('Chang Jiang', 11), ('Zhang Wu Ji', 11), ('Li Mei Mei', 10), ('Lao Wang ', 9), ('Da Xiong ', 9), ('Qiao Feng', 9), ('Li Qiang', 8), ('Li Xia ', 7)]
下面介绍刚才使用到的函数。
1.strip函数
用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。但需要注意的是,该方法只能删除开头或结尾的字符,不能删除中间部分的字符。
语法是:str.strip([chars]), chars—移除字符串头尾指定的字符序列。
返回值:返回移除字符串头尾指定的字符生成的新字符串。
2.split函数
通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num+1个子字符串。
语法:str.split(str=“ ”,num=string.count(str))。str—分隔符,默认为所有的空字符,包括空格、换行、制表符等;num—分割次数,默认为-1,即分隔所有。
最后,给大家介绍一些优秀的python代码。
1.简洁的表达式,比如if/else放在一行里面
def test(m):return 'a' if m==1 else 'b'
2.构成一个字典序列
print(dict(zip('abcd',range(4)))) >>{'a':0, 'c':2, 'b':1,'d':3}
3.if else print一行搞定
print('ok' if a==1 else 'ko')
4.一行代码,巧妙的求解:列出1到20的数字,若是3的倍数就用apple代替,若是5的倍数就用orange代替,若既是3的倍数又是5的倍数就用appleorange代替。
print(['apple'[i%35::]+'orange'[i%56::] or i for i in range(1,21)])
很多问题一行代码都可以搞定,但是我觉得作为一个小白,咱们还是老老实实的一步一步的编写代码,等到自己有能力的时候,在玩这些骚操作吧。
今天的分享就到这里,我尽可能地把每一个问题都讲透彻,希望小伙伴们一定要动手操作,把每个代码都亲手敲一遍。别人的思考应该是你思考的起点,但绝非是你思考的终点。