仅使用for循环从文件中检索每个第5个字符,不使用readlines

时间:2016-10-30 19:55:48

标签: python

所以这是我需要为这个类做的以下问题,我可以轻松地做到但我们不允许使用readline或read,只有for循环:

  

湾编写一个程序,从用户那里获取两个文件名 - 一个用于   输入(我们将使用poem.txt和suess.txt作为测试文件)和一个用于   输出。然后程序读取指定的输入文件并创建   包含输入中每五个字符的新输出文件   仅当该字符是字母时才归档。另外,这个角色   如果它是元音,则应为大写;如果是元音,则应为小写   辅音。最后,该程序应输出统计数据   改动的文字,包括:

     

•字符数•辅音数•数量   元音

     

例如,如果输入文件包含:

Do you like green eggs and ham? I like them, Sam I am! Do you like
green eggs and ham, Sam? Do you like them, Sam I am?
     

然后输出文件应为:OkEgnmltIOkEgnmmltI

     

字符数:   19辅音数:13元音数:6

这是我到目前为止所得到的(忽略文件占位符):

#init vars
vowels = 'aeiou'
cons = 'bcdfghjklmnpqrstvwxyz'
noVowels = 0
noCons = 0
noChars = 0
i = 0

#Get input and output files
#usrIn = input("Input File: ")
#usrOut = input("Output File: ")

#File Manage
fi = open('suess.txt', 'r')
fo = open('test.txt', 'w')

#For loop
for line in fi:
    if (line[i+4].lower() in vowels):
        noVowels += 1
        fo.write(line[i+4].upper())
    elif (line[i+4].lower() in cons):
        noCons += 1
        fo.write(line[i+4].lower())




#Output stats    
noChars = noCons + noVowels
print("The number of characters: {}".format(noChars))
print("The number of consonants: {}".format(noCons))
print("The number of vowels: {}".format(noVowels))

#close files
fi.close()
fo.close()

我已经尝试过增加' i'但它会产生错误的输出,我想这是因为它只会增加“我”。在线已经读完之后,这显然是错误的。我需要它来获取该行中的每个第5个字符,然后从下一行的第5个字符开始。 请帮助!

2 个答案:

答案 0 :(得分:1)

您可以将范围功能与for循环一起使用:

text = "Do you like green eggs and ham? I like them, Sam I am! Do you like green eggs and ham, Sam? Do you like them, Sam I am?"
transform = ''

for l in range(4, len(text), 5):
    transform += text[l]

#remove spaces (as your example).
transform = transform.replace(' ', '')

答案 1 :(得分:0)

使用以下方法:

info = {
    'vowels': 'aeiou',
    'cons': 'bcdfghjklmnpqrstvwxyz',
    'noVowels': 0,
    'noCons': 0,
    'noChars': 0
}

with open("suess.txt", 'r') as fh:
    text = list(''.join([l for l in fh]))

output = ''
for k, v in enumerate(text):
    if ((k+1) % 5) == 0 and v.lower() in info['vowels'] + info['cons']:
        if v in info['cons']:
            info['noCons'] += 1
        else:
            info['noVowels'] += 1
            v = v.upper()

        output += v

fh.close()

print(output)
print("The number of characters: {}".format(info['noCons'] + info['noVowels']))
print("The number of consonants: {}".format(info['noCons']))
print("The number of vowels: {}".format(info['noVowels']))

输出:

OkEgnmltIOkEgnmmltI
The number of characters: 19
The number of consonants: 13
The number of vowels: 6