从文件中读取字符串,将其替换,并将其存储在新文件中。 (Python 3.x)

问题描述:

创建一个读取文本文件的Mad Libs程序,并允许用户在文本文件中出现ADJECTIVE,NOUN,ADVERB或VERB的任何位置添加自己的文本。例如,一个文本文件可能看起来像这样:从文件中读取字符串,将其替换,并将其存储在新文件中。 (Python 3.x)

ADJECTIVE熊猫走到NOUN,然后VERB。附近的NOUN是 不受这些事件的影响。

该程序会发现这些事件并提示用户更换它们。然后

Enter an adjective: 
silly 
Enter a noun: 
chandelier 
Enter a verb: 
screamed 
Enter a noun: 
pickup truck 

下面的文本文件将被创建:

傻熊猫走到吊灯,然后尖叫。这些事件并未影响附近的一辆皮卡车。

结果应打印到屏幕上并保存到新的文本文件中。

我的代码:

import os 

InputFile = open('FileOne.txt','r') 
InputContent = InputFile.read() 
InputFile.close() 

outputFile = open('FileTwo.txt','w') 
convert = InputContent 
for word in ['NOUN', 'ADJECTIVE', 'VERB']: 
    if word in InputContent: 
     convert = convert.replace(word, input('Enter %s: ' %word)) 

outputFile.write(convert) 
outputFile.close() 

我FileOne的内容是:名词是形容词的人。突然NOUN VERB。 NOUN现在已经死了。

当我运行代码:

Enter NOUN: Dave 
Enter ADJECTIVE: lovely 
Enter VERB: screamed. 

它创建文本文件FileTwo传送输出,但它是空的。

输出文件应包含

戴夫是一个可爱的人。突然戴夫尖叫起来。戴夫现在已经死了。

我在做什么错?

编辑:更改了代码。它现在有效。非常感谢您的帮助:d

+0

'convert'是'Convert'不同。 – ForceBru

+0

你已经将小写'c'转换为空字符串。然后在循环中用'c'设置'Convert'。 –

+0

我会改变它。 – Renegade

Th是因为你想要覆盖的变量是一个空字符串。所以,当你把输出放在第二个文件中时,你几乎没有任何内容。

相反,如果你把转换并设置它等于InputContent,那么之后每次更换设置转换等于转换,然后它的伟大工程:

import os 

InputFile = open('FileOne.txt','r') 
InputContent = InputFile.read() 
InputFile.close() 

outputFile = open('FileTwo.txt','w') 
convert = InputContent 
for word in ['NOUN', 'ADJECTIVE', 'VERB']: 
    if word in InputContent: 
     Convert = convert.replace(word, input('Enter %s: ' %word)) 
     convert = Convert 
outputFile.write(Convert) 
outputFile.close() 
+0

谢谢。它现在正常工作:) – Renegade

+0

很高兴我能帮上忙。记得接受一个答案关闭线程;) – Zard

+0

哦,我不知道这一点。完成。 – Renegade

在Python解释器尝试你的代码的简化版本,显示了错误的很清楚

>>>convert = '' 
>>>convert.replace('abc', '123') 
'' 

你把空字符串“”和更换名词(它不存在)与戴夫,其结果仍然是一个空字符串。

然后您将空字符串写入FileTwo。TXT

的解决办法是调用替换()在InputContent

一个简单的例子是

>>>InputContent = 'Hello NOUN, my name is NOUN' 
>>>InputContent.replace('NOUN', 'Dave') 
'Hello Dave, my name is Dave' 

现在你看到的是替换()取代所有实例的搜索词的(在此case NOUN)

解决这个新问题将作为练习留给你

+0

谢谢你的帮助:) – Renegade