统计文本文件中前“X”个元音字母的数量?- while循环问题

0 投票
2 回答
1637 浏览
提问于 2025-04-18 02:39

我似乎无法让这个 while 循环正常工作。

我想创建一个叫做 count_vowels 的函数,它需要两个参数,一个是文本文件的名字(filename),另一个是一个数字(x)。这个函数应该打开指定的文本文件,然后用一个 while 循环来找到文件中前 x 个元音字母,并把它们以一个新的字符串形式返回。

举个例子,如果文本文件里有 "aeiou",而 x 的值是 2,那么输出的字符串应该是 "ae",而不是 "aeiou"。当然,实际使用中可能更像是,比如一个文本文件里有 "hello, I am a text file",如果 x 的值是 5,那么返回的结果应该是 "eoIaa"——也就是前 5 个元音字母。

我尝试的代码:

        def count_vowels(filename,x):

        text=open(filename).read()
        vowels=("A","E","I","O","U","a","e","i","o","u")
        count = 0
        new_str=""
        while count<x:
            for char in text:
                 if char in vowels:
                     count+=1
                     new_str=new_str+char
            print new_str

不幸的是,我得到的输出是文本文件中 每一个 元音字母的字符串。

2 个回答

0

你只需要去掉那个for循环。你现在告诉程序要做的事情是:

当计数小于X时 - 如果计数小于X,就一直循环(循环1)

对文本中的每个字母进行操作 - 查看文本文件中的每个字母,并保存元音字母(循环2)

循环2没有结束条件,所以它会一直进行,直到到达文件的末尾,而循环1在循环2处理完所有文本之前不会重新评估。

更新:

----这是一个只用while循环来实现的例子:

例子:

position = 0
count = 0

while count < x:
    if text[position] in vowel:
        new_char += text[position]
        count+= 1

    position += 1

(这个while循环将会遍历文本文件中的每个字符,而不使用for循环)

1

这是因为你的循环 for char in text 会先执行完毕,然后外面的 while 循环才会去检查 count 的值。

解决办法是去掉外面的循环,当 count 达到要求时直接退出 for 循环:

    for char in text:
         if char in vowels:
             count += 1
             new_str += char
             if count >= x: break
    print new_str

撰写回答