首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python基础——以练为习

话不多说,直接开始,先看如下题干:

'''

已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下

1 请将a字符串的大写改为小写,小写改为大写。

2 请将a字符串的数字取出,并输出成一个新的字符串。

3 请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {'a':4,'b':2}

4 请去除a字符串多次出现的字母,仅留最先出现的一个。例'abcabb',经过去除后,输出 'abc'

5 请将a字符串反转并输出。例:'abc'的反转是'cba'

6 去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符串。(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb)

7 请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输出False.

8 要求如1.7,此时的单词判断,由'boy'改为四个,分别是 'boy','girl','bird','dirty',请判断如上这4个字符串里的每个字母,是否都出现在a字符串里。

9 输出a字符串出现频率最高的字母

10 要求所有的小写字母在大写字母前面,所有的字母在数字前面,所有的奇数在偶数前面

'''

这个练习共有十问,综合了字符串string,列表list,字典dict,元组tuple,集合set等基本数据类型,以及这些数据类型之间的转化。下面开始逐一分析,逐一上代码。

1

大写转小写,小写转大写,直接用swapcase函数。

print(a.swapcase())

2

判断字符串中为数字的字符,放入列表中,用join函数将列表中的字符拼接成字符串。

print(''.join([sforsinaifs.isdigit()]))

3

用count函数计算字符串中字符出现的次数,将字符和出现的次数以元组的形式存入列表,最后转化成字典。

print(dict([(x,a.count(x))forxinset(a)]))

4

第一步:将字符串转化成列表:

a_list =list(a)

第二步:将列表转化成集合去重,然后再转化成列表:

set_list =list(set(a_list))

第三步:对去重过的列表进行原先的排序:

set_list.sort(key=a_list.index)

第四步:将列表拼接成字符串:

print(''.join(set_list))

5

方法一:用reverse函数反转

a_list =list(a)

a_list.reverse()

print(''.join(a_list))

方法二:使用步进反转

print(a[::-1])

6

拆分成两个任务:

(1)小写字母进行a-z排序

(2)大写字母插入到相同小写字母之前

s_list =sorted(a)

#定义一个大写字母的list

a_upper_list = []

#定义一个小写字母的list

a_lower_list = []

forxins_list:

ifx.isupper():

a_upper_list.append(x)

elifx.islower():

a_lower_list.append(x)

else:

pass

foryina_upper_list:

#大写字母转化成小写字母进行判断

y_lower = y.lower()

ify_lowerina_lower_list:

#将大写字母插入到对应的小写字母所在的脚标,小写字母自动后移

a_lower_list.insert(a_lower_list.index(y_lower),y)

print(''.join(a_lower_list))

7

将字符串a和字符串“boy”都转化成集合,比较字符串a转化的集合与两个集合合并后的集合所占总长度,是否相等。

a_set =set(list(a))

boy_set =set(list('boy'))

#计算当前a集合的长度

x =len(a_set)

#将boy集合放入a集合

a_set.update(boy_set)

#再次计算更新后的a结合的长度

y =len(a_set)

#判断两次计算的长度是否相等,相等输出True,不相等输出False

ifx == y:

print("True")

else:

print("False")

8

字符串“girl”“bird“”dirty”中都有字符串“ir”,可以先判断“ir”,如果返回False,就不用再判断了,如果返回True,则需要对不含“ir”的字符串做进一步判断。

为了方便,定义一个函数:

defisAllContain(a,b):

a_set =set(list(a))

b_set =set(list(b))

x =len(a_set)

a_set.update(b_set)

y =len(a_set)

ifx == y:

return True

else:

return False

print(isAllContain(a,"ir"))#True

print(isAllContain(a,"girl".replace("ir","")))#True

print(isAllContain(a,"bird".replace("ir","")))#True

print(isAllContain(a,"dirty".replace("ir","")))#False

9

这一题与第三题类似,不过这里呢,不用字典,用集合。

第一步:将字符和字符出现的次数,组成元组放在列表里

a_set_list = ([(x,a.count(x))forxinset(a)])

第二步:将列表根据元组第二项进行由大到小的排序

a_set_list.sort(key=lambdak: k[1],reverse=True)

第三步:找到列表中第一个元组中的第一项

print(a_set_list[][])

10

这一题虽然描述起来很复杂,但是可以一行代码搞定,自己体会吧。

new_s ="".join(sorted(a,key=lambdax: (x.isdigit(),x.isdigit()andint(x) %2==,x.isupper(),x.islower(),x)))

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180213G0SP4Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券