使用python Chapter_8 MadLibs自动完成无聊的工作

时间:2019-05-22 20:50:33

标签: python

您好,本练习说: 创建一个读取文本文件的Mad Libs程序,并允许用户在文本文件中出现ADJECTIVE,NOUN,ADVERB或VERB的任何位置添加自己的文本。

textfile =熊猫先走到名词,然后走到动词。附近的名词是 不受这些事件的影响。

到目前为止,我有:

import re
#filename = input('Input the Filename: ')

with open('madlibs.txt') as file:
    content = file.read()
file.close()

regex = re.compile(r'ADJECTIVE|NOUN|VERB|ADVERB')
#regex = re.compile('[A-Z]{3,}')
matches = regex.findall(content)
#newWord = []

for word in matches:
    user_input = input('Enter %s: ' % word)
  # newWord.append(user_input)
    new_content = content.replace(word,user_input,1)
print(new_content)

我的输入是:

Enter ADJECTIVE: heavy
Enter NOUN: whale
Enter VERB: runs
Enter NOUN: door

我的输出:

The ADJECTIVE panda walked to the door and then VERB. A nearby door was
unnafected by these events.

有人可以向我解释我在做什么错吗?似乎由于某种原因我无法更改ADJECTIVE和VERB,我也尝试使用大写字母注释正则表达式,并且这样做也一样,因此问题出在其他地方。

1 个答案:

答案 0 :(得分:2)

您需要更改content,但是由于您没有更改,它会覆盖您的更改,直到最后一个字为止:

for word in matches:
    user_input = input('Enter %s: ' % word)
    content = content.replace(word,user_input)  # overwrite content here

print(content)

或者,如果您希望保持content不变:

new_content = content 

for word in matches:
    user_input = input('Enter %s: ' % word)
    new_content = new_content.replace(word,user_input)  # overwrite new_content here

print(new_content)

python中的字符串是不可变的,这意味着它们不会就地更改,而是必须重新分配:

somestring = "this is a string"

for word in ["is", "a"]:
    newstring = somestring.replace(word, "aaaa")

print(newstring)
# this is aaaa string

print(somestring)
# this is a string

请注意,somestring仍然是原始值。第一次replace 发生了,只是重新分配了somestring.replace("a", "aaaa")的结果时,它被覆盖了。

分为步骤:

somestring = "this is a string"

newstring = somestring.replace("is", "aaaa")
# this aaaa a string

newstring = somestring.replace("a", "aaaa")
# this is aaaa string