gpt4 book ai didi

python - 用 python 自动化那些无聊的事情 Chapter_8 MadLibs

转载 作者:行者123 更新时间:2023-12-01 00:55:43 24 4
gpt4 key购买 nike

你好,这个练习说:创建一个 Mad Libs 程序,该程序读取文本文件,并允许用户在文本文件中出现形容词、名词、副词或动词的任何位置添加自己的文本。

textfile = 形容词 Pandas 走到名词,然后走到动词。附近的名词是未受到这些事件的影响。

到目前为止我所拥有的是:

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.

有人可以向我解释一下我做错了什么吗?由于某种原因,我似乎无法更改形容词和动词,我还尝试了大写的注释正则表达式,它的作用相同,所以问题出在其他地方。

最佳答案

您需要更改内容,但因为您没有更改,所以它会覆盖您的更改,直到最后一个字:

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

print(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

关于python - 用 python 自动化那些无聊的事情 Chapter_8 MadLibs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56264834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com