计算文件中的元音和辅音(Python)

时间:2017-08-06 18:46:50

标签: python python-3.x for-loop lowercase

我需要创建一个程序来读取文本文件并打印出有多少元音和辅音。我制作了一个文本文件进行测试,其中唯一的内容就是“这是一个测试”。但总是输出:

输入要检查的文件:test.txt

元音数量为:1

辅音的数量是:0

fileName = input("Enter the file to check: ").strip()

infile = open(fileName, "r")


vowels = set("A E I O U a e i o u")
cons = set("b c d f g h j k l m n p q r s t v w x y z B C D F G H J K L M N P Q R S T V W X Y Z")

text = infile.read().split()


countV = 0
for V in text:
    if V in vowels:
        countV += 1

countC = 0
for C in text:
    if C in cons:
        countC += 1

print("The number of Vowels is: ",countV,"\nThe number of consonants is: ",countC)

如果有更好的方法输入元音和缺点的值,我也想知道,因为当我尝试使用.lower()将文件中的所有内容转换为小写时我收到错误... ..

2 个答案:

答案 0 :(得分:3)

  1. set("A E I O U a e i o u")会产生{' ', 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'}。如果您注意到,也会考虑空间。您需要删除字母之间的空格。

  2. infile.read().split()将根据空格进行拆分,以便您获得单词列表。然后,您继续迭代单词,并尝试在单词字母之间进行成员资格比较。这对你来说不合适。

  3. 您不需要迭代两次。一次就够了。

  4. 以下是代码的清理版本。

    vowels = set("AEIOUaeiou")
    cons = set("bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ")
    
    countV = 0
    countC = 0
    for c in infile.read():
        if c in vowels:
            countV += 1
        elif c in cons:
            countC += 1
    

    作为改进,请考虑使用collections.Counter。它为你做计数,你只是总结了计数。

    import collections
    c = collections.Counter(infile.read())
    
    countV = sum(c[k] for k in c if k in vowels)
    countC = sum(c[k] for k in c if k in cons)
    

答案 1 :(得分:0)

如果输入文件fileName包含的元素不同于元音和辅音,例如. , \n,则解决方案是使用re.split()re.sub()代替方法str.split()

import re
text = re.split("\s+", re.sub("[.,\n+]", " ", infile.read()))

表达式re.sub("[.,\n+]", " ", infile.read())将用空格替换字符. , \n。然后,表达式re.split("\s+", re.sub("[.,\n+]", " ", infile.read())将拆分“清除”。 infile.read()文本使用空格字符重复的标准