描述
编程统计文本中的单词数量,不包括空格和标点符号(!”#$%&()*+,./:;<=>?@[\]^_‘{|}~\n),这些符号和空白符一样都是单词的分隔符。
输入格式
输出格式
单词数量
英文文章单词间是以空格分隔的,所以只需要将标点去掉,替换成空格,注意不是空字符串,用字符串替换时,若原文规范,结果可能会正确,若原文中存在标点后未保留空格的情况,可能会将两个单词拼接到一起,导致结果错误。
再根据空格将字符串切分为列表,列表长度即是单词的个数:
打开文件,读入到字符串中返回
def readFile(filename):
with open(filename,'r') as file: # 只读模式打开文件
content = file.read() # 文件内容读入到一个字符串
return content # 返回字符串
循环替换掉字符串中所有标号,替换后重新赋值为字符串,根据空格切分为列表
def replaceTxt(txt):
for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
txt = txt.replace(ch, " ") # 将字符串中特殊字符替换为空格,注意要赋值回去
return txt.split() # 根据空格将字符串切分为列表返回
输出列表长度,即单词个数
完整参考代码如下:
def readFile(filename):
with open(filename,'r') as file: # 只读模式打开文件
content = file.read() # 文件内容读入到一个字符串
return content # 返回字符串
def replaceTxt(txt):
for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
txt = txt.replace(ch, " ") # 将字符串中特殊字符替换为空格,注意要赋值回去
return txt.split() # 根据空格将字符串切分为列表返回
if __name__ == '__main__':
name = input() # 输入文件名
content = readFile(name) # 读文件,返回字符串
result = replaceTxt(content) # 字符串替换和切分
print(len(result)) # 输出列表长度
可以只用一个函数实现,代码可以略少,但打开文件和替换的操作在一个函数中完成,逻辑复杂度略高,大家可以比较一下:
def readFile(filename):
txt = open(filename,'r').read()
for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
txt = txt.replace(ch, " ") #将文本中特殊字符替换为空格
return txt
if __name__ == '__main__':
name = input()
lsWords = readFile(name).split()
print(len(lsWords))