描述

编程统计文本中的单词数量,不包括空格和标点符号(!”#$%&()*+,./:;<=>?@[\]^_‘{|}~\n),这些符号和空白符一样都是单词的分隔符。

输入格式

文本文件名

输出格式

单词数量

英文文章单词间是以空格分隔的,所以只需要将标点去掉,替换成空格,注意不是空字符串,用字符串替换时,若原文规范,结果可能会正确,若原文中存在标点后未保留空格的情况,可能会将两个单词拼接到一起,导致结果错误。
再根据空格将字符串切分为列表,列表长度即是单词的个数:

  1. 打开文件,读入到字符串中返回

    1. def readFile(filename):
    2. with open(filename,'r') as file: # 只读模式打开文件
    3. content = file.read() # 文件内容读入到一个字符串
    4. return content # 返回字符串
  2. 循环替换掉字符串中所有标号,替换后重新赋值为字符串,根据空格切分为列表

    1. def replaceTxt(txt):
    2. for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
    3. txt = txt.replace(ch, " ") # 将字符串中特殊字符替换为空格,注意要赋值回去
    4. return txt.split() # 根据空格将字符串切分为列表返回
  3. 输出列表长度,即单词个数

完整参考代码如下:

  1. def readFile(filename):
  2. with open(filename,'r') as file: # 只读模式打开文件
  3. content = file.read() # 文件内容读入到一个字符串
  4. return content # 返回字符串
  5. def replaceTxt(txt):
  6. for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
  7. txt = txt.replace(ch, " ") # 将字符串中特殊字符替换为空格,注意要赋值回去
  8. return txt.split() # 根据空格将字符串切分为列表返回
  9. if __name__ == '__main__':
  10. name = input() # 输入文件名
  11. content = readFile(name) # 读文件,返回字符串
  12. result = replaceTxt(content) # 字符串替换和切分
  13. print(len(result)) # 输出列表长度

可以只用一个函数实现,代码可以略少,但打开文件和替换的操作在一个函数中完成,逻辑复杂度略高,大家可以比较一下:

  1. def readFile(filename):
  2. txt = open(filename,'r').read()
  3. for ch in '!"#$%&()*+,./:;<=>?@[\\]^_‘{|}~\n':
  4. txt = txt.replace(ch, " ") #将文本中特殊字符替换为空格
  5. return txt
  6. if __name__ == '__main__':
  7. name = input()
  8. lsWords = readFile(name).split()
  9. print(len(lsWords))