描述
编程统计文本中的单词数量,不包括空格和标点符号(!”#$%&()*+,./:;<=>?@[\]^_‘{|}~\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 txtif __name__ == '__main__':name = input()lsWords = readFile(name).split()print(len(lsWords))
