您好,本练习说: 创建一个读取文本文件的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,我也尝试使用大写字母注释正则表达式,并且这样做也一样,因此问题出在其他地方。
答案 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