从键盘读入由仅由英文构成的多行文本,借助于字典统计其中每个单词出现的次数。然后按字典递增序按格式输出每个单次出现的次数。
要求:
1. 所有单词不区分大小写,输出时按小写格式输出;
2. 需要排除! , : ?等英文符号,即这些符号不应作为单词的构成部分;
3. 需要排除0,1,2,... 9等数字,即这些数字不应作为单词的构成部分。
输入格式:
行数n
第1行内容
第2行内容
....
第n行内容
输出格式:
单词1 单词1出现次数
单词2 单词2出现次数
...
单词k 单词k出现次数
注意: 单词1, 2,.... k 按字典递增序。
输入样例:
4
Hello! baby! Jupyter 4 class
class ultimately.
class
jupyter
输出样例:
baby 1
class 3
hello 1
jupyter 2
ultimately 1
ANGSER:
import re
dict_p={}
n=int(input())
for i in range(n):
str2 = re.sub('([^A-Za-z(^s*)|(s*$) ])', '',input())
for j in str2.split():
dict_p[j.lower()]=dict_p.get(j.lower(),0)+1
dict_s=dict(sorted(dict_p.items(),key=lambda x:x[0]))
for key,value in dict_s.items():
print(key,value)
部分思想小记:
1、运用re.sub()匹配并保留由26个英文字母组成and空格组成的字符串(使用了正则表达式)
2、split()通过指定分隔符对字符串进行切片,如果是for j in str2,会造成逐字读取
#!/usr/bin/python
# -*- coding: UTF-8 -*-
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";
print str.split( ); # 以空格为分隔符,包含 \n
print str.split(' ', 1 ); # 以空格为分隔符,分隔成两个
3、 使用dict.get()
#!/usr/bin/python
# -*- coding: UTF-8 -*-tinydict = {'Name': 'Runoob', 'Age': 27}
print ("Age : %s" % tinydict.get('Age'))
# 没有设置 Sex,也没有设置默认的值,输出 None
print ("Sex : %s" % tinydict.get('Sex'))# 没有设置 Salary,输出默认的值 0.0
print ('Salary: %s' % tinydict.get('Salary', 0.0))
此时只有key值,而value值都默认为零,所以查询到dict_p存在就用默认值加1,实现统计功能
4、sorted()排完序后成为pta提示dict_p成为list 格式所以要进行转化,才能使用属于字典格式的输出
博主属于作业记录,如果有不对的解释欢迎指正,觉得文章不错,就留下一个免费的赞吧