'删除元音'功能只打印'readline()'的第一个字母,我做错了什么?

时间:2017-10-30 12:20:58

标签: python

要点:

编写一个处理“pc_woodchuck.txt”内容的程序 逐行。它在当前工作目录中创建一个输出文件 “pc_woodchuck.tmp”,其内容与“pc_woodchuck.txt”相同,只是删除了所有元音(不区分大小写)。最后,显示您阅读的字符数,以及您编写的字符数。

使用下面的行创建一个文本文件(pc_woodchuck.txt)以获得相同的结果:

Hoeveel hout kan een houthakker hakken
Als een houthakker hout kan hakken?
 Hij kan hakken zoveel als hij kan hakken
 En hij hakt zoveel als een houthakker kan hakken
 Als een houthakker hout kan hakken。

到目前为止尝试:

from os.path import join
from os import getcwd

def removeVowels( line ):
    newline = ""
    for c in line:
        if c not in "aeiouAEIOU":
            newline += c
        return newline

inputname = join( getcwd(), "pc_woodchuck.txt" )
outputname = join( getcwd(), "pc_woodchuck.tmp" ) # This will be the copy of the 
                                                  # textfile at 'inputname' without 
                                                  # vowels (pc_woodchuck.tmp).                                 

fpi = open( inputname )
fpo = open( outputname, "w" )

countread = 0
countwrite = 0

while True:
    line = fpi.readline()
    if line == "":
        break
    countread += len( line )
    line = removeVowels( line )
    countwrite += len( line )
    fpo.write( line )

fpi.close()
fpo.close()

print( "Read:", countread )
print( "Wrote:", countwrite )
到目前为止

输出:

Read: 201
Wrote: 2    # But there must be more than two vowels!

问题:

我做错了什么?结果'Wrote:2'显然不对......

1 个答案:

答案 0 :(得分:2)

return newline在for循环中,因此函数在第一个循环中返回,这就是为什么只有一个字母。

我认为应该是:

def removeVowels( line ):
newline = ""
for c in line:
    if c not in "aeiouAEIOU":
        newline += c
return newline