如何解决我想用一个用户输入的新单词替换在文件中出现两次的单词...
任务是:
创建一个Mad Libs程序,该程序读取文本文件,并允许用户在文本文件中出现ADJECTIVE,NOUN,ADVERB或VERB的任何位置添加自己的文本。例如,文本文件madlibs1.txt具有以下内容:
ADJECTIVE熊猫先到名词,然后是动词。附近的名词是 不受这些影响
输入一个形容词: 愚蠢 输入一个名词: 吊灯 输入动词: 尖叫 输入一个名词: 皮卡车
然后应打印以下文本: 愚蠢的熊猫走到吊灯,然后尖叫。附近的皮卡 卡车不受这些事件的影响。
我的代码如下
with open('madlibs1.txt') as f:
file = f.read()
file = file.replace('ADJECTIVE',input('Enter an adjective: '))
file = file.replace('NOUN',input('Enter a noun: '))
file = file.replace('VERB',input('Enter a verb: '))
file = file.replace('NOUN',input('Enter a noun: '))
print(file)
但是它会打印两次枝形吊灯,因为NOUN的键已设置为用户的第一个输入。
我该怎么办?我应该使用split()还是创建一个空字典?有什么想法吗?
问候 色达
解决方法
只需创建一个模板。您可能可以使用jinja或常规python。模板有很多选项。
# my_template.txt
The {adjective1} {adjective2} fox {verb1} over the {adjective3} dog
然后只在字符串上使用格式
with open("my_template.txt","r") as f:
contents = f.read()
replace = {}
replace['adjective1'] = input('Enter an adjective: ')
replace['adjective2'] = input('Enter an adjective: ')
replace['verb1'] = input('Enter an verb: ')
replace['adjective3'] = input('Enter an adjective: ')
txt = contents.format(**replace)
print(txt)
您也可以使它自动化
from string import digits
remove_digits = str.maketrans('','',digits)
def find_variables(contents):
"""Iterator that yields (variable name,variable type) found
in the given contents.
"""
while True:
idx = contents.find('{')
if idx == -1:
break
idx2 = contents[idx:].find('}')
if idx2 == -1:
break
varname = contents[idx+1:idx2]
var_type = varname.translate(remove_digits) # Not Tested
contents = contents[idx2:]
yield varname,var_type
with open("my_template.txt","r") as f:
contents = f.read()
replace = {varname: input('Enter one {}:'.format(var_type))
for varname,var_type in find_variables(contents)}
txt = contents.format(**replace)
print(txt)
,
如果您无法更改文件,则可以使用此文件。
with open('madlibs1.txt') as f:
for line in f.readlines():
line = line.strip("\n")
newline = ""
for word in line.split(" "):
if word.startswith(('ADJECTIVE','NOUN','VERB')):
if word.endswith((',','.')): word,punctuation = word[:-1],word[-1]
word = input(f'Enter a {word}')
if punctuation:
word += punctuation
punctuation = ""
newline = " ".join([newline,word]) if newline else word
print(newline)
# 'The red panda walked to the dog and then sit. A nearby cat was unaffected by these events.'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。